ctnBobong32/CVE-2026-0073-Android-ADBD-bypass-POC_zh_CN
GitHub: ctnBobong32/CVE-2026-0073-Android-ADBD-bypass-POC_zh_CN
Android ADBD TLS 身份验证绕过漏洞(CVE-2026-0073)的 PoC 利用工具汉化增强版,利用 EVP_PKEY_cmp 类型混淆实现未授权 shell 访问。
Stars: 0 | Forks: 0
# CVE-2026-0073 — Android ADBD TLS 身份验证绕过
### `EVP_PKEY_cmp()` 类型混淆 → 未经授权的 ADB shell
[](https://python.org)
[](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-0073)
[](https://android.com)
[](许可证)
## 🔥 概述
Android 的 ADB 守护程序 (`adbd`) 中存在一个**关键的身份验证绕过**漏洞,允许本地网络上的任何攻击者在目标设备上获得**完整的 shell**权限,**而无需用户授权**。
该漏洞存在于 `daemon/auth.cpp` 文件中的 `adbd_tls_verify_cert()` 函数中,其中 `EVP_PKEY_cmp()` 被用作布尔值。当存储的密钥是 **RSA** 密钥,而提供的 TLS 客户端证书携带的是 **非 RSA 密钥**(EC P-256 或 Ed25519)时,`EVP_PKEY_cmp()` 返回 **-1**(类型不匹配),这在 **C/C++ 中为真**,因此 `authorized = true`。
// daemon/auth.cpp 中的易受攻击代码模式
if (EVP_PKEY_cmp(peer_key, stored_key)) { // ← BUG: -1 是真值!
已授权 = true;
}
| `EVP_PKEY_cmp()` 返回值 | 含义 | C 语言中的真值? | 结果 |
|:-:|---|:-:|---|
| `1` | 密钥匹配 | ✅ | 已授权(正确) |
| `0` | 键值不同 | ❌ | 已拒绝(正确) |
| **`-1`** | **类型不匹配** | **✅** | **已授权(BUG)** |
## ⚡ 快速入门
### 安装依赖项
pip install cryptography
### 运行漏洞利用程序
# 交互式 shell
python adb_tls_auth_bypass.py
# 单命令执行
python adb_tls_auth_bypass.py 192.168.1.42 37521 --cmd "id"
# 详细模式(查看完整协议跟踪)
python adb_tls_auth_bypass.py 192.168.1.42 37521 -v --cmd "id"
### 强制使用特定类型的按键
python adb_tls_auth_bypass.py 192.168.1.42 5555 --key-type ec
python adb_tls_auth_bypass.py 192.168.1.42 5555 --key-type ed25519
## 🎯 漏洞利用流程
攻击者目标(adbd)
│ │
│──── TCP 连接 ──────────────────►│
│──── CNXN(明文)────────────►│
│◄─── STLS(TLS 升级请求)──│
│──── STLS 回复 ──────────────────►│
│ │
│════ TLS 1.3 握手 ════════════│
│(已提交 EC P-256 客户证书)│
│ EVP_PKEY_cmp(EC, RSA) → -1 │
│ -1 为真 → authorized=true │
│════════════════════════════════════│
│ │
│◄─── CNXN(设备信息)──────────│
│──── 打开“shell:” ───────────────►│
│◄─── 好的 ────────────────────────│
│◄──► WRTE/OKAY(shell I/O)──────►│
│ │
【完全 shell 访问权限】
## 📋 先决条件
| 要求 | 详情 |
|---|---|
| **开发者选项** | 已在目标设备上启用 |
| **无线调试** | 已启用(或通过 TCP 端口 5555 使用 ADB) |
| **已存储的 RSA 密钥** | 设备必须至少通过 USB 配对过一次(`/data/misc/adb/adb_keys`) |
| **网络访问** | 攻击者必须访问 adbd TCP 端口 |
⚠️ **重要提示:** RSA 密钥必须位于 `/data/misc/adb/adb_keys` 文件中,该文件通过 **USB 调试配对**(接受“允许 USB 调试?”对话框)填充。无线调试配对(`adb pair`)将密钥存储在 **不同的位置**(`adb_known_hosts.pb`)中,因此不符合此要求。
## 🛡️ 受影响版本
- **Android 14** (AOSP) — ✅ 已确认存在漏洞
- **Android 15** (AOSP) — 可能存在漏洞(未打补丁的版本)
- 不同厂商的版本可能有所不同(例如三星 One UI、Pixel 等)。
### 如何检查补丁级别
adb shell getprop ro.build.version.security_patch
## 🧪 测试环境
经测试确认可在以下设备上正常运行:
内核:6.1.23-android14-4-00257-g7e35917775b8-ab9964412
平台:Android 14(Android Studio 模拟器)
## 🔧 比原版有所改进
此分支包含以下几项改进:
- ✅ **多密钥回退** — 自动尝试 EC P-256 → Ed25519 → EC/TLS 1.2
- ✅ **Ed25519 支持** — 提供更广泛的兼容性的替代密钥类型
- ✅ **TLS 1.2 回退** — 不同的客户端证书流程(握手期间发送与握手后发送)
- ✅ **增强型证书** — 正确的 X.509 扩展(BasicConstraints、KeyUsage)
- ✅ **兼容 Windows** — 使用线程 I/O 而非 `select()` 以实现跨平台支持
- ✅ **增加超时时间** — 在速度较慢的网络上提供更高的可靠性
- ✅ **详细诊断信息** — 使用 `-v` 标志显示详细的协议跟踪信息
## 📁 项目结构
CVE-2026-0073-Android-ADBD-bypass-POC/
├── adb_tls_auth_bypass.py # 主漏洞利用脚本
└── README.md # 此文件
## ⚠️免责声明
本工具仅供**经授权的安全测试和教育用途**。未经授权访问计算机系统属于违法行为。测试前务必获得适当授权。作者对本软件的误用不承担任何责任。
## 📚 参考资料
- [CVE-2026-0073 — MITRE](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-0073)
- [Android 安全公告](https://source.android.com/docs/security/bulletin)
- [OpenSSL `EVP_PKEY_cmp` 文档](https://www.openssl.org/docs/man3.0/man3/EVP_PKEY_cmp.html)
- [ADB 协议参考](https://android.googlesource.com/platform/packages/modules/adb/+/refs/heads/main/protocol.txt)
**如果这对您的研究有所帮助,请点个赞⭐**
标签:Android, DSL, POC, Python, 安全测试工具, 无后门, 网络安全, 身份验证绕过, 逆向工具, 隐私保护