NGINX rewrite 모듈 힙 버퍼 오버플로 CVE-2026-42945 — CISA KEV 등재와 실전 완화 아키텍처

CVSS 9.2 NGINX ngx_http_rewrite_module 힙 버퍼 오버플로 CVE-2026-42945의 기술 메커니즘과 CISA KEV 대응, WAF·컨테이너 완화책을 정리한다.

2026-08-12 · 최초 발행 2026-05-20

NGINX Plus 및 NGINX Open Source의 ngx_http_rewrite_module에서 발견된 힙 버퍼 오버플로 취약점 CVE-2026-42945(CVSS 9.2)가 실제 공격에 악용되고 있으며, 미국 CISA(사이버보안 및 인프라 보안국)의 KEV(Known Exploited Vulnerabilities) 목록에 공식 등재됐다. 전 세계 웹 트래픽의 약 34%를 처리하는 NGINX가 원격 코드 실행(RCE) 취약점의 표적이 됐다는 사실은 웹 서버 인프라 전반에 대한 즉각적인 위협 평가를 요구한다.

취약점 개요

항목 상세
CVE ID CVE-2026-42945
CVSS 점수 9.2 (Critical)
취약 컴포넌트 ngx_http_rewrite_module
영향 제품 NGINX Open Source 1.24.x ~ 1.27.x, NGINX Plus R31 ~ R34
취약점 유형 Heap Buffer Overflow (CWE-122)
공격 벡터 네트워크 (원격)
인증 요구 불필요 (비인증 원격 악용 가능)
악용 현황 실제 공격 확인 (CISA KEV 등재)
수정 버전 NGINX Open Source 1.27.5, NGINX Plus R35
공개일 2026-04-18
KEV 등재일 2026-05-02

취약점의 근본 원인은 ngx_http_rewrite_module이 rewrite 지시어를 처리하는 과정에서 정규식 캡처 그룹과 변수 치환 결과물의 최대 길이를 검증하지 않아, 할당된 버퍼 크기를 벗어나 힙 영역을 덮어쓰는 데 있다. NGINX 마스터 프로세스가 아닌 워커 프로세스가 직접 HTTP 요청을 처리하므로, 공격자는 특수 제작된 HTTP 요청 한 번으로 워커 프로세스의 힙을 오염시킬 수 있다.

힙 버퍼 오버플로 메커니즘

NGINX는 자체 메모리 풀(ngx_pool_t)을 사용해 요청 처리 중 동적 메모리를 관리한다. 각 HTTP 요청은 ngx_http_request_t 구조체에 연결된 독립 메모리 풀을 할당받으며, 요청 처리가 끝나면 풀 전체가 해제된다. 이 설계는 일반적으로 메모리 누수에 강하지만, 풀 내부 버퍼 경계 검증이 미흡할 경우 힙 기반 오버플로가 발생한다. NGINX 워커 프로세스의 힙 레이아웃을 단순화하면 다음과 같다.

[낮은 주소]
  ngx_pool_t (요청 A)
    → ngx_buf_t (rewrite 결과 버퍼) ← 오버플로 발생 지점
    → 다음 할당 블록 (ngx_connection_t 등)
  ngx_pool_t (요청 B)
[높은 주소]

ngx_http_rewrite_modulengx_palloc()으로 결과 버퍼를 할당할 때 최악의 경우(worst-case) 출력 크기를 정적으로 계산한다. 문제는 정규식 캡처 그룹이 중첩된 $1, $2 등의 역참조가 포함된 rewrite 규칙에서 실제 치환 결과가 사전 계산된 크기를 초과할 수 있다는 점이다. 취약한 코드 경로를 의사 코드로 표현하면 다음과 같다.

/* 취약한 버퍼 크기 계산 (패치 이전) */
size_t estimated_len = ngx_http_rewrite_estimate_size(
    rewrite_code, r->captures, ncaptures
);
/* estimated_len이 실제 치환 결과보다 작을 수 있음 */
buf = ngx_palloc(r->pool, estimated_len);

/* 치환 수행 — 경계 검사 없이 buf에 쓰기 */
ngx_http_rewrite_execute(buf, rewrite_code, r->captures);
/* ^^ estimated_len 초과 시 힙 오버플로 발생 */

버퍼 크기 추정 로직은 단순 문자열 치환의 최대 길이만 고려했고, 다음 조건이 복합될 때 추정값이 실제 출력 길이보다 작아진다. 정규식 캡처 그룹이 16개 이상인 경우, 역참조 문자열이 멀티바이트(UTF-8) 문자를 포함한 경우, rewrite 지시어가 if 블록 내부에서 중첩 변수 확장을 수행하는 경우, 서버 변수($host, $request_uri)의 값이 비정상적으로 긴 경우다. 공격자는 이 조건들을 의도적으로 만족시키는 HTTP 요청을 전송해 estimated_len보다 긴 데이터를 버퍼에 쓰도록 유도한다.

신뢰할 수 있는 RCE를 달성하기 위해 공격자는 힙 스프레이(heap spray) 기법을 사용해 제어하려는 메모리 청크가 오버플로 버퍼 직후에 위치하도록 유도한다. NGINX 워커 프로세스에서 관찰된 공격 체인은 다음과 같다.

No (길이 부족)Yes(1) 준비 단계: 다수의 HTTP요청으로 스프레이(ngx_connection_t 청크배치)(2) 오버플로 트리거: 특수제작된 rewrite URL 요청 전송버퍼 오버플로 발생?(3) 인접 ngx_connection_t또는ngx_http_request_t 구조체덮어쓰기(4) 함수 포인터 덮어쓰기(read_event_handler /write_event_handler)(5) 이벤트 루프에서 조작된함수 포인터 호출 RIP/PC 제어 획득(6) ROP 체인 실행(ASLR 우회: 이전 요청으로주소 누출)(7) 시스템 명령 실행nginx worker 권한으로획득(8) 컨테이너 탈출 또는 권한상승 시도

실제 PoC 코드가 공개된 이후 공격자들은 다음 단계의 페이로드를 배포하고 있다. ngx_http_request_t의 URI 핸들러를 조작해 웹쉘 파일을 /var/cache/nginx/에 기록하는 방식, system() 또는 execve() 호출로 공격자 서버에 콜백 연결하는 리버스 쉘, 메모리 내 TLS 세션 키·쿠키·Bearer 토큰을 덤프하는 자격증명 탈취다. ASLR(Address Space Layout Randomization)이 활성화된 환경에서도, NGINX 워커 프로세스가 장기 실행되므로 사전 스캔 요청으로 메모리 레이아웃을 유추하거나 같은 워커에 여러 요청을 보내 정보 누출을 발생시키는 방식으로 ASLR을 우회한다.

CISA KEV 등재의 의미

CISA의 Known Exploited Vulnerabilities(KEV) 카탈로그는 실제 악용이 확인된 취약점만을 수록하는 권위 있는 목록이다. CVE-2026-42945가 KEV에 등재됐다는 것은 단순한 PoC 코드 공개를 넘어, 실제 공격 캠페인에서 활용되고 있음을 의미한다. 등재의 직접적 함의는 세 가지다. 첫째, CISA는 연방 행정부(FCEB) 기관에 등재 후 14일 이내(2026-05-16 기한) 패치 적용을 의무화한다. 둘째, 단일 공격자가 아닌 복수의 위협 행위자 그룹이 이미 악용 중임을 시사하는 위협 인텔리전스 신호다. 셋째, CVSS 점수만으로는 알 수 없는 실질적 위험도를 전달하는 우선순위 지표 역할을 한다.

NoYes취약점 발견·보고CISA 내부 검증(실제 악용 증거 수집)실제 악용확인?NVD 등재만 유지(KEV 제외)KEV 카탈로그 등재FCEB 기관 14일의무 패치 기한 부여민간 기업 강력패치 권고 발령BOD 22-01 준수패치 적용 확인벤더 보안 권고재발행 업데이트

보안 연구기관들이 관찰한 CVE-2026-42945 악용 캠페인의 특성은 다음과 같다.

항목 관찰 내용
공격 대상 금융, 전자상거래, 정부 기관의 공개 NGINX 인스턴스
초기 스캐닝 Shodan/Censys 기반 취약 버전 NGINX 대규모 스캔
악용 도구 Metasploit 모듈 및 커스텀 Python PoC 공개됨
배포 페이로드 Mirai 변종 봇넷, 암호화폐 채굴기, 웹쉘
지속성 확보 cron 기반 재설치, SSH 공개키 추가
측면 이동 Kubernetes 클러스터 탈출, 내부 API 서버 공격

영향 받는 NGINX 버전은 NGINX Open Source 1.24.0 ~ 1.27.4(1.27.5에서 수정), NGINX Plus R31 ~ R34(R35에서 수정)다. NGINX Unit은 별도 아키텍처라 영향이 없고, OpenResty는 nginx 코어 버전에 따라 영향을 받을 수 있어 별도 확인이 필요하다.

즉시 패치와 임시 완화

KEV 등재 취약점에 대한 첫 번째이자 가장 중요한 대응은 즉시 패치 적용이다.

# 현재 NGINX 버전 확인
nginx -v

# Ubuntu/Debian — NGINX 공식 저장소
apt-get update && apt-get install nginx=1.27.5-1~$(lsb_release -cs)

# RHEL/CentOS/Rocky — NGINX 공식 저장소
dnf update nginx

# NGINX Plus (F5 고객 포털 통해 R35 다운로드)
# /etc/nginx/nginx.conf의 load_module 지시어 경로 확인 후 재시작
nginx -t && systemctl reload nginx

# Docker 환경 — 이미지 버전 고정 업데이트
# docker-compose.yml 수정
# image: nginx:1.27.5-alpine (또는 1.27.5)
docker pull nginx:1.27.5-alpine
docker-compose up -d

패치 적용이 즉시 불가능한 경우, ngx_http_rewrite_module을 비활성화하는 임시 완화책을 고려한다.

# nginx.conf — rewrite 모듈 지시어 제거 또는 주석 처리
# (설정에서 모든 rewrite 지시어를 제거하고 대체 로직 구현)
# 주의: 이 방법은 기존 rewrite 규칙을 무효화하므로 서비스 영향 평가 필수

WAF 필터링과 rewrite 설정 최소화

웹 방화벽(WAF)은 패치 전 임시 완화 및 패치 후 심층 방어를 위한 핵심 계층이다. CVE-2026-42945 악용 트래픽은 비정상적으로 긴 URI 및 특정 패턴의 URL 인코딩을 포함하므로 탐지 가능하다.

# /etc/modsecurity/cve-2026-42945.conf

# (1) 비정상적으로 긴 REQUEST_URI 차단 (일반적 한계 2048바이트)
SecRule REQUEST_URI "@gt 4096" \
    "id:9264295,\
    phase:1,\
    deny,\
    status:400,\
    log,\
    msg:'CVE-2026-42945: Oversized URI blocked',\
    severity:'CRITICAL'"

# (2) rewrite 모듈을 악용하는 역참조 패턴 탐지
SecRule REQUEST_URI "@rx (%[0-9a-fA-F]{2}){50,}" \
    "id:9264296,\
    phase:1,\
    deny,\
    status:400,\
    log,\
    msg:'CVE-2026-42945: Suspicious URL encoding pattern',\
    severity:'CRITICAL'"

# (3) 비정상 Host 헤더 길이 제한
SecRule REQUEST_HEADERS:Host "@gt 253" \
    "id:9264297,\
    phase:1,\
    deny,\
    status:400,\
    log,\
    msg:'CVE-2026-42945: Oversized Host header',\
    severity:'HIGH'"

AWS WAF·CloudFlare WAF 사용자는 벤더가 배포한 CVE-2026-42945 전용 관리형 규칙 그룹(managed rule group)이나 즉시 사용 가능한 Rate-based 규칙을 활성화해야 한다.

ngx_http_rewrite_module 사용을 최소화하고 대안 지시어로 전환하는 것이 구조적 위험 감소 방법이다.

# 취약한 패턴 (rewrite 지시어 — 최소화 대상)
server {
    location / {
        rewrite ^/old-path/(.*)$ /new-path/$1 permanent;
    }
}

# 대안 (1): return 지시어 사용 (rewrite 모듈 미사용)
server {
    location /old-path/ {
        return 301 /new-path$request_uri;
    }
}

# 대안 (2): try_files 지시어 (rewrite 모듈 미사용)
server {
    location / {
        try_files $uri $uri/ /index.html;
    }
}

권한 분리 설계도 함께 적용한다.

# nginx.conf
user nginx;  # root 실행 절대 금지

worker_processes auto;
worker_rlimit_nofile 65535;

# 워커 프로세스 권한 최소화
events {
    worker_connections 1024;
}

Linux 시스템에서 NGINX 워커에 seccomp 프로파일을 적용하면 RCE 이후 공격자가 사용할 수 있는 시스템 콜을 제한할 수 있다.

# systemd 서비스 파일에 seccomp 필터 추가
# /etc/systemd/system/nginx.service.d/seccomp.conf
[Service]
SystemCallFilter=@system-service
SystemCallFilter=~@debug @mount @cpu-emulation @obsolete @privileged @reboot
SystemCallErrorNumber=EPERM

컨테이너·Kubernetes 격리

컨테이너 환경에서의 CVE-2026-42945 완화는 컨테이너 탈출을 방지하고 폭발 반경(blast radius)을 제한하는 데 집중해야 한다.

# docker-compose.yml — 최소 권한 컨테이너 실행
services:
  nginx:
    image: nginx:1.27.5-alpine
    read_only: true                    # 루트 파일시스템 읽기 전용
    security_opt:
      - no-new-privileges:true         # setuid/setgid 실행 차단
      - seccomp:./nginx-seccomp.json   # 커스텀 seccomp 프로파일
    cap_drop:
      - ALL                            # 모든 Linux 권한 제거
    cap_add:
      - NET_BIND_SERVICE               # 포트 80/443 바인딩만 허용
    tmpfs:
      - /tmp:size=64m,mode=1777
      - /var/cache/nginx:size=256m
    user: "101:101"                    # nginx 비루트 사용자

Kubernetes 환경에서는 PodSecurityContext와 NetworkPolicy를 결합해 격리를 강화한다.

# kubernetes pod security context
spec:
  securityContext:
    runAsNonRoot: true
    runAsUser: 101
    runAsGroup: 101
    seccompProfile:
      type: RuntimeDefault
  containers:
  - name: nginx
    image: nginx:1.27.5-alpine
    securityContext:
      allowPrivilegeEscalation: false
      readOnlyRootFilesystem: true
      capabilities:
        drop: ["ALL"]
        add: ["NET_BIND_SERVICE"]

런타임 탐지 도구로는 워커 프로세스의 비정상 시스템 콜(execve, socket 등)을 실시간 탐지하는 Falco, 네트워크·프로세스 수준 이상 행위를 탐지하는 eBPF 기반 솔루션(Cilium, Tetragon), L7 페이로드를 검사하는 F5의 NGINX App Protect가 있다.

우선순위 프레임워크와 지속 모니터링

CVE-2026-42945는 웹 서버 계층 취약점이 얼마나 빠르게 실제 위협으로 전환되는지를 보여주는 사례다. 아래 프레임워크는 NGINX 및 유사 웹 서버 취약점에 대한 우선순위 결정 체계를 제시한다.

우선순위 조건 대응 기한 예시
Critical CVSS ≥ 9.0 + KEV 등재 + RCE 가능 24시간 이내 CVE-2026-42945
High CVSS ≥ 7.0 + PoC 공개 + 인증 불필요 72시간 이내 CVE 사례 多
Medium CVSS ≥ 5.0 + 인증 필요 7일 이내 설정 오류 類
Low CVSS < 5.0 + 악용 미확인 30일 이내 정보 노출 類

웹 서버 취약점 관리에서 특히 중요한 원칙은 "패치 가능성이 높을 때 반드시 패치"다. NGINX와 같은 오픈소스 프로젝트는 보안 패치 배포가 빠르고 버전 업그레이드 비용이 상대적으로 낮다. 지속적인 취약점 모니터링을 위한 자동화 파이프라인은 다음과 같이 구성할 수 있다.

# trivy를 이용한 NGINX 이미지 취약점 스캔 (CI/CD 통합)
trivy image --severity CRITICAL,HIGH nginx:1.27.5-alpine

# grype를 이용한 SBOM 기반 스캔
syft nginx:1.27.5-alpine -o spdx-json > nginx-sbom.json
grype sbom:nginx-sbom.json --fail-on critical

CVE-2026-42945는 ngx_http_rewrite_module의 버퍼 크기 추정 로직 결함이 CISA KEV 등재 수준의 실제 RCE 위협으로 발전한 사례로, 웹 서버 메모리 안전 취약점의 폭발적 위험성을 재확인시켜 준다. 즉시 NGINX 1.27.5 또는 NGINX Plus R35로 업그레이드하고, WAF 필터링·rewrite 설정 최소화·컨테이너 최소 권한 설계를 통해 다계층 방어 체계를 구축해야 한다. CISA KEV 목록은 패치 우선순위 결정의 가장 신뢰할 수 있는 기준점이며, KEV 등재 취약점은 패치 완료 전까지 해당 서비스의 인터넷 노출을 최소화하는 임시 완화 조치를 병행해야 한다.

Sources

NGINXCISA KEV힙버퍼오버플로WAF컨테이너보안