Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
cve-2026-43512-poc — Ausnutzbarkeits-PoC für CVE-2026-43512 (Apache Tomcat Digest-Authentifizierungs-Bypass) | Kitploit
Tools/GitHubGitHub/covepseng/cve-2026-43512-poc
SchwachstellenanalyseExploitationWebsicherheitPenetrationstestsAuthentifizierungPapers & ForschungLernen & Bildung
GitHubcovepseng/cve-2026-43512-poc

cve-2026-43512-poc

Ausnutzbarkeits-PoC für CVE-2026-43512 (Apache Tomcat Digest-Authentifizierungs-Bypass)

Repository anzeigen
115vor 2 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-43512 — Apache Tomcat DIGEST-Authentifizierungsumgehung

Ergebnis der Exploitability-Analyse: Die Ursache wurde bestätigt. Eine End-to-End-Ausnutzung ist nicht reproduzierbar gegen eine standardmäßige UserDatabaseRealm-Bereitstellung. Siehe Analyse für Details.


Inhaltsverzeichnis

  • Übersicht
  • Betroffene Versionen
  • Ursache
  • Analyse
  • Repository-Struktur
  • Anforderungen
  • Verwendung
  • Erwartete Ausgabe
  • Referenzen
  • Haftungsausschluss

Übersicht

CVE-2026-43512 ist eine Schwachstelle im HTTP-DIGEST-Authentifizierungsmechanismus von Apache Tomcat. Die Methode RealmBase.getDigest() validiert den Rückgabewert von getPassword(username) nicht, bevor sie den A1-Hash-Eingabe konstruiert. Wenn ein Benutzername in der konfigurierten Realm nicht existiert, gibt zurück, was der Java-String-Konkatenationsoperator stillschweigend in das vier Zeichen lange Literal umwandelt.

getPassword()
null
"null"

Der Server berechnet daher:

root@kitploit:~
A1 = MD5("<username>:<realm>:null")

Ein Client, der eine DIGEST-Antwort übermittelt, die mit dem Literal "null" als Passwort berechnet wurde, erzeugt einen identischen Hash. Laut dem Advisory stellt dies eine Authentifizierungsumgehung dar.

Dieses Repository enthält eine minimale reproduzierbare Umgebung und einen auf Go basierenden Proof of Concept, um diese Behauptung gegen eine echte Tomcat-Instanz zu überprüfen.


Betroffene Versionen

Betroffener BereichBehoben in
7.0.0 – 7.0.1097.0.110
8.5.0 – 8.5.1008.5.101
9.0.0.M1 – 9.0.1179.0.118
10.1.0.M1 – 10.1.5410.1.55
11.0.0.M1 – 11.0.2111.0.22

Ursache

Der anfällige Codepfad in RealmBase.java (alle betroffenen Branches):

root@kitploit:~
// RealmBase.java — vulnerable
protected String getDigest(String username, String realmName, String algorithm) {
    if (hasMessageDigest(algorithm)) {
        return getPassword(username);  // returns null for unknown users
    }

    // null is concatenated as the literal "null" by Java
    String a1 = username + ":" + realmName + ":" + getPassword(username);
    return HexUtils.toHexString(
        ConcurrentMessageDigest.digest(algorithm, a1.getBytes(...))
    );
}

Der Fix (Commit 6565a6c fügt eine explizite Null-Überprüfung hinzu:

root@kitploit:~
// RealmBase.java — patched
protected String getDigest(String username, String realmName, String algorithm) {
    String password = getPassword(username);
    if (password == null) {
        return null; 
    }
    ...
}

Analyse

Das Ausführen des PoC gegen Tomcat 11.0.0-M1 mit aktiviertem FINE-Logging zeigt Folgendes:

root@kitploit:~
Digest:        2388e2c78407def640f37f092a8d3a84   ← client
Server digest: 2388e2c78407def640f37f092a8d3a84   ← server
Failed to authenticate user [ghost]

Die Digest-Hashes stimmen überein. Der Fehler in getDigest() ist real und bestätigt. Allerdings schlägt die Authentifizierung dennoch fehl, weil RealmBase.authenticate() eine zweite, unabhängige Prüfung durchführt:

root@kitploit:~
// RealmBase.authenticate()
if (serverDigest.equals(clientDigest)) {
    return getPrincipal(username);  // returns null for non-existent users
}
return null;

In einer standardmäßigen UserDatabaseRealm, die auf tomcat-users.xml basiert, führt getPrincipal() eine Suche in der In-Memory-Benutzerdatenbank durch. Für einen Benutzernamen, der in dieser Datenbank nicht existiert, gibt es null zurück. Der Aufrufer behandelt einen null-Principal als Authentifizierungsfehler und sendet einen 401.


Repository-Struktur

root@kitploit:~
cve-2026-43512-poc/
├── Dockerfile                          # Tomcat 11.0.0-M1 (betroffene Version)
├── tomcat-users.xml                    # Minimale Realm-Konfiguration – kein Benutzer "ghost"
├── web.xml
├── exploit/
│   ├── exploit.go                      # PoC – Go, nur stdlib
│   └── go.mod
└── README.md

Anforderungen

ToolVersionHinweise
Podman≥ 4.0Docker funktioniert auch
Go≥ 1.22Nur zum lokalen Ausführen des Exploits

Verwendung

1. Container bauen und starten

root@kitploit:~
podman build -t tomcat-cve-2026-43512 .
podman run -d --name tomcat-vuln -p 8080:8080 tomcat-cve-2026-43512

Einige Sekunden warten, bis Tomcat vollständig gestartet ist, dann überprüfen, ob es läuft:

root@kitploit:~
curl -si http://localhost:8080/protected/secret.html | head -1
# Erwartet: HTTP/1.1 401

2. Exploit ausführen

root@kitploit:~
cd exploit
go run exploit.go \
  -target   http://localhost:8080 \
  -path     /protected/secret.html \
  -username ghost

Verfügbare Flags:

FlagStandardBeschreibung
-targethttp://localhost:8080Tomcat-Basis-URL
-path/protected/Pfad der geschützten Ressource
-usernameghostZu verwendender Benutzername – darf nicht in tomcat-users.xml existieren

3. Ausführliches Tomcat-Logging aktivieren (optional)

Um den internen Authentifizierungsstatus zu beobachten, eine logging.properties-Datei hinzufügen und einbinden:

root@kitploit:~
org.apache.catalina.authenticator.level = FINE
org.apache.catalina.realm.level = FINE
root@kitploit:~
podman run -d --name tomcat-vuln -p 8080:8080 \
  -v ./logging.properties:/usr/local/tomcat/conf/logging.properties:ro \
  tomcat-cve-2026-43512

Das Log zeigt direkt das Ergebnis des Digest-Vergleichs und bestätigt, ob die Hashes übereinstimmen.

4. Aufräumen

root@kitploit:~
podman stop tomcat-vuln && podman rm tomcat-vuln

Erwartete Ausgabe

root@kitploit:~
============================================================
 CVE-2026-43512 — Tomcat DIGEST Auth Bypass PoC
============================================================
 Target   : http://localhost:8080/protected/secret.html
 Username : "ghost"  (must NOT exist in tomcat-users.xml)
 Password : "null"   (literal string)
------------------------------------------------------------
[1] Sending unauthenticated request to obtain DIGEST challenge...
[+] HTTP 401 received — DIGEST challenge:
    Digest realm="UserDatabase", qop="auth", nonce="...", opaque="..."

[*] realm="UserDatabase"  nonce="..."  qop="auth"  algorithm="MD5"

[2] Computing DIGEST response with password="null"...
    Digest username="ghost", realm="UserDatabase", ...

[3] Sending request with crafted DIGEST credentials...
------------------------------------------------------------
[✗] HTTP 401 — exploit failed.
    The UserDatabaseRealm provides a second line of defence:
    getPrincipal("ghost") returned null after the digest matched.
============================================================

Referenzen

RessourceLink
Apache Tomcat Security Advisoryhttps://tomcat.apache.org/security-9.html
Fix-Commithttps://github.com/apache/tomcat/commit/6565a6cb6499e56fe2f34457cec99f9d1c4f39e9
RealmBase.java (main)https://github.com/apache/tomcat/blob/main/java/org/apache/catalina/realm/RealmBase.java
RFC 2617 — HTTP Digest Authenticationhttps://datatracker.ietf.org/doc/html/rfc2617
Vollständige Analyse – Blogbeitraghttps://return-zero.dev/posts/cve-2026-43512

Haftungsausschluss

Dieses Repository ist ausschließlich für Bildungszwecke und die lokale Exploitability-Analyse bestimmt. Alle Tests wurden gegen eine selbst gehostete Container-Umgebung durchgeführt. Führen Sie diesen PoC nicht gegen Systeme aus, die Ihnen nicht gehören oder für die Sie keine ausdrückliche schriftliche Genehmigung zum Testen haben.

Tool herunterladen