
CVE-2026-42945(NGINX Rift)에 대한 행동 기반 탐지 스크립트 — ngx_http_rewrite_module의 힙 오버플로우. RCE 없음, 크래시 기반 탐지만 지원.
CVE-2026-42945 (NGINX Rift)에 대한 동작 탐지 스크립트 — nginx에 2008년부터 존재한 ngx_http_rewrite_module의 힙 버퍼 오버플로우입니다.
이 도구는 오직 허가된 보안 테스트 및 연구를 위한 것입니다. 소유하고 있거나 명시적 서면 허가를 받은 시스템에 대해서만 실행하십시오. 무단 사용은 해당 관할권의 컴퓨터 범죄 관련 법률을 위반할 수 있습니다. 저자는 이 도구로 인한 오용이나 손해에 대해 책임을 지지 않습니다.
CVE-2026-42945는 nginx의 rewrite 스크립트 엔진(ngx_http_rewrite_module)에서 발생하는 힙 버퍼 오버플로우로, 버전 0.6.27(2008)에서 도입되어 약 18년간 존재했습니다.
이 버그는 rewrite 엔진의 두 패스 간 불일치에서 발생합니다:
is_args = 0을 확인 → 작은 버퍼를 할당is_args = 1을 확인 → ngx_escape_uri를 호출하여 이스케이프 가능한 각 바이트(+ 등)를 3배 크기로 확장 → 힙 버퍼 오버플로우 발생이를 통해 인증 없는 원격 코드 실행이 가능합니다.
영향받는 버전:
| 제품 | 취약한 버전 | 패치된 버전 |
|---|---|---|
| NGINX 오픈소스 | 0.6.27 – 1.30.0 | 1.30.1, 1.31.0+ |
| NGINX Plus | R32 – R36 | R36 P4, R35 P2, R32 P6 |
참고 자료:
이 스크립트는 RCE를 시도하지 않습니다. 원시 소켓을 사용하여 PoC의 흐름을 모방합니다:
GET /api/<349×A><969×+>를 부분적인 HTTP 요청으로 전송탐지는 워커 프로세스의 충돌에 의존합니다. nginx 마스터 프로세스는 즉시 이를 다시 생성하지만, 짧은 중단이 발생합니다. 프로덕션 시스템에서는 주의해서 사용하십시오.
# Single target (HTTP)
python3 detect-CVE-2026-42945.py --host 127.0.0.1 --port 80
# Single target (HTTPS)
python3 detect-CVE-2026-42945.py --host example.com --port 443 --tls
# List of targets
python3 detect-CVE-2026-42945.py -l targets.txt
# With threading and output file
python3 detect-CVE-2026-42945.py -l targets.txt --threads 10 -o vulnerable.txt
# More attempts for unreliable targets
python3 detect-CVE-2026-42945.py --host 10.0.0.1 --port 8080 --tries 5
targets.txt 형식 — 줄당 하나씩:
http://example.com
https://example.com:8443
192.168.1.1
192.168.1.1:8080
옵션:
--host 단일 대상 호스트
--port 포트(기본값: 80, --tls 사용 시 443)
--tls 단일 대상에 TLS/HTTPS 사용
-l, --list 대상 목록이 포함된 파일
--tries 대상당 탐지 시도 횟수(기본값: 3)
--threads 목록 스캔을 위한 동시 스레드 수(기본값: 5)
-o, --output 취약한 대상을 CSV 파일로 저장
[*] CVE-2026-42945 NGINX Rift Detection | targets=2 threads=5 tries=3
[*] http://192.168.1.1:80 - nginx/1.28.0
[*] http://192.168.1.2:8080 - nginx/1.31.0
[!!!] VULNERABLE | http://192.168.1.1:80 | nginx/1.28.0 | worker crash (trigger connection closed — worker respawned)
[+] http://192.168.1.2:8080 - not vulnerable (or timing miss, try --tries 5)
==================================================
[*] Scan complete. 2 targets scanned.
[!!!] 1 VULNERABLE target(s):
http://192.168.1.1:80 (nginx/1.28.0)
==================================================
원본 저장소에는 Docker 랩 환경이 포함되어 있습니다:
git clone https://github.com/DepthFirstDisclosures/Nginx-Rift
cd Nginx-Rift
chmod +x setup.sh && ./setup.sh
docker compose -f env/docker-compose.yml up -d
python3 detect-CVE-2026-42945.py --host 127.0.0.1 --port 19321
MIT — LICENSE 참조
원본 취약점 연구 및 PoC: DepthFirstDisclosures