SAP has released a patch for a vulnerability dubbed "Overpass" that carries the maximum possible CVSS score of 10.0. Onapsis, whose research team has a long track record of surfacing critical SAP flaws, is urging SAP customers to apply the fix immediately. When a vulnerability in the software that runs your ERP, supply chain, HR, and financial systems scores a perfect 10, the calculus is simple: this is an unauthenticated, remotely exploitable path to full system compromise, and every day of delay is exposure.
In my 15+ years of incident response, SAP compromises are among the most damaging engagements we work. Attackers who land on a NetWeaver application server don't just get a foothold — they get the keys to the business. SAP systems hold the crown jewels: financial data, PII, payroll, supplier relationships, and trusted connections into every adjacent system. Threat actors know this, and the window between SAP patch Tuesday and active exploitation has been shrinking with every critical release. Treat Overpass as a patch-now, hunt-now event.
Technical Analysis
What We Know
- Vulnerability name: "Overpass" (as named by Onapsis)
- Severity: CVSS v3/v4 score of 10.0 — Critical (maximum)
- Affected platform: SAP enterprise applications, with SAP NetWeaver-based landscapes being the primary concern for maximum-severity remotely exploitable issues of this class
- Source of disclosure: SAP security patch release, with Onapsis issuing an urgent advisory to customers
- Exploitation status: No public confirmation of in-the-wild exploitation at time of writing, but a CVSS 10.0 flaw in SAP software must be treated as pre-exploitation — historical precedent shows weaponization of critical SAP bugs follows disclosure rapidly, often within days
A CVSS 10.0 score has a specific technical meaning defenders should internalize: the vulnerability is network-exploitable (AV:N), low attack complexity (AC:L), requires no privileges (PR:N), requires no user interaction (UI:N), and results in total compromise of confidentiality, integrity, and availability. In practical terms, an attacker who can reach the vulnerable service over the network can take over the system without credentials and without any user clicking anything.
Why SAP Is a High-Value Target
SAP NetWeaver Application Server (both ABAP and Java stacks) exposes multiple HTTP-facing services — the Internet Communication Manager (ICM), the Java dispatcher, and various servlet endpoints. These components frequently run with high OS-level privileges (<sid>adm, SAPService<SID>, or root-adjacent service accounts) and sit at the center of the enterprise trust fabric. Post-exploitation on SAP typically follows a predictable pattern:
- Initial access via the vulnerable HTTP-facing component
- Web shell deployment — JSP files dropped into the Java server's web root or servlet execution on the ABAP stack
- OS command execution as the SAP service account via
sapstartsrv,jstart, ordisp+workchild processes - Credential harvesting from the SAP Secure Store, database connection strings, and OS-level secrets
- Lateral movement into the SAP database (HANA, Oracle, MSSQL) and adjacent domain infrastructure
The detection content below is built around catching steps 2 and 3 — the highest-fidelity, lowest-noise points in the chain — because even if patching is delayed, you must know whether someone got there first.
Detection & Response
Sigma Rules
The following rules target the most reliable post-exploitation behaviors seen in SAP application server compromises: SAP Java/ABAP processes spawning shells, and web shell files appearing in SAP web directories. These are high-fidelity in properly baselined environments — SAP server processes should essentially never spawn interactive command interpreters.
---
title: SAP Application Server Process Spawning Shell or Script Interpreter
id: 3f8a2c14-7b9d-4e61-a2c3-9d5f7e1a4b82
status: experimental
description: Detects SAP NetWeaver server processes (jstart, sapstartsrv, disp+work, icman) spawning command shells or script interpreters, a strong indicator of web shell or RCE post-exploitation activity following compromise of an HTTP-facing SAP component such as the Overpass vulnerability.
references:
- https://www.infosecurity-magazine.com/news/sap-patches-maximum-severity/
- https://attack.mitre.org/techniques/T1059/
- https://attack.mitre.org/techniques/T1505/003/
author: Security Arsenal
date: 2026/04/06
tags:
- attack.execution
- attack.t1059
- attack.persistence
- attack.t1505.003
logsource:
category: process_creation
product: windows
detection:
selection_parent:
ParentImage|endswith:
- '\jstart.exe'
- '\sapstartsrv.exe'
- '\disp+work.exe'
- '\icman.exe'
- '\jlaunch.exe'
- '\gwrd.exe'
selection_child:
Image|endswith:
- '\cmd.exe'
- '\powershell.exe'
- '\pwsh.exe'
- '\wscript.exe'
- '\cscript.exe'
- '\mshta.exe'
- '\rundll32.exe'
- '\wmic.exe'
- '\certutil.exe'
- '\bitsadmin.exe'
condition: selection_parent and selection_child
falsepositives:
- Rare SAP administrative startup scripts executed under the SAP service context during maintenance windows - baseline and exclude known management tooling
level: critical
---
title: Web Shell File Created in SAP Java Server Web Directory
id: 9c1e5d27-4a6b-48f3-b7d2-2e8c6f3a1d95
status: experimental
description: Detects creation of JSP, JS, or script files in SAP NetWeaver AS Java web application directories outside of deployment activity, consistent with web shell deployment after exploitation of a critical SAP vulnerability such as Overpass.
references:
- https://www.infosecurity-magazine.com/news/sap-patches-maximum-severity/
- https://attack.mitre.org/techniques/T1505/003/
author: Security Arsenal
date: 2026/04/06
tags:
- attack.persistence
- attack.t1505.003
logsource:
category: file_event
product: windows
detection:
selection_path:
TargetFilename|contains:
- '\usr\sap\'
- '\SAP\J2EE\'
- '\j2ee\cluster\'
- '\servlet_jsp\'
- '\webapps\'
selection_ext:
TargetFilename|endswith:
- '.jsp'
- '.jspx'
- '.war'
- '.class'
filter_deploy_user:
User|contains:
- 'deploysvc'
- 'SAPService'
condition: selection_path and selection_ext and not filter_deploy_user
falsepositives:
- Legitimate application deployments via SAP deployment tools - correlate with change management records and deployment windows
level: high
---
title: SAP Service Account Executing Reconnaissance or Credential Access Commands
id: 5d2b7f38-1c4e-4a92-c6e1-8f3a9b2d7e46
status: experimental
description: Detects SAP service accounts (SIDadm, SAPServiceSID) executing discovery, credential access, or download commands, indicating post-exploitation hands-on-keyboard activity after compromise of an SAP application server.
references:
- https://www.infosecurity-magazine.com/news/sap-patches-maximum-severity/
- https://attack.mitre.org/techniques/T1033/
- https://attack.mitre.org/techniques/T1003/
author: Security Arsenal
date: 2026/04/06
tags:
- attack.discovery
- attack.credential_access
- attack.t1033
- attack.t1003
logsource:
category: process_creation
product: windows
detection:
selection_user:
User|contains:
- 'adm'
- 'SAPService'
selection_cmd:
CommandLine|contains:
- 'whoami'
- 'net user'
- 'net group'
- 'net localgroup'
- 'nltest'
- 'ipconfig /all'
- 'lsadump'
- 'sekurlsa'
- 'vssadmin delete shadows'
- 'reg save hklm\sam'
- 'reg save hklm\system'
- 'Invoke-WebRequest'
- 'curl.exe'
- 'certutil -urlcache'
condition: selection_user and selection_cmd
falsepositives:
- SAP Basis administrators performing legitimate maintenance under service accounts - tune against known admin accounts and maintenance windows
level: high
A note on tuning: Rule 1 is the crown jewel — in a healthy SAP environment, jstart.exe or disp+work.exe spawning cmd.exe is a near-certain indicator of compromise. Rules 2 and 3 require baselining against your change management calendar, but the signal-to-noise ratio is acceptable for a landscape actively targeted by a CVSS 10.0 flaw. Deploy all three to SAP application servers today, even in detect-only mode.
KQL Hunt (Microsoft Sentinel / Defender)
Assuming SAP application servers are onboarded to Defender for Endpoint (strongly recommended — MDE supports Windows and Linux SAP hosts), this query hunts the full post-exploitation chain: SAP server processes spawning interpreters, followed by network or file activity. For environments forwarding SAP host logs via Syslog/CEF, a secondary query targets shell execution in SAP log context.
// Hunt 1: SAP NetWeaver server processes spawning shells or LOLBins (Windows + Linux via MDE)
let SapParentProcesses = dynamic(["jstart.exe", "sapstartsrv.exe", "disp+work.exe", "icman.exe", "jlaunch.exe", "gwrd.exe", "sapstartsrv", "jstart", "disp+work", "icman"]);
let SuspiciousChildren = dynamic(["cmd.exe", "powershell.exe", "pwsh.exe", "wscript.exe", "cscript.exe", "mshta.exe", "rundll32.exe", "wmic.exe", "certutil.exe", "bitsadmin.exe", "sh", "bash", "dash", "python", "perl", "curl", "wget", "nc", "ncat"]);
DeviceProcessEvents
| where TimeGenerated > ago(14d)
| where InitiatingProcessFileName has_any (SapParentProcesses)
| where FileName has_any (SuspiciousChildren)
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine,
FileName, ProcessCommandLine, AccountName, AccountDomain, ProcessId, InitiatingProcessId, SHA256
| sort by TimeGenerated desc;
// Hunt 2: Script file creation in SAP directories by non-deployment accounts
DeviceFileEvents
| where TimeGenerated > ago(14d)
| where FolderPath has_any ("\\usr\\sap\\", "j2ee\\cluster", "servlet_jsp", "webapps", "/usr/sap/")
| where FileName endswith_any (".jsp", ".jspx", ".war", ".class", ".php", ".sh")
| where ActionType in ("FileCreated", "FileModified", "FileRenamed")
| where InitiatingProcessAccountName !contains "deploy"
| project TimeGenerated, DeviceName, FolderPath, FileName, ActionType,
InitiatingProcessFileName, InitiatingProcessCommandLine, InitiatingProcessAccountName, SHA256
| sort by TimeGenerated desc;
// Hunt 3: Outbound connections from SAP server processes to rare external destinations
DeviceNetworkEvents
| where TimeGenerated > ago(14d)
| where InitiatingProcessFileName has_any ("jstart.exe", "sapstartsrv.exe", "disp+work.exe", "icman.exe", "java.exe", "jstart", "disp+work")
| where RemoteIPType == "Public"
| where RemoteUrl !has_any ("sap.com", "microsoft.com") // tune: add known SAP support/update endpoints
| summarize ConnectionCount = count(), FirstSeen = min(TimeGenerated), LastSeen = max(TimeGenerated)
by DeviceName, InitiatingProcessFileName, RemoteIP, RemoteUrl, RemotePort
| where ConnectionCount < 50 // rare destinations surface C2 over routine SAP chatter
| sort by FirstSeen asc;
Run Hunt 1 across the last 14–30 days on every SAP application server. If you get hits, you are no longer in patch-management mode — you are in incident-response mode. Isolate the host, capture memory, and pull the web access logs (ICM/HTTP logs and Java default trace) before any remediation wipes evidence.
Velociraptor VQL
For DFIR triage of SAP hosts — whether validating pre-patch exposure or scoping a suspected compromise — this artifact enumerates suspicious child processes of SAP services and inventories recently created script files in SAP web directories:
-- SAP Post-Exploitation Triage: web shells and shell spawns from SAP server processes
-- Deploy against SAP NetWeaver application servers (Windows and Linux)
LET sap_procs = pslist()
WHERE Name =~ '(?i)(jstart|sapstartsrv|disp\+work|icman|jlaunch|gwrd|java)'
LET suspicious_children = SELECT Pid, Ppid, Name, CommandLine, Exe, Username, CreateTime
FROM pslist()
WHERE Ppid in (SELECT Pid FROM sap_procs)
AND Name =~ '(?i)(cmd|powershell|pwsh|wscript|cscript|mshta|rundll32|wmic|certutil|sh|bash|dash|python|perl|curl|wget|nc)'
LET webshell_files = SELECT FullPath, Size, Mtime, Atime, Ctime
FROM glob(globs=[
'C:/usr/sap/**/*.jsp',
'D:/usr/sap/**/*.jsp',
'/usr/sap/**/*.jsp',
'/usr/sap/**/servlet_jsp/**',
'/usr/sap/**/webapps/**/*.war'
])
WHERE Mtime > now() - 2592000 -- modified within last 30 days
SELECT 'suspicious_child_process' AS Artifact, Pid AS PID, Ppid AS ParentPID,
Name AS ProcessName, CommandLine AS CmdLine, Username AS User,
CreateTime AS Created, NULL AS FilePath, NULL AS FileModified
FROM suspicious_children
UNION ALL
SELECT 'recent_script_file' AS Artifact, NULL AS PID, NULL AS ParentPID,
NULL AS ProcessName, NULL AS CmdLine, NULL AS User, NULL AS Created,
FullPath AS FilePath, Mtime AS FileModified
FROM webshell_files
ORDER BY FileModified DESC
Any JSP file in the web root with an Mtime that doesn't align to a documented deployment is a finding. Hash it, preserve it, and diff it against known-good SAP application content.
Verification & Hardening Script
Use the following to enumerate SAP instances on a host, check for recently dropped web content (a quick triage for pre-patch compromise), and confirm SAP kernel/patch state for change records. Run as root or the <sid>adm account.
#!/bin/bash
# SAP Overpass Exposure Triage - run on each NetWeaver application server
# Collects: SAP instances, recent web content drops, listening services
echo "=== SAP Instance Inventory ==="
ls -d /usr/sap/*/* 2>/dev/null | grep -E '(J[0-9]+|D[0-9]+|DVEBMGS[0-9]+|ASCS[0-9]+)' || echo "No SAP instances found in /usr/sap"
echo ""
echo "=== SAP Kernel / Patch Level (run disp+work -v per instance for full detail) ==="
find /usr/sap -name "disp+work" -type f 2>/dev/null | while read -r dw; do
echo "--- $dw ---"
"$dw" -v 2>/dev/null | grep -iE "kernel|patch|release" | head -5
done
echo ""
echo "=== JSP/WAR files modified in last 30 days under /usr/sap (potential web shells) ==="
find /usr/sap -type f \( -name "*.jsp" -o -name "*.jspx" -o -name "*.war" \) -mtime -30 2>/dev/null -exec ls -la {} \;
echo ""
echo "=== Recently modified scripts/executables in SAP temp and work dirs ==="
find /usr/sap -type f \( -name "*.sh" -o -name "*.py" -o -name "*.pl" \) -mtime -14 2>/dev/null | head -50
echo ""
echo "=== SAP services listening (ICM/HTTP exposure check) ==="
ss -tlnp 2>/dev/null | grep -iE 'sap|jstart|disp|icman|java' || netstat -tlnp 2>/dev/null | grep -iE 'sap|jstart|disp|icman|java'
echo ""
echo "=== HTTP(S) ports exposed - confirm these are NOT reachable from untrusted networks ==="
ss -tlnp 2>/dev/null | grep -E ':(80[0-9][0-9]|44[0-9][0-9]|5[0-9][0-9][0-9]|32[0-9][0-9]|36[0-9][0-9])'
echo ""
echo "=== Child processes of SAP daemons (live shell-spawn check) ==="
for pid in $(pgrep -f 'jstart|sapstartsrv|disp\+work|icman'); do
children=$(ps --ppid "$pid" -o pid,comm,args 2>/dev/null | grep -iE 'sh|bash|python|perl|curl|wget|nc')
[ -n "$children" ] && echo "ALERT - SAP PID $pid spawned: $children"
done
echo "Triage complete."
The ALERT lines from the final check warrant immediate escalation. Everything else feeds your exposure assessment and change documentation.
Remediation
-
Apply the SAP security patch immediately. Pull the current month's SAP Security Patch Day notes from the SAP Security Notes portal and the Onapsis advisory covering Overpass. Follow your SAP Note implementation process via SNOTE or the relevant support package for the affected component. Do not wait for the next maintenance window — a CVSS 10.0 in SAP justifies emergency change procedures.
-
Hunt before and after patching. Patching closes the door; it does not evict anyone already inside. Run the Sigma rules, KQL hunts, and VQL triage above across all SAP application servers covering at least the last 30 days before you consider this closed.
-
Reduce network exposure now. SAP HTTP-facing services (ICM on 80xx/44xx, Java dispatcher, message server 36xx/39xx) should never be reachable from the internet or broad user subnets. Enforce ACLs/firewall rules restricting access to known application gateways, and verify externally with a scan. If the vulnerable component is not required, disable the service per SAP's guidance in the security note.
-
Rotate credentials if compromise is suspected. SAP Secure Store entries, database connection users,
<sid>adm/SAPService account passwords, and any credentials stored in destination configurations should be rotated after a confirmed or strongly suspected compromise. -
Enable and centralize logging. Ensure SAP Security Audit Log (SM19/RSAU), ICM HTTP access logs, and Java default traces are enabled and shipped to your SIEM. Retrospective hunts are impossible without this telemetry — this is the most common gap we find in SAP IR engagements.
-
Track in your vulnerability program. Log Overpass as a critical-severity finding with an emergency SLA (24–72 hours to patch), document compensating controls for any system that cannot be patched immediately, and require sign-off for any exception. CISA and vendor guidance consistently treat maximum-severity, remotely exploitable ERP flaws as top-priority remediation items.
-
Add SAP to your continuous threat exposure management scope. SAP landscapes are chronically under-monitored relative to their business criticality. If your MDR or SOC doesn't have SAP-specific detections deployed, use this event as the forcing function to close that gap.
The bottom line: a 10.0 is not a score SAP or Onapsis assigns casually. Patch on an emergency timeline, hunt for pre-patch compromise, and lock down network paths to your SAP attack surface — in that order, starting today.
Related Resources
Security Arsenal Penetration Testing Services AlertMonitor Platform Book a SOC Assessment vulnerability-management Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.