
CVE-2026-42945 NGINX 힙 오버플로 취약점 스캔 및 검증 도구
NGINX Rift는 CVE-2026-42945 및 CVE-2026-9256 (NGINX ngx_http_rewrite_module 힙 오버플로우 취약점)을 대상으로 하는 오픈소스 스캔 및 검증 도구입니다. 원격 네트워크 핑거프린팅 스캔과 로컬 심층 구성 감사를 지원하여 보안 팀이 NGINX 환경의 잠재적 위험을 신속하게 식별할 수 있도록 돕습니다.
| 속성 | 세부 정보 |
|---|
| CVE 번호 | CVE-2026-9256 |
| 취약점 유형 | 힙 기반 버퍼 오버플로우 (Heap-based Buffer Overflow, CWE-122) |
| 영향을 받는 구성 요소 | NGINX ngx_http_rewrite_module |
| 영향을 받는 버전 | NGINX 오픈소스 0.1.17 ~ 1.31.0 (mainline) / 0.1.17 ~ 1.30.1 (stable) |
| 수정 버전 | NGINX 1.31.1 (mainline) / 1.30.2 (stable), 2026-05-22 출시 |
| 위험 등급 | 높음 — 서비스 거부(DoS) 유발 가능, ASLR 비활성화 시 원격 코드 실행(RCE) 가능 |
트리거 조건: rewrite 지시문이 PCRE 정규식을 사용하고 중복 캡처가 있으며, 대체 문자열에서 여러 개의 이름 없는 캡처 그룹을 참조하는 경우.
| 속성 | 세부 정보 |
|---|---|
| CVE 번호 | CVE-2026-42945 |
| 취약점 유형 | 힙 오버플로우 (Heap Overflow) |
| 영향을 받는 구성 요소 | NGINX ngx_http_rewrite_module |
| 영향을 받는 버전 | NGINX 오픈소스 0.6.27 ~ 1.30.0 / NGINX Plus R32 ~ R36 |
| 수정 버전 | NGINX 1.30.1 (stable) / 1.31.0 (mainline) / NGINX Plus R32 P6+ |
| 위험 등급 | 높음 — 서비스 거부(DoS) 및 원격 코드 실행(RCE) 가능 |
트리거 조건: rewrite 지시문의 대체 URL에 ?와 이름 없는 캡처 그룹 참조(예: $1)가 동시에 포함된 경우.
# CVE-2026-42945 트리거 구성: ? + $1
rewrite ^/api/(.*)$ /internal?id=$1 last;
# CVE-2026-9256 트리거 구성: 여러 $N 캡처 참조
rewrite ^/(\w+)/(\d+)$ /$2/$1 last;
# 안전한 구성 (이름 있는 캡처 그룹 사용)
rewrite ^/api/(?<myid>.*)$ /internal?id=$myid last;
dpkg/rpm 패키지 관리자와 연동하여 배포판이 백포트를 통해 취약점을 수정했는지 확인rewrite-target 어노테이션 자동 발견Releases 페이지에서 해당 플랫폼의 바이너리를 다운로드합니다.
git clone https://github.com/nu0l/NGINX-Rift.git
cd NGINX-Rift
# 단일 플랫폼 컴파일
go build -o nginx_rift_scanner nginx_rift_scanner.go
# 전체 플랫폼 크로스 컴파일
chmod +x build.sh && ./build.sh
./nginx_rift_scanner -h
# 단일 대상 스캔
./nginx_rift_scanner scan -u http://example.com
# 일괄 스캔 (파일에서 URL 목록 읽기)
./nginx_rift_scanner scan -f url.txt
url.txt는 한 줄에 하나의 URL을 포함합니다. 예:
http://target1.com
https://target2.com
target3.com
# 기본 NGINX 구성 경로 자동 검색
./nginx_rift_scanner verify
# 구성 파일 경로 지정
./nginx_rift_scanner verify -p /etc/nginx/nginx.conf
Verify 모드는 3단계 감사를 수행합니다:
nginx -v 실행하여 버전 확인, OS 패키지 관리자의 백포트 패치 확인include 지시문 포함)을 재귀적으로 파싱하여 위험한 rewrite 규칙 식별kubectl이 감지되면 클러스터의 모든 Ingress 리소스를 자동 스캔| 우선순위 | 방안 | 설명 |
|---|---|---|
| P0 | NGINX 업그레이드 | 1.30.2+ (stable) / 1.31.1+ (mainline) / NGINX Plus 최신 보안 버전으로 업그레이드 |
| P0 | OS 패키지 관리자 업데이트 | apt-get upgrade nginx 또는 yum update nginx 실행 |
| P1 | 긴급 구성 완화 | rewrite의 $1, $2 등을 이름 있는 캡처 그룹 $name으로 변경, 중단 불필요 |
| P2 | K8s Ingress 수정 | Ingress Controller 업그레이드 및 rewrite-target 어노테이션 수정 |
| P3 | 심층 방어 | server_tokens off; 구성하여 버전 핑거프린트 숨기기 |
NGINX-Rift/
├── nginx_rift_scanner.go # 메인 프로그램 소스 코드
├── build.sh # 전체 플랫폼 크로스 컴파일 스크립트
├── go.mod # Go 모듈 정의
└── README.md
net/http를 사용하여 HTTP 요청을 보내고 Server 응답 헤더를 파싱nginx/X.Y.Z) 및 상용 버전(NGINX Plus RXX) 추출include 지시문 추적, visited 맵으로 순환 참조 방지? + $N (CVE-2026-42945) 및 여러 $N 참조 (CVE-2026-9256)kubectl get ingress --all-namespaces -o yaml을 통해 동적으로 K8s Ingress 구성 가져오기dpkg-query/rpm --changelog를 호출하여 OS 수준 백포트 패치 감지 (두 CVE 번호 모두 검색)CGO_ENABLED=0)로 C 의존성이 없는 독립 바이너리 생성MIT License
보안 커뮤니티의 기여로 만들어졌습니다.