Ataques de Fuzzing 2026: Análisis de 12 Vectores de Ataque a partir de 20,000 Líneas de Logs de Nginx
Un escáner de fuzzing automatizado bombardeó un servidor con Nginx con más de 20,000 solicitudes en 5 minutos. Dos IPs de la misma subred (185.x.x.52, 185.x.x.38) utilizaron el User-Agent curl/8.7.1. Herramientas probables: Nuclei con plantillas personalizadas o ffuf/gobuster con una lista de palabras de GitHub. El ataque siguió un patrón parabólico: comenzando a 100 solicitudes por segundo, presionando contra los límites, escalando a una segunda IP y disminuyendo con rutas basura.
El escáner comenzó con archivos .env, pasó a scripts de depuración, LFI/RCE, configuraciones de CI/CD e inundaciones POST. Todas las solicitudes fueron bloqueadas por configuraciones básicas de Nginx: limitación de tasa, enrutamiento de métodos y un catch-all para SPAs.
Los 12 Principales Vectores de Escaneo
El análisis de logs reveló patrones característicos. Aquí hay ejemplos clave con solicitudes reales:
- Búsqueda de .env:
/.env.staging,/.env.local,/api/.env. Objetivo: claves de base de datos, tokens de AWS.
{"time_local":"16/Mar/2026:17:19:51 +0000","remote_addr":"185.x.x.52","request_method":"GET","request_uri":"/.env.staging","status":"404","body_bytes_sent":"53","http_user_agent":"curl/8.7.1"}
- Depuración del Servidor:
/admin/admin_phpinfo.php4,phpinfo.php. Reconocimiento para versiones y rutas para LFI.
- Depuración de Yii2/Laravel:
/debug/default/view?panel=config— un intento de filtrar configuraciones con contraseñas.
- Tutoriales de GitHub:
/07-accessing-data/begin/vue-heroes/.env— búsqueda de código copiado y pegado de cursos.
- Fixtures de NPM:
/babel-plugin-dotenv/test/fixtures/dev-env/.env— pruebas en directorios de proveedores.
- LFI en Grafana:
/login?redirectTo=%2Fpms%3Fmodule%3Dlogging%26file_name%3D..%2F..%2F..%2F..%2F..%2F..%2F~%2F.aws%2Fcredentials(estado 429).
- Inyección RCE:
/admin/config?cmd=cat%20/root/.aws/credentials.
- Claves SSH:
/.ssh/id_rsa.
- CI/CD:
/.gitlab-ci.yml,sendgrid.env.
- Artefactos de Next.js:
/_next/static/chunks/app/error.jspara mapas de origen.
- Inundación POST:
/api/files/upload(estado 405).
- Basura:
/config.json.bak.1.
Mecanismos de Defensa a Nivel de Nginx
El servidor resistió la carga gracias a una configuración estricta. Desglose de prácticas efectivas:
- Limitación de Tasa:
limit_req zone=grafana_login_ip burst=5 nodelay;en formularios de inicio de sesión y APIs. Las solicitudes LFI devolvieron 429, ahorrando CPU.
- Restricciones de Método: Bloqueo de POST en endpoints no soportados — 405 Método No Permitido. Las solicitudes nunca llegan al servidor de aplicaciones.
- Enrutamiento Catch-All:
try_files $uri $uri/ /index.html;sirve la página SPA con un 200 en lugar de un 404. El bot descargó más de 40 KB de HTML en lugar de configuraciones.
- Verificación SNI: 421 Solicitud Mal Dirigida en HTTP/2 con un Host incorrecto — ralentiza escáneres multiplexados.
Análisis de la Dinámica del Ataque
{"time_local":"16/Mar/2026:17:19:51 +0000","remote_addr":"185.x.x.52","request_method":"GET","request_uri":"/config.php","status":"200","body_bytes_sent":"40414","http_user_agent":"curl/8.7.1"}
El bot interpretó el 200 como éxito pero recibió basura. Tales trucos desorientan a los analizadores de generadores de listas de palabras.
El fuzzing está evolucionando: las listas de palabras mutan desde GitHub, NPM, tutoriales. Los escáneres se adaptan a los límites, pero la higiene básica (sin .git, sin pruebas) + filtros de Nginx mantienen la defensa.
Conclusiones Clave:
- El fuzzing en 2026 se centra en .env, LFI/RCE, CI/CD, copia y pega de GitHub.
- 20k solicitudes/5 min es normal para Nuclei/ffuf; la limitación de tasa burst=5 lo bloquea.
- Catch-all con 200 OK + carga útil grande confunde a los bots.
- Enrutamiento de métodos (405) y SNI (421) minimizan la carga del backend.
- Auditorías regulares de logs descubren nuevos patrones de listas de palabras.
— Editorial Team
Aún no hay comentarios.