ID | Technique | Tactic |
---|---|---|
T1190 | Exploit Public-Facing Application | Initial Access |
T1505.003 | Web Shell | Persistence |
Detection: Tomcat Session File Upload Attempt
Description
This detection identifies potential exploitation of CVE-2025-24813 in Apache Tomcat through the initial stage of the attack. This first phase occurs when an attacker attempts to upload a malicious serialized Java object with a .session file extension via an HTTP PUT request. When successful, these uploads typically result in HTTP status codes 201 (Created) or 409 (Conflict) and create the foundation for subsequent deserialization attacks by placing malicious content in a location where Tomcat's session management can access it.
Search
1
2| tstats count min(_time) as firstTime max(_time) as lastTime from datamodel=Web where Web.http_method=PUT AND Web.uri_path="*.session" AND (Web.status=201 OR Web.status=409) by Web.src, Web.dest, Web.http_user_agent, Web.uri_path, Web.status
3| `drop_dm_object_name("Web")`
4| rex field=uri_path "/(?<filename>[^/]+)\.session$"
5| eval severity="High"
6| `security_content_ctime(firstTime)`
7| `security_content_ctime(lastTime)`
8| `tomcat_session_file_upload_attempt_filter`
Data Source
Name | Platform | Sourcetype | Source |
---|---|---|---|
Nginx Access | N/A | 'nginx:plus:kv' |
'/var/log/nginx/access.log' |
Macros Used
Name | Value |
---|---|
security_content_ctime | convert timeformat="%Y-%m-%dT%H:%M:%S" ctime($field$) |
tomcat_session_file_upload_attempt_filter | search * |
tomcat_session_file_upload_attempt_filter
is an empty macro by default. It allows the user to filter out any results (false positives) without editing the SPL.
Annotations
Default Configuration
This detection is configured by default in Splunk Enterprise Security to run with the following settings:
Setting | Value |
---|---|
Disabled | true |
Cron Schedule | 0 * * * * |
Earliest Time | -70m@m |
Latest Time | -10m@m |
Schedule Window | auto |
Creates Risk Event | True |
Implementation
To successfully implement this search, you need to be ingesting logs from your web servers, proxies, or WAFs that process web traffic to Tomcat instances. The data must be mapped to the Web datamodel in the Web node. Ensure your web servers are logging HTTP PUT requests, including status codes and URI paths. This detection specifically looks for PUT requests targeting files with a .session extension that result in HTTP status codes 201 or 409, which indicate successful creation of files - a pattern consistent with the first stage of CVE-2025-24813 exploitation.
Known False Positives
Some legitimate applications might use PUT requests to create .session files, especially in custom implementations that leverage Tomcat's session persistence mechanism. Verify if the detected activity is part of a normal application flow or if it correlates with other suspicious behavior, such as subsequent GET requests with manipulated JSESSIONID cookies.
Associated Analytic Story
Risk Based Analytics (RBA)
Risk Message:
A Tomcat session file upload attempt has been detected from IP $src$ targeting $dest$ with a suspicious .session file. This could indicate the first stage of CVE-2025-24813 exploitation.
Risk Object | Risk Object Type | Risk Score | Threat Objects |
---|---|---|---|
dest | system | 70 | src |
References
-
https://lists.apache.org/thread/j5fkjv2k477os90nczf2v9l61fb0kkgq
-
https://github.com/vulhub/vulhub/tree/master/tomcat/CVE-2025-24813
-
https://www.rapid7.com/db/vulnerabilities/apache-tomcat-cve-2025-24813/
-
https://gist.github.com/MHaggis/e106367f6649fbb09ab27e7b4a01cf73
Detection Testing
Test Type | Status | Dataset | Source | Sourcetype |
---|---|---|---|---|
Validation | ✅ Passing | N/A | N/A | N/A |
Unit | ✅ Passing | Dataset | nginx |
nginx:plus:kv |
Integration | ✅ Passing | Dataset | nginx |
nginx:plus:kv |
Replay any dataset to Splunk Enterprise by using our replay.py
tool or the UI.
Alternatively you can replay a dataset into a Splunk Attack Range
Source: GitHub | Version: 1