CVE-2025-24813
Apache Tomcat: Potential RCE and/or information disclosure and/or information corruption with partial PUT
Description
Path Equivalence: 'file.Name' (Internal Dot) leading to Remote Code Execution and/or Information disclosure and/or malicious content added to uploaded files via write enabled Default Servlet in Apache Tomcat.
This issue affects Apache Tomcat: from 11.0.0-M1 through 11.0.2, from 10.1.0-M1 through 10.1.34, from 9.0.0.M1 through 9.0.98. The following versions were EOL at the time the CVE was created but are known to be affected: 8.5.0 though 8.5.100. Other, older, EOL versions may also be affected.
If all of the following were true, a malicious user was able to view security sensitive files and/or inject content into those files: - writes enabled for the default servlet (disabled by default)
- support for partial PUT (enabled by default)
- a target URL for security sensitive uploads that was a sub-directory of a target URL for public uploads - attacker knowledge of the names of security sensitive files being uploaded - the security sensitive files also being uploaded via partial PUT
If all of the following were true, a malicious user was able to perform remote code execution:
- writes enabled for the default servlet (disabled by default) - support for partial PUT (enabled by default) - application was using Tomcat's file based session persistence with the default storage location - application included a library that may be leveraged in a deserialization attack
Users are recommended to upgrade to version 11.0.3, 10.1.35 or 9.0.99, which fixes the issue.
Response & Mitigation
Why act now?
Prioritisation rationale
CVE-2025-24813 scores CVSS 9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) and sits at the 100th EPSS percentile, meaning the empirical exploitation probability is at the absolute ceiling of the scoring model. The attack requires no authentication and no user interaction, making it trivially weaponisable at scale against any internet-exposed Tomcat instance where Default Servlet writes have been enabled. The chaining potential with CVE-2026-34486 further broadens the attack surface. Organisations running Tomcat as middleware for customer-facing applications, Oracle Communications platforms, or internal CI/CD pipelines should treat this as a P1 incident; NIS2-regulated entities in the telecommunications and utilities sectors face particular exposure given the Oracle Communications product list. CISA has not confirmed ransomware campaign use, but unauthenticated RCE with full confidentiality, integrity, and availability impact meets the threshold for mandatory incident reporting under NIS2 Article 23 if exploitation is confirmed.
Runbook · Step 1
Immediate response (0-24 h)
- Apply the vendor patch first: Upgrade Apache Tomcat to 11.0.3, 10.1.35, or 9.0.99 immediately. EOL 8.5.x instances must be migrated to a supported branch or isolated — no patch exists for that branch. Confirm availability at https://tomcat.apache.org/security.html.
- Disable Default Servlet write access: In the Default Servlet's
web.xml, verify that thereadonlyinit-parameter is set totrue(the default). If it has been explicitly set tofalsein any deployment descriptor, revert it and restart Tomcat. This removes the primary precondition for exploitation. - Disable partial PUT: Set the
allowPartialPutinit-parameter tofalseinweb.xmlunless there is a documented operational requirement. This severs the attack chain even before patching. - Address the RCE path via session deserialization: If
PersistentManagerwithFileStoreand the default storage location is in use, disable file-based session persistence or migrate to a database-backed store to eliminate the deserialization RCE vector. - Inventory Oracle Communications instances: Identify all affected Oracle products (Communications 9.0.x, 10.x, 15.x, 22.x, 24.x, 46.x) and check Oracle's support portal for product-specific patch IDs — patch identifiers are not available in the upstream advisory.
- Harden network perimeter around unpatched instances: Block direct internet access to Tomcat HTTP/HTTPS ports (default 8080/8443) and place instances behind a WAF or reverse proxy with strict method filtering until the patch is deployed.
Runbook · Step 2
Mitigation layers
- WAF rule — block partial PUT: Drop or restrict HTTP
PUTrequests carrying aContent-Rangeheader on all public-facing Tomcat endpoints. Snort signature example:alert tcp any any -> $TOMCAT_SERVERS [8080,8443] (msg:"CVE-2025-24813 Partial PUT attempt"; flow:to_server,established; content:"PUT "; depth:4; content:"Content-Range"; http_header; sid:9000001; rev:1;). - IPS — Java deserialization payload detection: Alert on Java serialization magic bytes (
AC ED 00 05) appearing in PUT request bodies destined for Tomcat ports; block where policy permits. - Least-privilege process hardening: Run the Tomcat service under a dedicated, non-privileged OS account. Restrict write permissions on
work/and the session storage directory to that account only, limiting post-exploitation impact. - Separate upload directories: Ensure public upload paths are not parent directories of security-sensitive upload targets — this directly removes one of the preconditions described in the CVE.
- Enable Java serialization filters: Configure JEP 290 (
jdk.serialFilter) to reject known dangerous classes (e.g., Commons Collections, Spring gadget chains) as a defence-in-depth measure while the patch is being scheduled. - Increase servlet-level logging: Configure Tomcat's Access Log Valve to record HTTP method, full URI, and request headers including
Content-RangeandContent-Type— this is a prerequisite for the detection rules below.
Runbook · Step 3
Detection rules
- Web access log — partial PUT detection: Search for
PUTrequests containing aContent-Rangeheader. SPL:index=webserver sourcetype=tomcat_access method=PUT | search headers="*Content-Range*" | stats count by src_ip, uri_path. - Filesystem — suspicious session files: Use auditd to watch for writes to the Tomcat session storage directory:
auditctl -w /opt/tomcat/work -p w -k tomcat_session_write. Investigate any.sessionfiles whose first bytes areAC ED 00 05(Java serialized object magic). - Sysmon EID 1 / EID 11 — post-exploitation process spawn: Alert on
java.exe(orjava) spawning unexpected child processes. Sigma shape:EventID: 1 | ParentImage|endswith: 'java.exe' | Image|endswith: ['cmd.exe','sh','bash','powershell.exe']. This indicates successful RCE via deserialization. - Network telemetry (Zeek/Suricata) — outbound beacon after PUT: Correlate inbound PUT requests to Tomcat with outbound connections from the same host to unknown external IPs within a short time window — a strong indicator of reverse-shell or C2 activity. Zeek filter:
http.method == "PUT" && "Content-Range" in http.request_headers. - SIEM correlation — information disclosure pattern: Flag sequences where GET requests for paths that were recently uploaded via PUT originate from the same source IP — a potential indicator of file exfiltration following a successful upload injection.
Metrics
Weakness classes (CWE)
CWE-44Variant
Path Equivalence: 'file.name' (Internal Dot)
The product accepts path input in the form of internal dot ('file.ordir') without appropriate validation, which can lead to ambiguous path resolution and allow an attacker to traverse the file system to unintended locations or access arbitrary files.
cwe.mitre.org →CWE-502Base
Deserialization of Untrusted Data
The product deserializes untrusted data without sufficiently ensuring that the resulting data will be valid.
cwe.mitre.org →
Affected operating systems
linux
debian / debian_linux11.0
other
netapp / bootstrap_os
Affected products
Products and version ranges extracted from the vendor/CERT advisory. A range like „<4.14.6“ implies the update recommendation „upgrade to 4.14.6 or later“.
bitnami
tomcat10.0.0
bitnami
tomcat11.0.0
Public exploit references
Public proof-of-concepts and detection templates for this vulnerability. Maturity ranges from reported PoCs through working detection scripts up to fully weaponized exploit modules. NEOSEC mirrors the code internally for forensic analysis; externally we only link to the original sources.
References & sources
- https://nvd.nist.gov/vuln/detail/CVE-2025-24813advisory
- https://github.com/apache/tomcat/commit/0a668e0c27f2b7ca0cc7c6eea32253b9b5ecb29cweb
- https://github.com/apache/tomcat/commit/eb61aade8f8daccaecabf07d428b877975622f72web
- https://github.com/apache/tomcat/commit/f6c01d6577cf9a1e06792be47e623d36acc3b5dcweb
- https://github.com/absholi7ly/POC-CVE-2025-24813/blob/main/README.mdweb
- https://github.com/apache/tomcatpackage
- https://lists.apache.org/thread/j5fkjv2k477os90nczf2v9l61fb0kkgqweb
- https://lists.debian.org/debian-lts-announce/2025/04/msg00003.htmlweb
- https://security.netapp.com/advisory/ntap-20250321-0001web
- https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2025-24813web
- https://www.vicarius.io/vsociety/posts/cve-2025-24813-detect-apache-tomcat-rceweb
- https://www.vicarius.io/vsociety/posts/cve-2025-24813-mitigate-apache-tomcat-rceweb
- https://www.vicarius.io/vsociety/posts/cve-2025-24813-tomcat-detect-vulnerabilityweb
- https://www.vicarius.io/vsociety/posts/cve-2025-24813-tomcat-mitigation-vulnerabilityweb
- http://www.openwall.com/lists/oss-security/2025/03/10/5web
- https://security.netapp.com/advisory/ntap-20250321-0001/