mobilehackinglab/CVE-2026-0047-poc

GitHub: mobilehackinglab/CVE-2026-0047-poc

针对Android 16 QPR2 Beta中ActivityManagerService权限检查缺失漏洞(CVE-2026-0047)的概念验证代码,演示如何通过原始Binder事务在零权限、零交互条件下窃取所有运行应用的UI位图。

Stars: 0 | Forks: 0

# CVE-2026-0047:ActivityManagerService 缺少权限检查 **从每个正在运行的应用中窃取位图堆——零权限,零用户交互。** `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 安全公告](https://source.android.com/docs/security/bulletin/2026/2026-03-01) | ## 仓库内容 ``` ├── 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) 模拟器: ``` # 下载 vulnerable 系统镜像 sdkmanager "system-images;android-Baklava;google_apis;arm64-v8a" # 创建 AVD avdmanager create avd -n baklava -k "system-images;android-Baklava;google_apis;arm64-v8a" # 启动 emulator emulator -avd baklava & # 验证 patch level 为 pre-fix adb shell getprop ro.build.version.security_patch # 2026-03-01 之前的任何版本均存在漏洞 ``` ## 快速开始 ### 选项 1:一次性脚本(推荐) ``` # 完整运行:设置 emulator、build、exploit、提取被盗 bitmaps ./exploit.sh --setup-emulator # 已经有正在运行的 Baklava emulator? ./exploit.sh # 跳过 build,仅运行 exploit ./exploit.sh --skip-build ``` ### 选项 2:预构建 APK ``` # 安装 PoC 应用 adb install apk/cve-2026-0047-poc.apk # 打开一些应用(Settings、email 等)以显示可见 UI adb shell am start -n com.android.settings/.Settings # 启动 PoC adb shell am start -n com.poc.cve20260047/.MainActivity # 点击 "Exploit dumpBitmapsProto()" 按钮 ``` ### 选项 3:攻击模拟(“Flashlight Pro”) ``` # 安装伪装的攻击者应用 — 声明 ZERO permissions adb install apk/flashlight-pro-attacker.apk # 启动它 — exfiltration 在启动时静默发生 adb shell am start -n com.poc.cve20260047.attacker/.MainActivity ``` ## 工作原理 1. **原始 Binder 探测** — `activity` 服务上的事务代码 `#117` 映射到 `dumpBitmapsProto()`。不带参数发送它会导致 AMS 内部抛出 `NullPointerException`(而不是 `SecurityException`),这证明方法体在没有任何权限检查的情况下就被执行了。 2. **原始 Binder 利用** — 我们使用 `IBinder.transact()` 将手工构造的 Parcel 直接发送给 AMS。这完全绕过了 Android 的隐藏 API 限制——无需设置 `hidden_api_policy`。该 Parcel 包含: - Interface token (`android.app.IActivityManager`) - Non-null 标记 + `ParcelFileDescriptor`(管道写入端) - 空字符串数组(所有进程) - `userId = -2` (`USER_CURRENT`) - `dumpAll = true` - `format = "png"` 3. **位图提取** — AMS 将包含 PNG 位图的 protobuf 数据写入管道。我们扫描 PNG 魔术字节 (`89 50 4E 47`) 和 IEND 结尾标记来提取单个图像。 ### 结果 在打开了“设置”、“时钟”和“文件”的 Baklava 模拟器(`BP41.250725.007`,补丁 `2025-08-05`)上: - **679,091 字节**的 protobuf 数据 - 从所有正在运行的应用中窃取了 **63 张有效的 PNG 图像** - PoC 应用声明了**零权限** ## 修复方式 Google 在 `dumpBitmapsProto()` 的第一行添加了 `enforceCallingOrSelfPermission(DUMP)`,因此非特权调用者现在在访问任何数据之前就会抛出 `SecurityException`。 ## 参考 - [Android 安全公告 — 2026 年 3 月](https://source.android.com/docs/security/bulletin/2026/2026-03-01) - [CVE-2026-0047 — NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-0047) - [CWE-280:权限不足的不当处理](https://cwe.mitre.org/data/definitions/280.html) - [博客文章:完整分析与利用演练](https://www.mobilehackingcourse.com/cve-2026-0047-activitymanager-eop/) ## 致谢 研究与 PoC 由 [Mobile Hacking Lab](https://www.mobilehackinglab.com) 完成。我们独立复现了此漏洞,仅用于教育目的。 ## 免责声明 此概念验证仅用于**教育和授权安全研究目的**。请仅在您拥有或获得明确授权进行测试的设备和环境中使用。作者不对任何滥用行为承担责任。
标签:ActivityManagerService, Android 16, Android漏洞, Cutter, CVE-2026-0047, CWE-280, JS文件枚举, PoC, QPR2 Beta, UI截图窃取, 云资产清单, 信息泄露, 后台面板检测, 域名枚举, 恶意软件伪装, 数据窃取, 暴力破解, 权限绕过, 目录枚举, 移动安全, 逆向工程, 零权限攻击