
Nginx Rewrite CVE 스캔(CVE-2026-42945 nginx-rift CVE-2026-9256)
언어: 한국어 | English
이는 NGINX 구성에 CVE-2026-42945(NGINX Rift) 및 CVE-2026-9256 위험 패턴이 존재하는지 확인하는 경량 스크립트입니다.
이 취약점은 depthfirst가 NGINX Rift: Achieving NGINX RCE via an 18-Year-Old Vulnerability 문서에서 공개했습니다. 기사와 F5/NVD 설명에 따르면 위험은 ngx_http_rewrite_module의 특정 구성 조합과 관련됩니다: 동일한 구성 컨텍스트에서 rewrite의 대체 문자열에 ?가 포함되고, 이후 rewrite, if 또는 set이 익명 PCRE 캡처 변수(예: $1, $2)를 참조하는 경우입니다.
이 도구는 주로 NGINX 구성 파일에 다음과 같은 고위험 패턴이 존재하는지 확인합니다.
다음과 같은 고위험 시퀀스:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_endpoint $1;
}
위험 포인트는 개별 rewrite 또는 set이 아니라 동일한 컨텍스트에서의 실행 순서입니다:
rewrite가 정규 표현식 캡처를 사용하고 대체 문자열에 ?가 포함됨rewrite, if 또는 set이 $1, $2 등과 같은 익명 캡처 변수를 사용함이러한 조합은 NGINX 스크립트 엔진의 길이 계산과 실제 복사 단계의 상태 불일치를 유발하여 힙 버퍼 오버플로우를 초래할 수 있습니다.
다음과 같은 고위험 rewrite:
location / {
rewrite /wengine-auth-static/((.*)) /?$1$2 break;
}
위험 조건:
^/((.*))$에서 $1이 $2를 포함$1$2참고: break는 위험을 배제하지 않습니다. 여러 중첩 캡처 그룹이 ? 뒤의 매개변수 부분에 나타나면 여전히 arguments 컨텍스트에 속합니다. 일반적인 URI rewrite(예: /$1$2 break)는 이 CVE의 트리거 조건이 아닙니다.
스크립트가 이 패턴을 감지하면 명확하게 CVE-2026-9256으로 표시합니다.
depthfirst 문서에 나열된 영향을 받는 범위는 다음과 같습니다:
실제 수정 버전 및 제품 매트릭스는 F5 공식 공지 또는 배포판 보안 공지를 참조하십시오. 버전이 영향을 받는 범위 내에 있더라도 일반적으로 특정 rewrite 구성 시퀀스가 존재해야 취약점이 트리거됩니다.
스크립트는 현재 NGINX 버전과 구성 스캔 결과를 함께 출력합니다:
0.6.27 - 1.30.1 범위에 있고 구성이 위험 시퀀스에 적중: NGINX 업그레이드 또는 구성 조정 필요.0.6.27 - 1.30.1 범위에 있지만 구성이 위험 시퀀스에 적중하지 않음: 업그레이드 권장, 하지만 이 도구가 구성 트리거 조건을 발견하지 못함.현재 시스템의 전체 NGINX 구성을 직접 스캔:
python3 scan_rift.py
스크립트가 실행:
nginx -T
현재 사용자가 전체 구성을 읽을 권한이 없으면 sudo를 사용하십시오:
sudo python3 scan_rift.py
이미 내보낸 구성 파일을 스캔할 수도 있습니다:
python3 scan_rift.py /path/to/nginx-full.conf
예를 들어 구성을 먼저 내보낸 후 스캔:
sudo nginx -T > nginx-full.conf
python3 scan_rift.py nginx-full.conf
위험 시퀀스가 발견되지 않은 경우:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[+] No vulnerable CVE-2026-42945 sequences or CVE-2026-9256 patterns detected.
[Recommendation]: Current NGINX version is in the affected range, but no vulnerable config pattern was detected. Upgrade is recommended, but config risk was not found by this scanner.
의심스러운 시퀀스가 발견된 경우:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[!] VULNERABLE SEQUENCE FOUND (CVE-2026-42945):
Context: location ~ ^/api/(.*)$ {
[1. Rewrite With ?] rewrite ^/api/(.*)$ /internal?migrated=true;
[2. Follow-up $N] set $original_endpoint $1;
[Action Required]: Current NGINX version is affected and vulnerable config was found. Upgrade NGINX or adjust the reported rewrite pattern.
CVE-2026-9256 의심 패턴이 발견된 경우:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[!] VULNERABLE PATTERN FOUND (CVE-2026-9256):
Context: location ^~ /wengine-auth-static/ {
[Rewrite Overlapping Captures] rewrite /wengine-auth-static/((.*)) /?$1$2 break;
[Context] arguments; overlapping refs: $1/$2
[Action Required]: Current NGINX version is affected and vulnerable config was found. Upgrade NGINX or adjust the reported rewrite pattern.
적중이 발견되면 해당 구성 컨텍스트가 외부 요청에 의해 도달 가능한지 수동으로 확인하고 가능한 한 빨리 NGINX를 업그레이드하거나 구성을 조정해야 합니다.
location, server, if 등의 컨텍스트에서 rewrite / set 조합을 확인하십시오.?가 포함된 rewrite 이후에 $1, $2 등과 같은 익명 캡처 변수를 계속 사용하지 마십시오.^/((.*))$와 ?$1$2 조합).break를 CVE-2026-9256의 회피 방법으로 간주하지 마십시오. /?$1$2 break는 여전히 적중됩니다.이 스크립트는 구성 정적 스캔 도구로, 빠르게 고위험 패턴을 찾는 것을 목표로 하며 취약점 악용 검증과 동일하지 않습니다.