Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-42533-Config-Scanner — Escáner de configuración estática que señala configuraciones de nginx vulnerables al bug complex_value two-pass capture-clobbering (regex map + regex capture → desbordamiento de montón / fuga de información). | Kitploit
Herramientas/GitHubGitHub/0xcyberstan/cve-2026-42533-config-scanner
Análisis EstáticoEscáneres de VulnerabilidadesAnálisis de CódigoAuditoría de ConfiguraciónSeguridad WebDevSecOpsMala Configuración
GitHub0xcyberstan/cve-2026-42533-config-scanner

CVE-2026-42533-Config-Scanner

Escáner de configuración estática que señala configuraciones de nginx vulnerables al bug complex_value two-pass capture-clobbering (regex map + regex capture → desbordamiento de montón / fuga de información).

Ver Repositorio
29540hace 3 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Escáner de clobbering de capturas en nginx

Un escáner estático de solo lectura que marca configuraciones de nginx vulnerables a la clase de error de clobbering de capturas en dos pasadas complex_value (aviso de F5/nginx SIRT, julio de 2026). Analiza tu configuración e informa del patrón vulnerable con el motivo y la ubicación. No explota nada ni toca el servidor en ejecución.

Un solo archivo, solo biblioteca estándar, Python 3.6+.

Análisis completo de la vulnerabilidad: https://cyberstan.co.uk/nginx-rce/

El error

nginx construye muchos valores de directivas en dos pasadas. Una pasada LEN mide la longitud y asigna un búfer, y luego una pasada VALUE escribe en él. Las capturas de regex ($1 a $9, o con nombre (?P<name>...)) se leen de un estado compartido por petición. Un map cuya clave de coincidencia es una expresión regular ejecuta una nueva coincidencia PCRE en el momento en que se evalúa su variable, y esa coincidencia sobrescribe el estado de capturas compartido. Si una captura se mide en la pasada LEN y luego se ejecuta un map de regex antes de que la pasada VALUE reescriba esa captura, las dos pasadas no coinciden:

  • el clobber hace que el valor sea más largo de lo medido: desbordamiento de búfer en el heap (escritura fuera de límites controlada por el atacante)
  • el clobber hace que el valor sea más corto de lo medido: se devuelve al cliente heap no inicializado (fuga de información de punteros de libc/heap)

Ambas direcciones son desencadenables de forma remota cuando la entrada del map está influida por el atacante ($request_body, $http_*, $arg_*, $uri, $ssl_preread_server_name, etc.).

Qué cuenta como vulnerable

El escáner marca una location o un server cuando todo lo siguiente coincide en un mismo búfer de dos pasadas, en el orden explotable:

  1. Origen de captura: un location ~ de regex, server_name ~, rewrite, if (... ~ ...), o un map de regex con un grupo de captura.
  2. Disparador de clobber: un map (http o stream) con una clave de coincidencia regex ~ o ~*, referenciado por su variable de salida.
  3. Sumidero de dos pasadas que usa tanto una referencia de captura como la variable del map de regex:
    • directivas de valor único (return, set, add_header, proxy_method, proxy_pass, rewrite, index, y otras): ambas referencias en el mismo valor.
    • las familias de param/header (proxy_set_header, proxy_set_body, fastcgi_param, scgi_param, uwsgi_param, grpc_set_header): estas construyen un búfer por petición para toda la familia, por lo que las dos referencias pueden estar en directivas separadas dentro de la misma location.
  4. Orden: la captura debe evaluarse antes que el map de regex. Un map de regex se ejecuta una vez y se cachea, por lo que map-antes-que-captura lee un estado consistente y no es vulnerable. El escáner los informa como descartados (seguros pero frágiles, no reordenar).

Uso

# scan a single config (follows include directives by default)
python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf

# scan a directory (uses nginx.conf if present, else all *.conf)
python3 nginx_capture_clobber_scan.py /etc/nginx/

# scan several roots
python3 nginx_capture_clobber_scan.py site-a.conf site-b.conf

# machine-readable output
python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf --json

# do not expand include directives
python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf --no-includes

Opciones

OpciónEfecto
--jsonEmitir un informe JSON en lugar de texto.
--no-includesNo seguir las directivas include.

Códigos de salida

CódigoSignificado
0No se encontró ninguna configuración vulnerable.
1Se encontró al menos una configuración vulnerable.
2Error de uso (no se proporcionó ninguna ruta, o no se encontró ninguna).

Utilizable en CI, ya que una configuración vulnerable sale con un código distinto de cero:

python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf || echo "review needed"

Salida

El modo texto imprime, para cada hallazgo: archivo y línea, el ámbito contenedor, la directiva sink, las variables de captura y de mapa involucradas, el mapa que lo desencadena y una razón de una línea. Una sección de descartados lista las coexistencias en orden seguro. --json produce:

{
  "vulnerable": true,
  "findings": [
    {
      "file": "/etc/nginx/conf.d/api.conf",
      "line": 12,
      "scope": "location ~ ^/api/(.+)$",
      "directive": "proxy (family buffer)",
      "captures": ["$1"],
      "map_vars": ["$is_bot"],
      "triggers": ["$is_bot <- regex-map on $http_user_agent [nginx.conf:30]"],
      "reason": "..."
    }
  ],
  "cleared_safe_order": [],
  "regex_maps": [],
  "missing_includes": []
}

Cómo solucionar lo que encuentra

  1. Aplique el parche del proveedor (nginx 1.30.4 stable / 1.31.3 mainline, NGINX Plus R36 P7 / 37.0.3.1). Esta es la única solución completa. El parche añade una comprobación de límites (ngx_http_script_check_length()) que evita que la pasada VALUE escriba más allá del búfer asignado, y calcula la longitud de la cadena devuelta a partir de los bytes realmente escritos en lugar de la medición de la pasada LEN, cerrando tanto la dirección de desbordamiento como la de fuga de información.
  2. Endurecimiento intermedio de la configuración (defensa en profundidad, no un sustituto del parche):
    • No haga referencia a una variable map de regex en la misma ubicación o búfer que una referencia $1 a $9 o de captura con nombre.
    • No reutilice el mismo grupo (?P<name>...) en múltiples mapas de regex.
    • Mantenga las referencias de captura y las referencias de mapas de regex fuera de la misma familia de proxy_set_header o fastcgi_param.

Limitaciones

  • Análisis estático: lee la configuración, no el comportamiento en tiempo de ejecución. No puede resolver valores producidos por variables set dinámicas.
  • Los destinos de include ilegibles (por ejemplo, rutas absolutas que no existen localmente) se reportan en missing_includes, no se omiten silenciosamente. Ejecútelo en el host donde la configuración se resuelve para una cobertura completa.
  • Una detección de captura-antes-de-mapa marcada puede neutralizarse en tiempo de ejecución si esa variable de mapa ya fue evaluada antes en la misma solicitud (ya estaría en caché). El escáner aún las reporta, lo cual es la opción conservadora para un autoescaneo de seguridad.

Referencia

Análisis de la vulnerabilidad y cadena de explotación: https://cyberstan.co.uk/nginx-rce/

Descargar herramienta