
CVE-2023-31014 暗黙的インテントハイジャッキングの教育用 Android ラボ
NVIDIA GeForce NOW for Android の CVE-2023-31014 公開レポートに基づいて作成した教育用 Android Lab です。NVIDIA のソースコード、実際の Action 文字列、実際の認証情報は含まれていません。
6.00.32705137 ~ 6.04.331088326.05.33200069Oversecured が公開的に言及した露出カテゴリは、stream configuration、user account、game information です。
| 区分 | 実装内容 |
|---|---|
| Game Launcher | victim/MainActivity |
| 正常な Streamer | victim/StreamerActivity |
| 悪意のある Handler | attacker/HijackActivity |
| 情報漏えい | 仮想のゲーム・アカウント・セッション・ストリーム設定 Extras を表示 |
| サービス拒否 | 攻撃 Activity が Intent を処理し、正常な Streamer が起動しない |
| 修正 | 正確な StreamerActivity を指定した explicit Intent |
公式資料には実際のコンポーネントの種類は公開されていません。したがって、この Lab は学習しやすい Activity → Activity モデルを使用しています。コード実行に至る実際のチェーンも公開されていないため、コード実行は再現しません。
Victim Game Launcher
│
│ lab.cve202331014.action.START_STREAM
│ implicit Intent + 가상 session extras
▼
Android Intent Resolver
├── Victim Normal Streamer
└── Attacker HijackActivity
安全な経路では、同じ Intent に次の制限を適用します。
intent.setClass(this, StreamerActivity.class);
startActivity(intent);
要件:
./gradlew :victim:assembleDebug :attacker:assembleDebug
生成される APK:
victim/build/outputs/apk/debug/victim-debug.apk
attacker/build/outputs/apk/debug/attacker-debug.apk
検証済みのプリビルド APK も dist/ に含まれています。
dist/cve-2023-31014-victim-debug.apk
dist/cve-2023-31014-attacker-debug.apk
エミュレータまたは許可を受けたテストデバイスでのみ実行してください。
adb install -r attacker/build/outputs/apk/debug/attacker-debug.apk
adb install -r victim/build/outputs/apk/debug/victim-debug.apk
CVE Lab Attacker を一度開いて、攻撃アプリの役割を確認します。CVE Lab Victim を開きます。Normal Streamer と CVE Lab Attacker の 2 つ表示されることを確認します。CVE Lab Attacker を選択します。Normal Streamer が実行されることを確認します。アプリ選択画面で「常に使用するアプリ」を指定した場合は、そのアプリのシステム設定で 既定値の消去 を実行してから、再度演習してください。
脆弱:
Intent intent = new Intent(ACTION_START_STREAM);
intent.putExtra(EXTRA_STREAM_CONFIG, demoConfig);
startActivity(intent); // package/component 없음
修正:
Intent intent = new Intent(ACTION_START_STREAM);
intent.putExtra(EXTRA_STREAM_CONFIG, demoConfig);
intent.setClass(this, StreamerActivity.class);
startActivity(intent);
同じメーカーのパッケージ内の複数のコンポーネントのいずれかを Android が選択する必要がある設計であれば、setPackage() も外部アプリのブロックに使用できます。単一の宛先であれば、explicit component の方が明確です。
以下の値は公開されていないため、意図的に作成しました。
lab.cve202331014.action.START_STREAM Actiondemo_* Extra の名前と値203.0.113.10 ドキュメント用 IP アドレスしたがって、このプロジェクトは CVE の脆弱性の原理と修正方法を再現しますが、実際の GeForce NOW 攻撃 PoC ではありません。