Detection rules › Splunk
SAP NetWeaver Visual Composer Exploitation Attempt
Detects potential exploitation attempts targeting CVE-2025-31324, a critical unauthenticated file upload vulnerability in SAP NetWeaver Visual Composer. This flaw allows remote attackers to send specially crafted POST requests to the /developmentserver/metadatauploader endpoint, enabling arbitrary file uploads—commonly webshells—resulting in full system compromise. The detection looks for HTTP HEAD or POST requests with a 200 OK status to sensitive Visual Composer endpoints, which may indicate reconnaissance or active exploitation. Successful exploitation can lead to attackers gaining privileged access, deploying malware, and impacting business-critical SAP resources. Immediate patching and investigation of suspicious activity are strongly recommended, as this vulnerability is being actively exploited in the wild.
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Initial Access | T1190 Exploit Public-Facing Application |
Rule body splunk
name: SAP NetWeaver Visual Composer Exploitation Attempt
id: a583b9f1-9c3a-4402-9441-b981654dea6c
version: 5
creation_date: '2025-04-28'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: Hunting
description: |-
Detects potential exploitation attempts targeting CVE-2025-31324, a critical unauthenticated file upload vulnerability in SAP NetWeaver Visual Composer.
This flaw allows remote attackers to send specially crafted POST requests to the /developmentserver/metadatauploader endpoint, enabling arbitrary file uploads—commonly webshells—resulting in full system compromise.
The detection looks for HTTP HEAD or POST requests with a 200 OK status to sensitive Visual Composer endpoints, which may indicate reconnaissance or active exploitation.
Successful exploitation can lead to attackers gaining privileged access, deploying malware, and impacting business-critical SAP resources.
Immediate patching and investigation of suspicious activity are strongly recommended, as this vulnerability is being actively exploited in the wild.
data_source:
- Suricata
search: |-
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Web.Web WHERE
Web.url IN (
"*/ctc/CTCWebService/CTCWebServiceBean",
"*/CTCWebService/CTCWebServiceBean",
"*/VisualComposer/services/DesignTimeService"
)
Web.http_method IN ("HEAD", "POST")
Web.status=200
BY Web.src Web.dest Web.http_method
Web.url Web.http_user_agent Web.url_length
| `drop_dm_object_name("Web")`
| eval action=case(
http_method="HEAD", "Recon/Probe",
http_method="POST", "Possible Exploitation"
)
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| table firstTime lastTime src dest http_method
action url user_agent url_length
| `sap_netweaver_visual_composer_exploitation_attempt_filter`
how_to_implement: |-
Ensure that the Web data model is accelerated and populated with web server or web proxy logs capturing HTTP request and response data.
This search relies on HTTP method, status code, and URL path fields to identify suspicious access patterns against SAP NetWeaver endpoints.
known_false_positives: |-
Some legitimate administrative activity may access SAP NetWeaver services. However, HEAD or POST requests directly resulting in a 200 OK
to Visual Composer endpoints are uncommon and should be investigated carefully.
references:
- https://onapsis.com/blog/active-exploitation-of-sap-vulnerability-cve-2025-31324/
- https://reliaquest.com/blog/threat-spotlight-reliaquest-uncovers-vulnerability-behind-sap-netweaver-compromise/
- https://www.rapid7.com/blog/post/2025/04/28/etr-active-exploitation-of-sap-netweaver-visual-composer-cve-2025-31324/
analytic_story:
- SAP NetWeaver Exploitation
asset_type: Web Server
cve:
- CVE-2025-31324
mitre_attack_id:
- T1190
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: web
security_domain: network
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1190/sap/suricata_sapnetweaver.log
sourcetype: suricata
source: not_applicable
test_type: unit
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Web.Web WHERE
Web.url IN (
"*/ctc/CTCWebService/CTCWebServiceBean",
"*/CTCWebService/CTCWebServiceBean",
"*/VisualComposer/services/DesignTimeService"
)
Web.http_method IN ("HEAD", "POST")
Web.status=200
BY Web.src Web.dest Web.http_method
Web.url Web.http_user_agent Web.url_length
Stage 2: search
| `drop_dm_object_name("Web")`
Stage 3: eval
| eval action=case(
http_method="HEAD", "Recon/Probe",
http_method="POST", "Possible Exploitation"
)
action =http_method = "HEAD""Recon/Probe""Possible Exploitation"Stage 4: search
| `security_content_ctime(firstTime)`
Stage 5: search
| `security_content_ctime(lastTime)`
Stage 6: table
| table firstTime lastTime src dest http_method
action url user_agent url_length
Stage 7: search
| `sap_netweaver_visual_composer_exploitation_attempt_filter`
Indicators
Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.
| Field | Kind | Values |
|---|---|---|
Web.http_method | in |
|
Web.status | eq |
|
Web.url | in |
|