CVE-2025-24813: Apache Tomcat Partial PUT RCE
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.
| Kenmerk | Waarde |
|---|---|
| CVE ID | CVE-2025-24813 |
| CVSS-vector | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-502: Deserialization of Untrusted Data |
| Gepubliceerd | 10 maart 2025 |
| Exploitatie | Actief — 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:
- De naam van het tijdelijke bestand wordt afgeleid van het upload-URL-pad, dat gedeeltelijk door de aanvaller gecontroleerd wordt
- 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.
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-versie | Getroffen bereik | Gerepareerde versie |
|---|---|---|
| Apache Tomcat 11.x | 11.0.0-M1 tot 11.0.2 | 11.0.3+ |
| Apache Tomcat 10.x | 10.1.0-M1 tot 10.1.34 | 10.1.35+ |
| Apache Tomcat 9.x | 9.0.0.M1 tot 9.0.98 | 9.0.99+ |
Vereisten voor RCE: beide voorwaarden moeten waar zijn:
- Schrijven ingeschakeld voor de default servlet (
readonly=false) — NIET de standaard; moet expliciet geconfigureerd zijn - Bestandsgebaseerde sessiepersistentie is geconfigureerd — OF partial-PUT-writes komen terecht in een pad dat toegankelijk is voor deserialisatie
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:
- Enterprise Java-webapplicaties
- Spring Boot-applicaties uitgerold als WAR-bestanden
- Legacy J2EE-applicaties
- Interne HR-, ERP- en bedrijfsapplicaties
- Cloud-native microservices
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
- Patch onmiddellijk: upgrade naar Tomcat 9.0.99+, 10.1.35+ of 11.0.3+
- 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> - Schakel bestandsgebaseerde sessiepersistentie uit: schakel over naar in-memory of database-sessiepersistentie
- Implementeer WAF-regels: blokkeer HTTP PUT-verzoeken met
Content-Range-headers indien niet nodig - Gebruik Java-deserialisatiefilters: configureer Java 9+ serialisatiefilters om deserialiseerbare klassen te beperken
KENSAI-detectiemogelijkheden
- Tomcat-versiedetectie: KENSAI fingerprint Apache Tomcat-versies via HTTP-headers, foutpagina's en standaardpaden op alle naar internet gerichte assets
- Veilige exploitatietest: bevestigt de exploiteerbaarheid van CVE-2025-24813 zonder payloads uit te voeren
- Configuratieaudit: controleert op de aanwezigheid van een schrijfbare default servlet en bestandsgebaseerde sessiepersistentie
- Interne ontdekking: vindt Tomcat-instanties die draaien op interne netwerken via agent- of netwerkscanning
- Geautomatiseerde hertest: bevestigt patchtoepassing na remediatie
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