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


第43回:URLスキームからの情報漏洩と誤動作の例

Hello there, ('ω')ノ

🔗 URLスキームとは?

URLスキームとは、特定のアプリを起動したり、特定の画面に直接ジャンプしたりするためのURL形式のインテント呼び出しの仕組みです。

例:

myapp://user/profile?id=12345

このようなスキームが設定されていると、他のアプリやブラウザからこのリンクをタップするだけで、自社アプリのユーザー画面を直接開けたりします。

非常に便利な機能ですが、適切な制御がされていないと深刻な問題を引き起こします。


⚠️ どんな問題が起こるの?

問題タイプ 内容
情報漏洩 URLパラメータで送られた機密情報(例:トークン、ID)がログや他アプリから読み取られる
意図しない画面遷移 攻撃者が細工したURLを送信し、アプリを異常な状態で起動させる
不正な操作の実行 データ削除や決済などがスキーム経由で勝手に呼び出せてしまう
CSRF風攻撃 外部アプリがスキームを使って操作を間接的に強制する

💥 実例:情報漏洩パターン

✅ 1. ユーザートークン付きスキーム

myapp://auth/callback?token=abc123xyz

このURLをログ出力してしまうと:

Log.d("AuthCallback", "Token: " + token);

→ 他のアプリや攻撃者により、ログファイルからトークンが盗まれる可能性があります。

✅ 2. スキームを誰でも使えるようにしている

AndroidManifest.xml:

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

→ この設定だけだと、誰でもそのスキームを呼び出せる状態になります。


🧪 診断ポイント(静的・動的)

🔍 静的解析(Manifestのチェック)

  • intent-filter による android:scheme 定義を確認
  • アプリが処理するURIのパス・パラメータに検証・認証の処理があるか

🔍 動的解析(実機テスト)

  1. ADBを使ってカスタムスキームを呼び出す:
adb shell am start -a android.intent.action.VIEW -d "myapp://admin/reset"
  1. 認証不要で操作が実行されてしまう場合、設計ミスや検証不足の可能性があります。

🛡️ 対策方法

対策 内容
パラメータの検証 スキーム経由で渡された値(id、tokenなど)は必ずサーバー側でも再確認
アクセス制限 操作に認証(ログイン状態やトークンチェック)を組み込む
ログ出力の制御 URIやトークンを Log.d() などで出力しない
インテントフィルタの範囲を絞る android:hostandroid:pathPrefix を使って受け取るURIを制限する
Android 11以降の制限を活用 android:exported="false" などで外部呼び出しを明示的に制限

🧠 よくある誤解と注意点

誤解 実際は…
スキームは自分のアプリしか使えない 他のアプリや攻撃者もURLを発行できる
URIに書かれた値は安全 ログや履歴に残ることもあり、誰でも読める場合もある
スキームは便利なショートカット程度 しっかり認証・検証されていないと攻撃の入口になる

✅ まとめ

  • URLスキームはアプリ連携や画面遷移をスムーズにする便利な仕組み
  • しかし、適切な制限・認証がなければ、情報漏洩や不正操作のきっかけに
  • パラメータの検証・ログ制御・アクセス制限が最小限の防衛線
  • 実機で adb shell am start を使って動的検証することで、再現と診断が可能

Best regards, (^^ゞ




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

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