Volver al inicio

Ataques de fuzzing: análisis de logs de Nginx 2026

Desglose de un ataque de fuzzing real en servidor Nginx: 20,000 solicitudes, 12 vectores desde .env hasta flood POST. Análisis de herramientas Nuclei/ffuf y medidas protectoras — rate limiting, enrutamiento por método, catch-all. Recomendaciones prácticas para infraestructura de alta carga.

12 vectores de fuzzing de 20k logs de Nginx 2026
Advertisement 728x90

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:

Google AdInline article slot
  • 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.js para 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.

Google AdInline article slot

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

Advertisement 728x90

Leer después