
CVE-2026-42945는 "NGINX Rift"로 알려진 NGINX 서버의 심각한 힙 버퍼 오버플로 취약점입니다. 이 취약점은 NGINX의 rewrite 및 set 지시문 처리 로직에 존재하며, 특정 구성 조건이 충족되면 공격자는 악의적인 요청을 구성하여 힙 오버플로를 유발하고 서비스 거부(DoS) 또는 잠재적인 원격 코드 실행(RCE)까지 초래할 수 있습니다.
취약점 유형: 힙 버퍼 오버플로 위험 등급: 고위험 CVE ID: CVE-2026-42945
다음 버전 중 하나로 즉시 업그레이드할 것을 권장합니다:
취약점 트리거에는 다음 두 가지 조건이 동시에 충족되어야 합니다:
구성 조건: NGINX 구성에서 다음을 동시에 사용:
rewrite 지시문(교체 문자열에 ? 문자 포함)set 지시문(rewrite의 정규식 캡처 그룹(예: $1, $2) 참조)요청 조건: 요청 URI에 이스케이프 가능한 문자(예: +, &, % 등) 포함
원리 설명:
rewrite 지시문은 e->is_args = 1을 설정합니다(절대 재설정되지 않음)set 지시문의 길이 계산 단계에서 전부 0인 하위 엔진(le.is_args = 0) 사용%25를 %로 디코딩하지만 ngx_escape_uri는 %25(3바이트)로 다시 인코딩합니다%25 문자가 1바이트에서 3바이트로 확장되어 버퍼 경계를 벗어난 쓰기가 발생합니다# 使用项目中的测试脚本
python3 CVE-2026-42945/CVE-2026-42945-test.py --host cve.test.com --port 80
%25 문자를 포함한 요청을 전송하여 소규모 테스트 수행%25 문자(예: 2000개)를 전송하여 버퍼 오버플로 트리거단일 계층 NGINX 구성에서 테스트 결과 취약점이 트리거됩니다:
크래시 로그 분석:
ngx_http_script_flush_no_cacheable_variables 함수에서 발생ngx_http_core_rewrite_phase이중 계층 NGINX(layer1 전달 + layer2 비즈니스) 구성에서 테스트 결과는 다음과 같습니다:
본 프로젝트는 보안 연구 및 교육 목적으로만 사용됩니다. 사용자는 해당 국가 및 지역의 법률과 규정을 준수해야 합니다. 저자는 승인되지 않은 어떠한 오용 행위에도 책임을 지지 않습니다.
불법 공격에 사용하는 것을 금지합니다!
Last Updated: 2026-05-19
| 구성 시나리오 | layer1 결과 | layer2 결과 | 원인 분석 |
|---|
rewrite break 없음 + proxy_pass | ❌ 취약점 트리거(404) | ❌ 요청 도달 없음 | rewrite 후 set 계속 실행되어 힙 오버플로 트리거, worker 크래시 |
rewrite break 있음 + proxy_pass | ✅ 정상(200) | ⚠️ 취약점 트리거 가능 | break가 set 실행을 종료, 요청이 정상적으로 백엔드로 전달 |
| 파일 | 설명 |
|---|
CVE-2026-42945/CVE-2026-42945-test.py | 취약점 테스트 PoC 스크립트, 대상에 취약점이 존재하는지 검증하는 데 사용 |
single_layer_test/single_layer_nginx.conf | 단일 계층 아키텍처에서 취약한 NGINX 구성 예시 |
single_layer_test/image.png | 취약점 원리 모식도 |
single_layer_test/test.log | 테스트 로그 파일 |
double_layer_test/layer1_nginx.conf | 이중 계층 아키텍처 1계층(전달 계층) NGINX 구성 |
double_layer_test/layer2_nginx.conf | 이중 계층 아키텍처 2계층(비즈니스 계층) NGINX 구성 |