Detection rules › Splunk

SAP NetWeaver Visual Composer Exploitation Attempt

Status
production
Group by
Web.src, Web.url_length, c-uri, c-useragent, cs-host, cs-method
Author
Michael Haag, Splunk
Source
github.com/splunk/security_content

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

TacticTechniques
Initial AccessT1190 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 =
ifhttp_method = "HEAD""Recon/Probe"
else"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.

FieldKindValues
Web.http_methodin
  • "HEAD"
  • "POST"
Web.statuseq
  • 200
Web.urlin
  • "*/CTCWebService/CTCWebServiceBean"
  • "*/VisualComposer/services/DesignTimeService"
  • "*/ctc/CTCWebService/CTCWebServiceBean"