
1. NGINX Rift 이란?
‘NGINX Rift’는 전 세계에서 가장 많이 쓰이는 웹 서버 소프트웨어인 NGINX의 ngx_http_rewrite_module에 존재하는 치명적인 힙 버퍼 오버플로우(Heap Buffer Overflow) 취약점입니다.
- 취약점 번호: CVE-2026-42945
- 위험도 점수 (CVSS): 9.2 / 10 (Critical - 매우 위험)
- 영향력: 로그인하지 않은 원격의 공격자가 악의적인 HTTP 요청 하나만 보내도 웹 서버를 다운시키거나(DoS), 최악의 경우 서버의 제어권을 탈취(RCE)할 수 있습니다.
😮 무려 18년의 역사? 조사 결과에 따르면, 이 취약점을 유발하는 코드는 무려 **2008년(버전 0.6.27)**에 처음 삽입되었다고 합니다. 우리가 그동안 안전하다고 믿고 썼던 NGINX 서버 속에 시한폭탄이 숨어있었던 셈이죠.
2. 기술적 분석

이번 취약점의 핵심 원인은 NGINX가 주소를 변환할 때 사용하는 '글자 수 계산 방식의 오류' 때문입니다.
웹사이트를 운영하다 보면 구버전 주소로 들어온 사용자를 새 주소로 넘겨주기 위해 NGINX 설정 파일(nginx.conf)에 rewrite(리다이렉트) 규칙을 적어두곤 합니다.
이때 NGINX 내부에서는 주소를 변환하기 위해 메모리 공간(버퍼)을 할당하는데, 내부 시스템이 "어라? 이 정도 방 크기면 주소를 다 채워 넣겠는데?" 하고 방(메모리)을 작게 잡아버리는 버그가 있었습니다.
그런데 실제 주소를 복사해 넣는 과정에서는 특수문자(예: 물음표 ? 등)를 처리하느라 주소의 길이가 예상보다 3배 이상 뻥튀기되어 들어오게 됩니다.
- 예상한 크기: 💡 "10글자만 들어오겠지?"
- 실제 들어온 크기: 🔥 "특수문자 변환 때문에 30글자가 들어왔어!"
결국 미리 준비한 작은 방(버퍼)을 넘쳐흘러 주변 메모리를 오염시키게 되는데, 이를 힙 버퍼 오버플로우라고 부릅니다. 공격자는 이 넘쳐흐르는 공간을 악용해 서버가 멈추게 만들거나 악성 코드를 심어 실행시키는 것입니다.
3. 공격 시연
Step 1) 보안 다운로드(curl)를 준비하고, 사이트를 신뢰(ca-certificates)하며, 다운로드한 파일이 짝퉁이 아닌지 검증(gnupg)하는 필수 보안 세트를 설치합니다.

Step 2) Docker 공식 GPG 키 추가합니다.

Step 3) 우분투 버전에 맞게 레포지토리 등록합니다.

Step 4) 해당 패키지 목록을 갱신합니다.

Step 5) 우분투 버전에 맞는 도커 컴포넌트를 설치합니다.

Step 6) 도커 프로세스를 활성화 시킵니다.

Step 7) git 명령어를 설치합니다.

Step 8) Poc 공격코드를 다운로드 합니다.

Step 9) 공격코드를 확인 합니다.

Step 10) setup.sh 파일을 실행시켜 설치하면 아래와 같이 에러를 확인할 수 있습니다.

Step 11) 해당 파일의 권한을 설정 후 재 설치합니다.

Step 12) 일반 사용자 계정도 Docker 명령어를 사용할 수 있도록 설정하구 Docker를 재시작 합니다.

Step 13) 도커 컴포즈(Docker Compose) 명령어를 통해 실습 환경인 취약한 NGINX 컨테이너를 자동으로 생성하고 구동합니다.

Step 14) 공격 스크립트(poc.py)를 통해 NGINX의 힙 오버플로우 취약점을 공략하여, 서버 내부 시스템 명령을 강제로 실행하는 데 성공하는 것을 알 수 있습니다.

Step 15) 도커 컴포즈(exec) 명령어로 NGINX 컨테이너 내부에 들어가 파일 목록을 확인함으로써, 명령어에 의해 /tmp/white 파일이 실제로 생성된 것을 알 수 있습니다.

Step 16) 도커 컴포즈(exec) 명령어로 NGINX 컨테이너 내부의 /tmp/white 파일을 읽어(cat), 공격자가 의도한 문자열인 'WhiteGuidance'가 정확히 텍스트로 저장되어 있음을 알 수 있습니다.

Step 17) 공격 스크립트(poc.py)의 --shell 옵션을 통해 NGINX 서버가 공격자의 컴퓨터(1337 포트)로 역연결을 보내도록 유도하여, 서버 내부 쉘을 획득하고 id 명령어로 침투 권한(nobody)를 알 수 있습니다.

Step 18) 해당 취약점 시연 영상 입니다.
4. 대응 방안
운영 중인 버전에 맞춰 아래 버전 또는 그 이상의 최신 버전으로 업그레이드를 진행해야 합니다.
- NGINX Open Source (Mainline): 1.31.0 이상으로 업데이트
- NGINX Open Source (Stable): 1.30.1 이상으로 업데이트
- NGINX Plus: R32 P6, R35 P2, R36 P4 이상으로 업데이트
💻 리눅스 서버 업데이트 명령어 예시
# Ubuntu / Debian 계열
sudo apt update && sudo apt --only-upgrade install nginx -y
# CentOS / RHEL / Rocky Linux 계열
sudo dnf clean all && sudo dnf upgrade nginx -y
숫자로 매칭되는 취약한 익명 변수($1) 대신, 변수에 직접 이름을 부여하는 정규식 문법(?P<name>)을 사용함으로써 NGINX의 메모리 크기 계산 버그를 강제로 우회하는 안전한 코드 패턴입니다.

'CVE 취약점' 카테고리의 다른 글
| PinTheft (CVE-2026-43494) (0) | 2026.05.24 |
|---|---|
| Fragnesia (CVE-2026-46300) (0) | 2026.05.16 |
| ORM Injection (CVE-2026-30951) (0) | 2026.05.01 |
| Pack2TheRoot (CVE-2026-41651) (0) | 2026.04.26 |
| GNU Inetutils (CVE-2026-24061) (0) | 2026.01.31 |