MartinPSDev/CVE-2026-0073-Android-ADBD-bypass-POC
GitHub: MartinPSDev/CVE-2026-0073-Android-ADBD-bypass-POC
利用Android adbd中EVP_PKEY_cmp的类型混淆缺陷,通过EC/Ed25519密钥与存储的RSA密钥不匹配实现TLS认证绕过,获取未授权ADB shell的PoC漏洞利用工具。
Stars: 10 | Forks: 3
# 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)
[](LICENSE)
## 🔥 概述
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`。
```
// Vulnerable code pattern in daemon/auth.cpp
if (EVP_PKEY_cmp(peer_key, stored_key)) { // ← BUG: -1 is truthy!
authorized = true;
}
```
| `EVP_PKEY_cmp()` 返回值 | 含义 | 在 C 中为真值? | 结果 |
|:-:|---|:-:|---|
| `1` | 密钥匹配 | ✅ | 已授权(正确) |
| `0` | 密钥不同 | ❌ | 已拒绝(正确) |
| **`-1`** | **类型不匹配** | **✅** | **已授权(BUG)** |
## ⚡ 快速开始
### 安装依赖
```
pip install cryptography
```
### 运行漏洞利用
```
# Interactive shell
python adb_tls_auth_bypass.py
# 执行单个命令
python adb_tls_auth_bypass.py 192.168.1.42 37521 --cmd "id"
# Verbose 模式 (查看完整的协议跟踪)
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
```
## 🎯 漏洞利用流程
```
Attacker Target (adbd)
│ │
│──── TCP connect ──────────────────►│
│──── CNXN (cleartext) ────────────►│
│◄─── STLS (TLS upgrade request) ──│
│──── STLS reply ──────────────────►│
│ │
│════ TLS 1.3 Handshake ════════════│
│ (EC P-256 client cert presented) │
│ EVP_PKEY_cmp(EC, RSA) → -1 │
│ -1 is truthy → authorized=true │
│════════════════════════════════════│
│ │
│◄─── CNXN (device info) ──────────│
│──── OPEN "shell:" ───────────────►│
│◄─── OKAY ────────────────────────│
│◄──► WRTE/OKAY (shell I/O) ──────►│
│ │
[FULL SHELL ACCESS] │
```
## 📋 前置条件
| 要求 | 详情 |
|---|---|
| **开发者选项** | 在目标设备上已启用 |
| **无线调试** | 已启用(或在端口 5555 上通过 TCP 进行 ADB) |
| **已存储的 RSA 密钥** | 设备必须至少进行过一次 USB 配对 (`/data/misc/adb/adb_keys`) |
| **网络访问权限** | 攻击者必须能够访问 adbd TCP 端口 |
## 🛡️ 受影响版本
- **Android 14** (AOSP) — ✅ 已确认存在漏洞
- **Android 15** (AOSP) — 可能存在漏洞(未打补丁的版本)
- 特定供应商的版本可能有所不同(Samsung One UI、Pixel 等)
### 如何检查补丁级别
```
adb shell getprop ro.build.version.security_patch
```
## 🧪 测试环境
已测试并确认可运行于:
```
Kernel: 6.1.23-android14-4-00257-g7e35917775b8-ab9964412
Platform: Android 14 (Android Studio Emulator)
```
## 🔧 相比原版的改进
此 fork 包含多项增强功能:
- ✅ **多密钥回退** — 自动尝试 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 # Main exploit script
└── README.md # This file
```
## ⚠️ 免责声明
本工具仅供**授权的安全测试和教育目的**使用。未经授权访问计算机系统是违法行为。在测试前请务必获取适当的授权。作者不对本软件的滥用承担任何责任。
## 📚 参考资料
- [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)
**如果这对你有所帮助,请点个 ⭐**
标签:0day, ADB, adbd, Android, C/C++, CISA项目, cryptography库, CSV导出, CVE-2026-0073, DSL, EC P-256, Ed25519, EVP_PKEY_cmp, Exploit, PE 加载器, PoC, Python, RSA密钥不匹配, TLS认证绕过, WiFi ADB, 事务性I/O, 安全测试工具, 提权, 无后门, 暴力破解, 未授权访问, 目录枚举, 移动安全, 类型混淆, 编程工具, 网络安全, 远程代码执行, 逆向工具, 隐私保护