
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++에서 **참(true)**으로 평가되므로 authorized = true가 됩니다.
// daemon/auth.cpp의 취약한 코드 패턴
if (EVP_PKEY_cmp(peer_key, stored_key)) { // ← 버그: -1은 참(true)!
authorized = true;
}
pip install cryptography
# 대화형 셸
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 (기기 정보) ────────────│
│──── OPEN "shell:" ───────────────►│
│◄─── OKAY ────────────────────────│
│◄──► WRTE/OKAY (셸 I/O) ─────────►│
│ │
[전체 셸 액세스] │
| 요구 사항 | 세부 사항 |
|---|---|
| 개발자 옵션 |
⚠️ 중요: 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 # 메인 익스플로잇 스크립트
└── README.md # 이 파일
이 도구는 승인된 보안 테스트 및 교육 목적으로만 제공됩니다. 컴퓨터 시스템에 대한 무단 액세스는 불법입니다. 테스트 전에 항상 적절한 승인을 받으십시오. 저자는 이 소프트웨어의 오용에 대해 어떠한 책임도 지지 않습니다.
이 도구가 연구에 도움이 되었다면 ⭐을 눌러주세요
EVP_PKEY_cmp() 반환값 | 의미 | C에서 참? | 결과 |
|---|
1 | 키 일치 | ✅ | 승인됨 (정상) |
0 | 키 불일치 | ❌ | 거부됨 (정상) |
-1 | 타입 불일치 | ✅ | 승인됨 (버그) |
| 대상 기기에서 활성화 |
| 무선 디버깅 | 활성화 (또는 포트 5555에서 TCP를 통한 ADB) |
| 저장된 RSA 키 | 기기가 USB 페어링을 최소 1회 수행해야 함 (/data/misc/adb/adb_keys) |
| 네트워크 액세스 | 공격자가 adbd TCP 포트에 도달 가능해야 함 |