
Script en Python scanner safe-check de la CVE-2025-23419
Repositorio con script de validación segura para la CVE-2025-23419, vulnerabilidad relacionada con NGINX, mTLS y reanudación de sesión TLS.
El script realiza una verificación heurística para identificar posible exposición a la falla, sin ejecutar explotación activa y sin intentar eludir la autenticación por certificado de cliente.
La propuesta es apoyar el triaje técnico, la validación defensiva y el análisis de exposición en entornos autorizados.
| CVE | Tecnología | Tipo | Componente afectado |
|---|
CVE-2025-23419 | NGINX | Posible bypass de autenticación mTLS | Reanudación de sesión TLS en virtual hosts |
La CVE-2025-23419 afecta escenarios donde múltiples server blocks de NGINX comparten la misma IP y puerto, y el entorno utiliza autenticación por certificado de cliente, también conocida como mTLS.
En determinadas configuraciones, un atacante podría reutilizar una sesión TLS previamente establecida para eludir los requisitos de autenticación por certificado de cliente en otro contexto de virtual host.
La vulnerabilidad está relacionada con el uso de reanudación de sesión TLS, especialmente cuando ssl_session_cache o ssl_session_tickets están habilitados.
En la práctica, la exposición depende de la combinación entre versión vulnerable, uso de TLS 1.3, configuración de sesión TLS, múltiples virtual hosts y aplicación de mTLS en partes específicas del entorno.
Según avisos públicos, el problema afecta a:
NGINX 1.11.4 y versiones posteriores
Cuando están presentes las siguientes condiciones:
NGINX compilado con OpenSSL
TLS 1.3 habilitado
Reanudación de sesión habilitada
Uso de ssl_session_cache o ssl_session_tickets
Múltiples server blocks compartiendo la misma IP y puerto
Autenticación mTLS/certificado de cliente en algún virtual host
La corrección fue publicada en las versiones:
NGINX 1.26.3
NGINX 1.27.4
Por lo tanto, una versión como:
nginx/1.24.0
debe tratarse como potencialmente vulnerable, siempre que el escenario de configuración también sea compatible con la falla.
Importante: la versión vulnerable por sí sola no confirma explotación. Indica la necesidad de validar la configuración.
| Script | Objetivo | Cuándo usarlo |
|---|---|---|
safe-check-CVE-2025-23419.py | Realiza una verificación segura y heurística para posible exposición a CVE-2025-23419. | Usar cuando el objetivo expone NGINX potencialmente vulnerable y se sospecha uso de mTLS/reanudación de sesión TLS. |
El script ejecuta validaciones seguras para recopilar indicios de la vulnerabilidad:
Server;POSIBLE o NO_INDICADO.Este script no explota la vulnerabilidad.
No intenta:
La propuesta es solo recopilar indicios técnicos para apoyar el triaje y la validación defensiva.
Use este script cuando haya uno o más de los siguientes indicios:
El servidor expone nginx/1.24.0
El entorno utiliza mTLS
Existen múltiples virtual hosts en la misma IP y puerto
Hay uso de TLS 1.3
Se sospecha que ssl_session_cache o ssl_session_tickets están habilitados
Una herramienta automatizada señaló CVE-2025-23419
Ejemplos de objetivos adecuados:
https://api.ejemplo.com/
https://admin.ejemplo.com/
https://mtls.ejemplo.com/
https://gateway.ejemplo.com/
python3 safe-check-CVE-2025-23419.py https://ejemplo.com/
python3 safe-check-CVE-2025-23419.py https://ejemplo.com/ --verbose
python3 safe-check-CVE-2025-23419.py https://ejemplo.com/ --json
python3 safe-check-CVE-2025-23419.py https://ejemplo.com/ --timeout 10
POSIBLE
Indica que el script encontró indicios compatibles con posible exposición a la CVE-2025-23419.
Esto no confirma explotación. Significa que el entorno merece un análisis manual de la configuración de NGINX y validación con el equipo responsable.
Ejemplo de salida detallada:
POSIBLE
nginx_header: nginx/1.24.0
nginx_ver: (1, 24, 0) (vuln? True)
mtls_hint: True
tls: TLSv1.3
resumption_reused: True
other_vhost_no_mtls_hint: True
Estos datos ayudan a entender por qué el endpoint fue clasificado como posible exposición.
NO_INDICADO
Indica que el script no encontró suficientes indicios para señalar posible exposición en ese endpoint.
Esto no garantiza la ausencia absoluta de la vulnerabilidad, especialmente si:
Server está oculta;Los principales puntos ajustables son:
CERT_ERROR_STATUS = {400, 401, 403, 495, 496}
Esta lista representa códigos HTTP que pueden indicar fallo relacionado con certificado de cliente ausente o inválido.
También es posible ajustar el timeout mediante línea de comandos:
--timeout 10
El script utiliza únicamente bibliotecas estándar de Python.
Dependencias principales:
python3
ssl
socket
argparse
urllib
No es necesario instalar bibliotecas externas mediante pip.
Actualice NGINX a una versión corregida, preferiblemente 1.26.3, 1.27.4 o superior, según el canal utilizado.
Revise la configuración de server blocks que comparten la misma IP y puerto, especialmente cuando haya mTLS solo en parte de los virtual hosts.
Evalúe el uso de:
ssl_session_cache
ssl_session_tickets
TLS 1.3
server blocks compartiendo IP y puerto
mTLS aplicado en virtual hosts específicos
También se recomienda aislar contextos que requieren certificado de cliente y validar que la autenticación mTLS se esté aplicando en el virtual host correcto.
Además, revise configuraciones en proxies, gateways, balanceadores, ingress controllers y CDNs, ya que el componente que termina TLS puede no ser el mismo que responde por la aplicación final.
https://mailman.nginx.org/pipermail/nginx-announce/2025/NYEUJX7NCBCGJGXDFVXNMAAMJDFSE45G.html
https://nvd.nist.gov/vuln/detail/CVE-2025-23419
https://ubuntu.com/security/CVE-2025-23419
https://github.com/advisories/GHSA-84xh-pwc6-7g4g
https://access.redhat.com/security/cve/cve-2025-23419
Este script debe utilizarse únicamente en entornos autorizados.
La finalidad es apoyar el triaje, la validación segura, el pentest autorizado, el análisis defensivo y la confirmación de exposición de configuración.
El uso contra sistemas sin autorización está prohibido.