자동화&툴 리뷰

NGINX Rift — 18년간 숨겨졌던 치명적 취약점의 모든 것

노동1호 2026. 5. 17. 02:05

NGINX Rift — 18년간 숨겨졌던 치명적 취약점 (이미지: Picsum)

NGINX Rift — 18년간 숨겨졌던 치명적 취약점의 모든 것

2026년 5월, 전 세계 웹 서버 시장의 약 39~43%를 차지하는 NGINX에서 18년 만에 발견된 치명적 취약점이 공개됐다. 취약점명은 'NGINX Rift', 공식 CVE는 CVE-2026-42945이다. CVSS v4 점수 9.2의 초고위험 취약점이다. 인증 없는 공격자가 특수하게 조작된 HTTP 요청 한 건으로 원격 코드 실행(RCE)까지 가능한 경우가 있다.

이 취약점은 2008년부터 코드에 숨어 있었다. 발견자는 자율 취약점 분석 플랫폼 depthfirst이며, NGINX 소스 코드 온보딩 한 번으로 6시간 만에 자율 발견했다. 18년간 아무도 발견하지 못한 버그가 Automated Vulnerability Analysis 시스템의 도움으로 빠르게 현실화됐다.


취약점이 존재하는 이유 — 두 패스의 불일치

NGINX의 ngx_http_rewrite_module은 URL 리다이렉트와 변수 할당에 핵심적인 모듈이다. 이 모듈의 스크립트 엔진은 두 단계 패스로 동작한다.

첫 번째 패스에서는 리소스 크기를 계산하고 메모리를 할당한다. 두 번째 패스에서는 실제 데이터를 기록한다.

취약점은 바로 이 두 패스 간 계약이 깨지는 지점에서 발생한다.

rewrite 치환 문자열에 물음표(?)가 포함되어 있으면, ngx_http_script_start_args_code 함수가 내부 플래그 e->is_args = 1을 설정한다. 이후 set 지시어에서 정규식 캡처 그룹 $1, $2 등을 참조하면 길이 계산은 0으로 초기화된 서브 엔진 위에서 실행된다. 이때는 이스케이프가 적용되지 않은 원본 캡처 길이만 계산한다.

그러나 복사 단계에서는 메인 엔진의 is_args = 1 상태가 그대로 유지되면서 ngx_escape_uriNGX_ESCAPE_ARGS 모드로 호출된다. URI에 포함된 +, %, & 같은 문자가 각각 3바이트로 확장된다. 문제는 버퍼 크기는 첫 번째 패스의 작은 값 기준으로 할당됐기 때문에, 확장된 데이터가 힙 버퍼를 넘치게 된다.

공격자가 제어하는 URI 데이터가 버퍼를 덮어쓰므로, 이 오버플로는 랜덤한 메모리 손상이 아니라 공격자 제어 메모리 오염이다.


익스플로잇 동작 원리

공격은 요청 간 힙 풍수(heap feng shui) 기법을 사용한다. NGINX는 요청을 처리할 때 워커 프로세스를fork 하는데, 마스터에서fork된 워커 프로세스는 같은 메모리 레이아웃을 공유한다. 공격자는 다음 전략을 사용한다.

1. 스프레이 단계: URI 바이트에 null 바이트를 넣을 수 없으므로, POST 본문을 통해 힙을 조작한다.

2. 포인트 오염: 인접한 ngx_pool_t의 cleanup 포인터를 오염시킨다.

3. 코드 실행: 오염된 포인터를 가짜 ngx_pool_cleanup_s로 리다이렉트하고, 풀 파괴 시 system() 호출로 연결한다.

또 하나의 핵심 요소는 워커 크래시를 이용한 ASLR 우회다. 워커가 크래시되면 마스터가 동일한 힙 레이아웃을 가진 새 워커를spawn한다. 공격자는 이를 이용해 무제한으로 크래시를 일으키며 ASLR 우회를 시도할 수 있다.

depthfirst 연구진은 ASLR을 비활성화한 환경에서 인증 없는 RCE에 성공하는 PoC를 공개했다. 완전한 ASLR 우회 기법은 아직 이론적 단계이지만, 시간과 반복으로돌파 가능하다.


함께 발견된 3개의 취약점

depthfirst의 자율 스캔은 총 5개 발견사항을 보고했고, 그 중 4개가 NGINX에 의해 확인됐다.

CVE점수유형
CVE-2026-429459.2 (치명)힙 버퍼 오버플로
CVE-2026-429468.3 (높음)SCGI/uWSGI 과대 메모리 할당
CVE-2026-407016.3 (중간)SSL 모듈 Use-After-Free
CVE-2026-429346.3 (중간)Charset 모듈 OOB 읽기

CVE-2026-42946은 SCGI와 uWSGI 모듈의 상태 불일치로 약 1TB 키 길이가 발생해 워커가 크래시되는 문제다.


영향을 받는 버전과 수정 방법

영향을 받는 제품

제품취약 버전수정 버전
NGINX Open Source0.6.27 ~ 1.30.01.31.0 / 1.30.1
NGINX PlusR32 ~ R36R36 P4 / R35 P2 / R32 P6
NGINX Instance Manager2.16.0 ~ 2.21.1수정 브랜치로 이동
NGINX App Protect WAF4.9.0 ~ 5.8.0수정 브랜치로 이동
NGINX Gateway Fabric1.3.0 ~ 2.5.1수정 브랜치로 이동
NGINX Ingress Controller3.5.0 ~ 5.4.1수정 브랜치로 이동

F5 BIG-IP, BIG-IQ, Distributed Cloud, Silverline는 영향을 받지 않는다.

즉시 패치

가장 우선적인 조치는 패치 적용이다.

# NGINX Open Source — Ubuntu/Debiansudo apt update && sudo apt install nginx=1.31.0# 또는 소스 빌드wget https://nginx.org/download/nginx-1.31.0.tar.gz./configure && make && sudo make install# NGINX Plus — F5 계정에서 R36 P4 다운로드sudo systemctl restart nginx

패치 적용 후 반드시 워커 프로세스가 재시작되도록 해야 한다. 바이너리만 교체하고 재시작하지 않으면 패치가 적용되지 않는다.

즉각적 패치가 불가능할 경우 — 임시 완화책

패치 배포 시간이 필요한 경우, 이름 없는 캡처를 이름 있는 캡처로 변환하면 취약 코드가 실행되지 않는다.

# 취약한 설정 — 이름 없는 캡처 + ? 포함 치환rewrite ^/users/([0-9]+)/profile/(.)$ /profile.php?id=$1&tab=$2 last;# 수정된 설정 — 이름 있는 캡처는 취약 경로 우회rewrite ^/users/(?[0-9]+)/profile/(?
.)$ /profile.php?id=$user_id&tab=$section last;

핵심은 두 가지 조건이 동시에 만족되어야 노출된다.

• rewrite 치환 문자열에 ?가 포함된 경우

• 그다음 줄에 set 지시어로 $1 같은 이름 없는 캡처를 참조하는 경우

둘 중 하나라도 없으면 공격 표면이 형성되지 않는다. 그러나 복잡한 설정에서는 두 조건이 의외로 쉽게 충족되므로, 가장 확실한 방법은 패치 적용이다.


왜 이번 발견이 중요한가

이 버그의 가치가 단순한 CVE 너머에 있다.

첫째, 18년간 탐지되지 않았다. 수동 코드 감사, 퍼저, 정적 분석 등 전통적 방법으로는 찾지 못했던 버그를 자율 취약점 분석 시스템이 6시간 만에 발견했다. AI 기반 취약점 발견이 실전에서 빠르게 현실화되고 있다는 증거다.

둘째, 영향을 받는 범위가 방대하다. NGINX는 전 세계 웹 서버의 약 39~43%를 점유한다. Apache와 함께 인터넷의 기반인 소프트웨어다. 이 소프트웨어에서 인증 없는 RCE가 가능한 취약점이 18년간 존재했다.

셋째, 완화의 착각에 대한 경고다. "ASLR을 켜놨으니 괜찮다"는 말이 많다. 그러나 이 취약점에서는 워커 크래시를 통한 힙 레이아웃 반복 확보가 가능하기 때문에, ASLR이 주는 보호 효과가 크게 약화된다. 침임 깊이 방어 기법은 중요하지만, 취약점 자체를 패치하는 것이 가장 확실하다.


마무리

NGINX Rift는 2026년 가장 중요한 보안 취약점 중 하나다. 18년간 숨겨졌던 치명적 힙 오버플로, 인증 없는 원격 코드 실행 가능성, 전 세계 웹복무기적 3분의 1이 영향받는 규모를 생각하면 긴급한 조치가 필요하다.

개발자가 해야 할 일:

• 사용 중인 NGINX 버전을 확인하고 1.31.0 이상으로 업그레이드

• 즉시 패치가 어려운 경우 이름 없는 캡처 설정 점검

• Nginx Ingress Controller, NGINX Gateway Fabric 등 주변 제품군도 함께 확인

호련망 기반 인프라를 운영하는 모든 개발자와 운영자는 지금 이 취약점에 대한 패치를 가장 먼저 처리해야 한다.


📚 출처

GeekNews — NGINX Rift: 새로운 NGINX 익스플로잇

Cyber Kendra — NGINX Rift: An 18-Year-Old Bug

Depth First — NGINX Rift Achieving NGINX RCE

F5 Official Advisory

GitHub — Nginx-Rift PoC


📚 출처

https://news.hada.io/topic?id=29537