
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