
Weaponized proof-of-concept for CVE-2026-0073, an Android adbd authentication bypass enabling zero-click remote root access via Wireless ADB, with post-exploitation modules for profiling, extraction, and persistence.
무선 ADB TLS 인증 우회 취약점에 대한 무기화된 개념 증명(PoC). Barghest가 발견, devtint가 무기화 PoC 제작.
CVE-2026-0073은 Android Debug Bridge 데몬(adbd)의 치명적인 암호화 로직 오류로, 동일한 로컬 네트워크에 있는 인증되지 않은 공격자에게 제로클릭 원격 루트 액세스를 부여합니다.
이 저장소에는 다음이 포함되어 있습니다:
adb_tls_auth_bypass.py — STLS/TLS 인증 우회를 위한 깔끔한 독립형 PoC.main.py — 자동 프로파일링, 아티팩트 추출, 지속성 주입을 갖춘 최대화된 익스플로잇 프레임워크.이 취약점은 daemon/auth.cpp 내부의 adbd_tls_verify_cert() 함수에 존재합니다. 클라이언트가 무선 ADB(STLS 경로) 를 통해 연결하면 상호 TLS 1.3 핸드셰이크가 발생합니다. 기기는 OpenSSL의 EVP_PKEY_cmp()를 사용하여 클라이언트의 공개 키를 저장된 인증 키와 비교합니다.
// daemon/auth.cpp — 취약한 로직
if (EVP_PKEY_cmp(stored_key, client_key)) {
// EVP_PKEY_cmp 반환값:
// 1 = 키 일치
// 0 = 키 불일치
// -1 = 유형 불일치 (RSA vs EC) ← 버그: C++에서 truthy
authorized = true;
}
EVP_PKEY_cmp()는 -1(유형 불일치)을 반환합니다.-1은 true로 평가됩니다.adbd 로직은 이 -1을 완벽한 일치로 해석합니다.이 익스플로잇은 무선 디버깅 STLS 경로에서만 작동하며, 레거시 adb tcpip 경로에서는 작동하지 않습니다.
| 연결 모드 | 포트 | 프로토콜 | 취약 여부 |
|---|
192.168.1.34:38741)이는 레거시 ADB TCP 포트(일반적으로 5555)에 연결하고 있음을 의미합니다. 레거시 경로는 이전 RSA AUTH 핸드셰이크를 사용합니다 — 이는 adbd에서 완전히 다른 코드 경로이며 이 CVE의 영향을 받지 않습니다. 대신 무선 디버깅 포트에 연결해야 합니다.
프레임워크(main.py)는 핵심 TLS 우회를 모듈식 사후 익스플로잇 툴킷으로 확장합니다:
uid=0(root) 의사 터미널로 직접 진입합니다.--profile): 대상 OS, 보안 패치 수준, SELinux 적용 상태, 내부 네트워크 피벗을 위한 활성 라우팅 테이블을 즉시 식별합니다.--extract): 고도로 민감한 시스템 파일(예: /data/misc/adb/adb_keys, /system/build.prop)을 우회 소켓을 통해 자동으로 유출합니다.--persist): 대상의 인증 키 파일에 악성 RSA 공개 키를 주입합니다. 주입 후 공격자는 CVE가 나중에 패치되더라도 영구적이고 완전히 인증된 액세스를 유지합니다.의존성 설치:
pip install cryptography
대상 찾기: 로컬 서브넷에서 무선 디버깅이 활성화된 Android 기기를 찾습니다. 기기의 개발자 옵션 화면에서 동적 포트를 확인합니다.
익스플로잇 프레임워크 실행:
# 대화형 셸 (기본값)
python main.py <IP> <PORT>
# 단일 명령 실행
python main.py <IP> <PORT> --cmd "id"
# 자동 시스템 프로파일링
python main.py <IP> <PORT> --profile
# 은밀한 아티팩트 추출
python main.py <IP> <PORT> --extract
# 영구 백도어 키 주입
python main.py <IP> <PORT> --persist
독립형 PoC (최소):
python adb_tls_auth_bypass.py <IP> <PORT> --cmd "id; whoami"
이 저장소는 교육, 레드 팀 운영, 그리고 승인된 보안 테스트 목적으로만 엄격히 제공됩니다. 컴퓨터 시스템에 대한 무단 액세스는 불법입니다. 저자는 이 정보의 오용에 대해 어떠한 책임도 지지 않습니다.
adb tcpip 5555 (레거시) | 5555 (고정) | AUTH (RSA 챌린지) | ❌ 아니요 |
| 무선 디버깅 (Android 11+) | 무작위 (30000–50000) | STLS → TLS 1.3 | ✅ 예 |
| 오류 | 원인 | 해결 방법 |
|---|
Connection refused | 포트가 닫혀 있음 / 무선 디버깅이 꺼져 있음 | 무선 디버깅을 켜고 올바른 동적 포트 사용 |
AUTH instead of STLS | 레거시 ADB TCP(포트 5555)에 연결됨 | 5555가 아닌 무선 디버깅 포트 사용 |
SSLV3_ALERT_CERTIFICATE_UNKNOWN | 기기가 패치됨 (2026년 5월 이상) | 대상이 취약하지 않음 — 수정이 적용됨 |
timed out | 포트는 열려 있지만 올바르게 응답하지 않음 | 포트 확인, 기기에서 무선 디버깅 다시 시작 |