
Este repositorio contiene un entorno de prueba de concepto (PoC) diseñado para probar la CVE-2026-29145.
Este repositorio contiene un entorno de prueba de concepto (PoC) diseñado para probar la CVE-2026-29145.
La vulnerabilidad es una omisión de autenticación en la implementación de TLS mutuo (CLIENT_CERT) de Apache Tomcat. Cuando OCSP (Protocolo de Estado de Certificados en Línea) está configurado con fallo suave deshabilitado, Tomcat puede no tratar un fallo de verificación OCSP como una denegación estricta. Esto permite que un cliente con un certificado potencialmente revocado o no verificado omita la autenticación si el respondedor OCSP no está disponible o devuelve un error.
| Propiedad | Valor |
|---|
| ID CVE | CVE-2026-29145 |
| Puntuación CVSS | 9.1 (Crítica) - CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |
| Vector de Ataque | Red |
| Privilegios Requeridos | Ninguno |
| Impacto | Omisión de Autenticación |
.ps1El script run_test.sh automatiza todo el proceso: limpieza, generación de certificados y ejecución de todos los escenarios de prueba (vulnerable, exitoso y parcheado).
# Navegar al directorio del proyecto
cd CVE-2026-29145-Tester
# Hacer ejecutables los scripts
chmod +x cleanup.sh setup_certs.sh run_test.sh
# Instalar dependencias de Python (si poc_exploit.py las requiere)
pip install -r requirements.txt
# Ejecutar la suite de pruebas completa
./run_test.sh
En Linux/macOS:
./setup_certs.sh
En Windows (PowerShell):
.\setup_certs.ps1
Qué hace esto:
http://localhost:8888Salida esperada:
[INFO] Iniciando generación de certificados para el entorno de pruebas CVE-2026-29145
[INFO] OpenSSL encontrado: OpenSSL 3.0.x (...)
[INFO] Directorio certs creado
[INFO] Generando CA raíz...
[INFO] Generando certificado de servidor...
[INFO] Generando certificado de cliente con extensión OCSP...
[INFO] ¡Configuración de certificados completada exitosamente!
docker-compose up -d
Qué hace esto:
Verificar que los contenedores estén ejecutándose:
docker-compose ps
python poc_exploit.py
Salidas esperadas:
Sistema Vulnerable:
[INFO] Intentando conexión a https://localhost:8443/protected-resource...
[WARNING] VULNERABLE: Acceso concedido a pesar del fallo de verificación OCSP.
[WARNING] Vista previa de la respuesta: <html>...
Sistema Parcheado:
[INFO] Intentando conexión a https://localhost:8443/protected-resource...
[INFO] NO VULNERABLE: Acceso denegado (Autenticación funcionando).
| Escenario | Estado OCSP | Esperado (Parcheado) | Resultado (Vulnerable) | Notas |
|---|---|---|---|---|
| Operación Normal | En línea y Válido | 200 OK ✓ | 200 OK ✓ | La verificación OCSP tiene éxito, acceso concedido |
| Fallo Suave | Sin conexión/Timeout | 403 Prohibido ✓ | 200 OK ✗ | OMISIÓN - Respondedor OCSP no disponible |
| Revocación Estricta | En línea y Revocado | 403 Prohibido ✓ | 403 Prohibido ✓ | Certificado explícitamente revocado |
| Certificado Inválido | Cadena Inválida | 403 Prohibido ✓ | 403 Prohibido ✓ | La validación de la cadena falla |
Prueba 1: Predeterminado (Respondedor OCSP con Fallos)
# Mantener los contenedores ejecutándose
python poc_exploit.py
Prueba 2: Detener el Respondedor OCSP (Simular Timeout)
docker-compose pause ocsp-responder
python poc_exploit.py
docker-compose unpause ocsp-responder
Prueba 3: Prueba Manual con curl
curl -v \
--cert certs/client-cert.pem \
--key certs/client-key.pem \
--cacert certs/ca-chain.pem \
https://localhost:8443/protected-resource
CVE-2026-29145-Tester/
├── README.md # Este archivo
├── setup_certs.sh # Script de generación de certificados - Bash (Linux/macOS)
├── setup_certs.ps1 # Script de generación de certificados - PowerShell (Windows)
├── cleanup.sh # Script de limpieza y reinicio - Bash (Linux/macOS)
├── cleanup.ps1 # Script de limpieza y reinicio - PowerShell (Windows)
├── run_test.sh # Script de ciclo de prueba completo automatizado
├── docker-compose.yml # Orquestación de servicios Docker
├── requirements.txt # Dependencias de Python
├── poc_exploit.py # Script principal de prueba (con registro y manejo de errores)
├── simple_proxy_fail.py # Respondedor OCSP simulado (con registro detallado)
├── .gitignore # Reglas de ignorado de Git para certificados y registros
├── certs/ # Certificados generados (creados por los scripts setup_certs)
│ ├── ca-chain.pem # Certificado de CA raíz
│ ├── ca-key.pem # Clave privada de CA raíz
│ ├── server-cert.pem # Certificado de servidor Tomcat
│ ├── server-key.pem # Clave privada de servidor Tomcat
│ ├── client-cert.pem # Certificado de cliente de prueba
│ └── client-key.pem # Clave privada de cliente de prueba
├── tomcat/
│ └── server.xml # Configuración vulnerable de Tomcat
└── logs/ # Registros de Tomcat (creados en tiempo de ejecución)
El archivo tomcat/server.xml configura:
<SSLHostConfig
hostName="localhost"
certificateVerification="required"
caCertificateFile="conf/certs/ca-chain.pem">
<OpenSSLConf>
<ConfCommand name="OCSP" value="on"/>
</OpenSSLConf>
</SSLHostConfig>
Configuraciones Clave:
certificateVerification="required" - Aplica la autenticación CLIENT_CERTOCSP on - Habilita la verificación de revocación OCSPEl respondedor OCSP simulado (simple_proxy_fail.py):
localhost:8888# macOS
brew install openssl
# Ubuntu/Debian
sudo apt-get install openssl
# CentOS/RHEL
sudo yum install openssl
Causa: La generación de certificados falló o no se ejecutó.
# Limpiar y regenerar
rm -rf certs
./setup_certs.sh
Causa: El contenedor de Tomcat no está ejecutándose o no está listo.
# Verificar el estado del contenedor
docker-compose ps
# Verificar registros
docker-compose logs vulnerable-tomcat
# Asegurarse de que ambos servicios estén ejecutándose y saludables
docker-compose up -d
sleep 10 # Esperar a que los servicios se inicien
Causa: Tomcat tarda demasiado en iniciarse o hay problemas de red.
# Verificar los registros de inicio de Tomcat
docker-compose logs vulnerable-tomcat
# Aumentar el tiempo de espera y reintentar
timeout 30 docker-compose logs -f vulnerable-tomcat # Monitorear el inicio
Causa: Docker Compose no está instalado o no está en el PATH.
# Instalar Docker Compose (si se usa independiente)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.x.x/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# O usar docker compose (V2 integrado con Docker Desktop)
docker compose up -d
Causa: La validación del certificado está fallando.
# Verificar que los archivos de certificado existan
ls -la certs/
# Verificar la validez del certificado
openssl x509 -in certs/client-cert.pem -noout -text
Causa: Fallo en el protocolo de enlace SSL - puede indicar que el fallo estricto está funcionando correctamente.
Solución: ¡Esto es en realidad una señal positiva! El fallo estricto está impidiendo el acceso cuando OCSP falla.
# Verificar si el respondedor OCSP está ejecutándose
docker-compose ps ocsp-responder
# Ver el error detallado
python poc_exploit.py # Ya proporciona registro detallado
Causa: El puerto 8443 o 8888 ya está en uso.
# Encontrar el proceso que usa el puerto
lsof -i :8443
lsof -i :8888
# Terminar el proceso o usar puertos diferentes en docker-compose.yml
# Registros de Tomcat
docker-compose logs -f vulnerable-tomcat
# Registros del respondedor OCSP
docker-compose logs -f ocsp-responder
# Depuración del script de Python
python poc_exploit.py # Ya incluye registro detallado
# Abrir una terminal y ejecutar
docker-compose logs -f
# En otra terminal, ejecutar la prueba
python poc_exploit.py
# Probar conectividad con el respondedor OCSP
curl http://localhost:8888/
# Probar el respondedor OCSP desde dentro del contenedor de Tomcat
docker exec vulnerable-tomcat curl http://ocsp-responder:8888/
# Probar el protocolo de enlace SSL
openssl s_client -connect localhost:8443 \
-cert certs/client-cert.pem \
-key certs/client-key.pem \
-CAfile certs/ca-chain.pem
Para eliminar todos los contenedores, volúmenes, certificados y registros:
En Linux/macOS:
./cleanup.sh
En Windows (PowerShell):
.\cleanup.ps1
Qué hace esto:
certs/ generadologs/Verificar la limpieza:
docker-compose ps # No debería mostrar nada
ls -la certs/ # No debería existir
Este proyecto es solo para fines educativos y de pruebas de seguridad autorizadas.
Para mitigar esta vulnerabilidad, actualice Apache Tomcat a las siguientes versiones:
| Serie de Versión | Versión Mínima Corregida |
|---|---|
| 11.0.x | 11.0.20 o posterior |
| 10.1.x | 10.1.53 o posterior |
| 9.0.x | 9.0.116 o posterior |
Pasos de actualización:
# Ejemplo: Actualizar docker-compose.yml para usar la versión parcheada
# Cambiar: image: tomcat:10.1.52-jdk17
# A: image: tomcat:10.1.53-jdk17
docker-compose down
docker-compose up -d
Para problemas, preguntas o contribuciones, abra un issue o envíe una solicitud de extracción.
Última Actualización: Abril 2026
Estado: Pruebas y Documentación Completas