
Laboratorio dockerizado para entrenamiento sobre la vulnerabilidad de reescritura de NGINX (CVE-2026-42945) con instancias vulnerables y parcheadas, scripts de prueba benignos y ejercicios de auditoría de configuración.
Dos instancias de NGINX en Docker: fragmento de reescritura arriesgada basado en patrones frente a fragmento corregido de captura nombrada, fijadas a nginx:1.30.0-alpine / nginx:1.30.1-alpine. Los scripts ejecutan peticiones curl benignas, vuelcan nginx -T y archivan evidencia. Solo para entrenamiento en revisión de configuración — /health, /nginx_status, /legacy/ son endpoints del laboratorio; restrinja la exposición fuera de una VLAN de laboratorio.
Alcance: solo hosts autorizados. Los avisos del proveedor y su propia política interpretan la salida [RISK] de scripts/check-nginx-rewrite-risk.sh (grep heurístico sobre la configuración, no un escáner formal).
Host 127.0.0.1:18080 -> nginx-rift-vulnerable (listens :8080 in container)
Host 127.0.0.1:18081 -> nginx-rift-patched
www/ -> RO -> /usr/share/nginx/html (both)
nginx-vulnerable/nginx-patched -> RO -> conf.d/default.conf
Network: nginx_rift_net (bridge)
Árbol del repositorio: docker-compose.yml, nginx-{vulnerable,patched}/default.conf, www/, scripts/, evidence/ (artefactos gitignorados excepto .gitkeep), docs/.
Docker + docker compose, bash, curl. Una vez: chmod +x scripts/*.sh. Linux (o VM) expone /proc/sys/kernel/randomize_va_space si le interesa esa línea del recolector en collect-evidence.sh; macOS Docker Desktop a menudo lo omite—el script anota ese caso.
cd nginx-rift-defensive-lab
docker compose pull # optional
docker compose up -d
docker compose ps
./scripts/benign-request-test.sh
./scripts/check-nginx-rewrite-risk.sh
./scripts/check-nginx-rewrite-risk.sh nginx-rift-patched
./scripts/collect-evidence.sh
./scripts/cleanup-lab.sh
# ./scripts/cleanup-lab.sh --purge-evidence
Cambie los puertos del host si 18080/18081 entran en conflicto (docker-compose.yml).
| Ruta | Rol |
|---|---|
/health | Texto estable para sondas (vulnerable-nginx-alive / patched-nginx-alive) |
/nginx_status | stub_status (restringir en producción) |
/legacy/ | Demostración de reescritura |
| Archivo | Propósito |
|---|---|
docs/LAB_GUIDE.md | Guía paso a paso del laboratorio |
docs/WEBINAR_FLOW.md | Ritmo del presentador |
docs/PRTG_MONITORING_NOTES.md | Ejemplos de sensores |
docs/REMEDIATION_SUMMARY_TEMPLATE.md | Esqueleto de CAB/incidente |
docs/NGINX_RIFT_DEFENSIVE_LAB_COMPLETE_GUIDE.md | Markdown consolidado |
docs/TR_KAPSAMLI_SAVUNMA_LAB_REHBERI.md | Manual en turco |
docs/PDF_GENERATION_NOTES.txt | Compilación local opcional de PDF (docs/*.pdf, gitignorado) |
Use docker compose up -d con un guion. Los globs de shell como *d pueden expandirse a nombres de archivo no deseados.