剣 KENSAI

CVE-2025-24813: Apache Tomcat Partial PUT RCE

maart 2026 8 min leestijd beveiliging

Kort samengevat: Een kritieke kwetsbaarheid in Apache Tomcat maakt niet-geauthenticeerde remote code execution mogelijk met slechts twee HTTP-verzoeken. De aanval misbruikt de partial-PUT-functie van Tomcat om een geserialiseerd Java-object te uploaden en triggert vervolgens deserialisatie via een GET-verzoek. CVSS 9.8. Treft Tomcat 9, 10 en 11 met standaardconfiguratie.

KenmerkWaarde
CVE IDCVE-2025-24813
CVSS-vectorAV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-502: Deserialization of Untrusted Data
Gepubliceerd10 maart 2025
ExploitatieActief — publieke PoC binnen 30 uur uitgebracht

CVSS 9.8 — KRITIEK

Wat is CVE-2025-24813?

Apache Tomcat ondersteunt "partial PUT" — een HTTP-functie waarmee clients grote bestanden in segmenten kunnen uploaden met Content-Range-headers. Tomcat slaat deze gedeeltelijke uploads op als tijdelijke bestanden in een werkmap. De kwetsbaarheid ontstaat door twee fouten in deze implementatie:

  1. De naam van het tijdelijke bestand wordt afgeleid van het upload-URL-pad, dat gedeeltelijk door de aanvaller gecontroleerd wordt
  2. Als het Java-sessiepersistentiemechanisme is ingeschakeld (sessies opslaan als bestanden), kan Tomcat elk bestand in de werkmap met een .session-extensie deserialiseren

Een aanvaller kan deze fouten combineren om een kwaadaardig geserialiseerd Java-object te uploaden, vermomd als gedeeltelijke upload, en vervolgens de deserialisatie ervan te triggeren door een URL op te vragen die Tomcat interpreteert als een sessie-lookup.

🚨 Publieke PoC binnen 30 uur

Ongeveer 30 uur na openbaarmaking van CVE-2025-24813 werd een werkende exploit op GitHub gepubliceerd. De aanval met twee verzoeken is triviaal eenvoudig te automatiseren, en binnen enkele dagen werden massale exploitatiecampagnes waargenomen. Elke ongepatchte, naar internet gerichte Tomcat-server met standaardconfiguratie moet als gecompromitteerd worden beschouwd.

Getroffen versies

Tomcat-versieGetroffen bereikGerepareerde versie
Apache Tomcat 11.x11.0.0-M1 tot 11.0.211.0.3+
Apache Tomcat 10.x10.1.0-M1 tot 10.1.3410.1.35+
Apache Tomcat 9.x9.0.0.M1 tot 9.0.989.0.99+

Vereisten voor RCE: beide voorwaarden moeten waar zijn:

Opmerking over vereisten: sommige bronnen meldden aanvankelijk strikte vereisten. Praktijkanalyse toonde echter aan dat bepaalde veelvoorkomende Tomcat-configuraties (waaronder sommige applicatieserverdistributies) aan beide voorwaarden voldoen. Patch ongeacht — de CVSS-score weerspiegelt de worst-case-situatie.

De aanval met twee verzoeken

# Request 1: Upload malicious serialized object as partial PUT
PUT /.xxxxx HTTP/1.1
Host: target.com
Content-Type: application/octet-stream
Content-Range: bytes 0-1233/1234
Content-Length: 1234

[serialized Java gadget chain payload — e.g., Commons Collections]

# Tomcat stores this as a temp file in work directory
# File name derived from URL: .xxxxx → stored as partial upload

# Request 2: Trigger deserialization via session lookup
GET /.xxxxx HTTP/1.1
Host: target.com
Cookie: JSESSIONID=.xxxxx

# Tomcat looks up session file matching the session ID
# Finds attacker's file → deserializes it → RCE

Waarom Tomcat een waardevol doelwit is

Apache Tomcat is een van de meest gebruikte Java-applicatieservers wereldwijd, gebruikt in:

Een RCE in Tomcat betekent vaak toegang tot databasecredentials, interne API's en gevoelige bedrijfsdata die wordt opgeslagen door de applicaties die erop draaien.

Detectie

# Check Tomcat version
/opt/tomcat/bin/version.sh
# or check catalina.jar manifest
unzip -p /opt/tomcat/lib/catalina.jar META-INF/MANIFEST.MF | grep Implementation-Version

# Check for suspicious partial PUT uploads in access logs
grep 'PUT' /opt/tomcat/logs/localhost_access_log.* | grep -v '200\|201\|204'
grep 'PUT.*Content-Range' /opt/tomcat/logs/localhost_access_log.*

# Check for unusual files in Tomcat work directory
find /opt/tomcat/work -name "*.session" -newer /opt/tomcat/conf/server.xml
find /opt/tomcat/work -type f -newer /opt/tomcat/conf/server.xml

# Check if default servlet write is enabled
grep -r "readonly" /opt/tomcat/conf/web.xml /opt/tomcat/webapps/

Mitigatie

  1. Patch onmiddellijk: upgrade naar Tomcat 9.0.99+, 10.1.35+ of 11.0.3+
  2. Schakel schrijven voor de default servlet uit (indien niet nodig):
    <servlet>
      <servlet-name>default</servlet-name>
      <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
      <init-param>
        <param-name>readonly</param-name>
        <param-value>true</param-value>  <!-- Ensure this is true -->
      </init-param>
    </servlet>
  3. Schakel bestandsgebaseerde sessiepersistentie uit: schakel over naar in-memory of database-sessiepersistentie
  4. Implementeer WAF-regels: blokkeer HTTP PUT-verzoeken met Content-Range-headers indien niet nodig
  5. Gebruik Java-deserialisatiefilters: configureer Java 9+ serialisatiefilters om deserialiseerbare klassen te beperken

KENSAI-detectiemogelijkheden

Vind uw blootgestelde Tomcat-servers voordat aanvallers dat doen

KENSAI identificeert elke Apache Tomcat-instantie in uw omgeving en test op CVE-2025-24813 en andere kritieke kwetsbaarheden in Java-applicatieservers.

Scan op Tomcat-kwetsbaarheden