以下の内容はhttps://cysec148.hatenablog.com/entry/2025/08/24/160030より取得しました。


第45回:インテントフィルタの設定ミスを悪用する方法

Hello there, ('ω')ノ

📮 インテントフィルタとは?

インテントフィルタ(intent-filter)とは、アプリのどの機能(Activity, Service, BroadcastReceiverなど)が、どんなインテント(Intent)を受け取れるかを定義するものです。

AndroidManifest.xml の中で、次のように記述されます:

<activity android:name=".MyActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="myapp" />
    </intent-filter>
</activity>

この設定により、他のアプリやWebページから myapp:// で始まるリンクを受け取れるようになります。


⚠️ 設定ミスが引き起こすリスク

ミスのタイプ 内容 結果
exported="true" かつ認証なし 外部アプリから自由に呼び出し可能 本来の操作が外部から実行される
data属性の範囲が広すぎる android:schemeandroid:host があいまい 意図しないデータで動作
機密処理にintent-filterがある 意図しないアクティビティが公開 パスワード変更・設定初期化などが外部操作可に
権限のないコンポーネントがインテントを受け取る 検証不足のまま処理を実行 インテントインジェクションが成立

💥 攻撃者が悪用する方法

攻撃者は以下のような手段でインテントを送信し、アプリの機能を不正に呼び出そうとします。

✅ ADBを使った例:

adb shell am start -n com.example.app/.MyActivity -a android.intent.action.VIEW -d "myapp://malicious"

✅ 他アプリからのIntent送信(コード)

Intent intent = new Intent();
intent.setComponent(new ComponentName("com.example.app", "com.example.app.MyActivity"));
intent.setData(Uri.parse("myapp://malicious"));
startActivity(intent);

これにより、本来内部だけで使うつもりだったアクティビティが外部から操作されてしまうのです。


🧪 診断ポイント

🔍 1. Manifestファイルの確認

  • exported="true" の有無
  • intent-filter がついている Activity / Service / Receiver の一覧
  • data属性の指定が適切かどうか(schemehostpath

🔍 2. Drozerを使って検証

Drozerコマンド例:

run app.activity.info -a com.example.app
run app.activity.start --component com.example.app com.example.app.MyActivity

→ 外部から起動できるアクティビティやサービスがないかを確認し、実行時にどんな処理が行われるか観察します。


🛡️ 対策方法

対策 内容
exportedの適切な設定 Android 12以降は exported="false" がデフォルト。必要な場合のみ明示的に true
意図しないコンポーネントにintent-filterをつけない 公開する必要があるものだけに設定
インテントの中身を検証する 受け取ったデータやパラメータにバリデーションを入れる
権限付きインテントで制限する android:permission 属性を使って特定のアプリにだけ許可する
Web経由でのリンク制御 android:autoVerify="true" を使って信頼されたドメインからのみ起動可能にする(DeepLink用)

✅ まとめ

  • インテントフィルタはアプリの“入口”の設計図。ミスがあれば外部から自由に侵入されてしまう
  • Manifestの exportedintent-filter の定義は公開範囲を明確に設計することが重要
  • 診断では、外部から呼び出せるアクティビティ/サービス/ブロードキャストをリストアップし、誤動作や情報漏洩が起きないかを確認
  • “本来は社内向けの裏口”が、外部にも開いていないか? それが今一度のチェックポイントです

Best regards, (^^ゞ




以上の内容はhttps://cysec148.hatenablog.com/entry/2025/08/24/160030より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14