새로운 Nginx 취약점
source https://github.com/DepthFirstDisclosures/Nginx-Rift
NGINX Rift
CVE-2026-42945용 RCE PoC.
2008년에 도입된 NGINX
ngx_http_rewrite_module의 치명적 heap buffer overflow.rewrite와set지시어를 쓰는 서버에서 인증 없이 원격 코드 실행 가능.
이 취약점과 다른 메모리 손상 3건(CVE-2026-42946, CVE-2026-40701, CVE-2026-42934)은 depthfirst 보안 분석 시스템이 NGINX 소스를 한 번 온보딩한 뒤 자동으로 발견.
내 코드에서도 이런 취약점을 찾고 싶다면 같은 시스템 사용: https://depthfirst.com/open-defense
버그 요약
NGINX 스크립트 엔진은 2단계로 동작.
먼저 필요한 버퍼 크기 계산.
다음에 데이터 복사.
rewrite치환 문자열에?가 들어가면 메인 엔진에서is_args플래그를 세움.문제는 길이 계산 단계가 새로 0으로 초기화된 서브 엔진에서 돈다는 점.
길이 계산 단계는
is_args = 0으로 보고 캡처 길이만 그대로 반환.복사 단계는
is_args = 1로 보고NGX_ESCAPE_ARGS와 함께ngx_escape_uri를 호출.이스케이프 대상 바이트마다 길이가 3바이트로 불어남.
결국 복사 단계에서 크기가 모자란 heap 버퍼에 공격자가 제어한 URI 데이터를 써 넣으면서 overflow 발생.
익스플로잇은 요청 간 heap feng shui로 인접한
ngx_pool_t의cleanup포인터를 오염시키는 방식.URI 바이트에는 null byte를 넣을 수 없어서 POST 본문으로 spray 수행.
변조된 포인터를 가짜
ngx_pool_cleanup_s를 가리키게 만든 뒤, pool이 파기될 때system()호출 유도.
자세한 분석: https://depthfirst.com/research/nginx-rift-achieving-nginx-rce-via-an-18-year-old-vulnerability
영향 버전과 수정 버전
제품 | 영향 버전 | 수정 버전 |
|---|---|---|
NGINX Open Source | 0.6.27 -- 1.30.0 | 1.31.0, 1.30.1 |
NGINX Plus | R32 -- R36 | R36 P4, R35 P2, R32 P6 |
사용법
Ubuntu 24.04.3 LTS에서 테스트.
./setup.sh컨테이너 빌드.
docker compose -f env/docker-compose.yml up취약한 NGINX 서버 기동.
python3 poc.py --shell셸 획득.
