
TL;DR
Krytyczna podatność deserializacji w SAP NetWeaver AS Java (RMI‑P4) pozwala nieautoryzowanemu napastnikowi zdalnie wykonać dowolne komendy systemowe przez wysłanie złośliwych obiektów Java na otwarty port P4 (5NN04/50004). Należy załatać wg not SAP #3634501 oraz wdrożyć dodatkowe filtrowanie deserializacji JVM wg #3660659, a także ograniczyć ekspozycję portu P4 tylko do zaufowanych sieci. Brak publicznych dowodów eksploatacji/PoC w momencie publikacji dostawców, ale ryzyko jest maksymalne (CVSS 10).
Krótka definicja techniczna
CVE‑2025‑42944 to błąd deserializacji niezaufanych obiektów Java w module RMI‑P4 SAP NetWeaver AS Java. Wystawiony port P4 (np. 50004) przyjmuje obiekty, które po zdeserializowaniu mogą uruchomić dowolny kod/komendy OS w kontekście procesu aplikacyjnego — bez uwierzytelnienia.
Gdzie występuje / przykłady platform
- Windows / Linux: serwery z SAP NetWeaver AS Java (procesy java, jstart, sapstartsrv).
- AD / ESXi: pośrednio — jeżeli hosty SAP są członkiem domeny/VM; wektor RMI‑P4 pozostaje usługą aplikacyjną.
- Chmury (AWS/Azure/GCP): NetWeaver na IaaS — krytyczne są Security Groups/NSG, które mogą otworzyć 5NN04 na świat.
- Kubernetes: rzadkie, ale jeżeli AS Java działa w kontenerze, zagrożeniem jest Service/LoadBalancer/NodePort wystawiający 5NN04.
- M365: brak bezpośredniego wpływu; telemetryka MDE może pomóc w detekcji skutków (procesy).
Porty P4/P4S/P4HTTP zgodnie z dokumentacją SAP.
Szczegółowy opis techniki (jak działa, cele, dlaczego skuteczna)
RMI‑P4 to protokół zdalnych wywołań w AS Java. Usługa nasłuchuje na porcie 5NN04 (np. 50004) i obsługuje obiekty Java przesyłane do deserializacji. W CVE‑2025‑42944 brak adekwatnej walidacji powoduje, iż przesłany złośliwy obiekt (tzw. gadget chain) zostaje zdeserializowany, co może zakończyć się wykonaniem komend systemowych (np. powłoki), skutkując pełnym naruszeniem C/I/A aplikacji. SAP wydał poprawkę (#3634501) oraz późniejsze zalecenia utwardzające z #3660659 — w tym zastosowanie JVM‑wide jdk.serialFilter dla klas dozwolonych/blokowanych, co ogranicza powierzchnię gadgetów.
Uwaga kontekstowa: niektóre źródła branżowe raportowały brak obserwacji PoC/eksploatacji w czasie publikacji, ale historycznie luki RCE w SAP są gwałtownie weaponizowane po ujawnieniu poprawek. Priorytet: patch + segmentacja + filtracja P4.
Artefakty i logi
| SAP AS Java defaultTrace.* / logi RMI | Błędy RMI‑P4, nieudane żądania, przeciążenia kolejki | com.sap.engine.services.rmi_p4.* | Wpisy o przetwarzaniu żądań P4, błędach połączeń, anomalie kolejki | Przykładowe komunikaty RMI‑P4 potwierdza KBA SAP (P4/50004, kolejka). |
| Windows Security | Tworzenie procesów po udanej RCE | 4688 | Rodzic: java.exe/jstart.exe/sapstartsrv.exe → Dziecko: cmd.exe/powershell.exe/wscript.exe | Korelować z czasem ruchu na P4 |
| Sysmon | Start procesu / sieć | 1, 3, 10 | ParentImage jak wyżej; połączenia z/do *:5NN04 | |
| Linux auditd | execve/fork potomków Javy | type=EXECVE | ppid/exe = java/jstart/sapstartsrv + sh/bash | |
| Zeek / FW | Ruch przychodzący na P4 | dest_port | 50004–59904 i końcówka …04 (wzorzec 5NN04) | Segmentacja i allowlista źródeł |
| AWS CloudTrail | Zmiany SG otwierające P4 | AuthorizeSecurityGroupIngress/Egress, CreateSecurityGroup | toPort w [50004..59904] (w przybliżeniu wzorzec 5NN04) | Wykrywa „otwarcie świata” na P4 w chmurze |
| K8s audit | Wystawienie P4 z klastra | create/patch Service/Ingress | spec.ports.port: 5NN04 / nodePort kończący się …04 | Jeśli NetWeaver w kontenerach |
| M365 Unified Audit Log | – | – | [brak zastosowania] | Detekcja skutków via MDE (telemetria endpoint) |
Detekcja (praktyczne reguły)
Sigma (Windows – proces potomny od Javy/SAP)
title: SAP NetWeaver AS Java -> podejrzany interpreter poleceń (CVE-2025-42944) id: 4c7b3c8b-7b5f-4f5f-9f1a-jnr-p4-rce status: experimental description: Wykrywa uruchomienie cmd/PowerShell przez procesy java/jstart/sapstartsrv (skutek RMI-P4 RCE). references: - https://nvd.nist.gov/vuln/detail/CVE-2025-42944 - https://onapsis.com/blog/sap-security-patch-day-october-2025/ logsource: product: windows category: process_creation detection: parent_java: ParentImage|endswith: - '\java.exe' - '\jstart.exe' - '\sapstartsrv.exe' child_shell: Image|endswith: - '\cmd.exe' - '\powershell.exe' - '\wscript.exe' - '\cscript.exe' condition: parent_java and child_shell fields: - Image - CommandLine - ParentImage - ParentCommandLine - User falsepositives: - Rzadkie zadania serwisowe/upgrade AS Java wywołujące skrypty systemowe level: high tags: - attack.t1059 - attack.t1190 - attack.t1210Wariant Linux/auditd (skrót):
logsource: product: linux service: auditd detection: parent_java: selection where exe endswith "java" or "jstart" or "sapstartsrv" child_shell: selection where a0 in ("sh","bash","zsh","ksh") condition: parent_java and child_shellSplunk (SPL)
A. Proces potomny od Javy/SAP (Win Security 4688 lub Sysmon 1)
(index=win* (sourcetype=WinEventLog:Security EventCode=4688) OR (sourcetype=XmlWinEventLog:Microsoft-Windows-Sysmon/Operational EventCode=1)) | eval parent=coalesce(ParentImage, ParentProcessName) | eval child=coalesce(Image, NewProcessName) | where match(lower(parent), "(\\\\|/)java\\.exe$|(\\\\|/)jstart\\.exe$|(\\\\|/)sapstartsrv\\.exe$") AND match(lower(child), "(\\\\|/)cmd\\.exe$|(\\\\|/)powershell\\.exe$|(\\\\|/)wscript\\.exe$|(\\\\|/)cscript\\.exe$") | stats count min(_time) max(_time) values(CommandLine) by host parent child userB. Połączenia przychodzące na P4 (Zeek/FW)
(index=net* OR index=zeek* OR index=firewall*) | eval port_str=tostring(dest_port) | where dest_port>=50004 AND dest_port<=59904 AND like(port_str,"%04") | stats dc(src_ip) as uniq_src count by dest_ip dest_port | sort - countKQL (Microsoft Defender/Defender for Cloud)
A. Proces potomny od Javy/SAP
DeviceProcessEvents | where InitiatingProcessFileName in~ ("java.exe","jstart.exe","sapstartsrv.exe") | where FileName in~ ("cmd.exe","powershell.exe","wscript.exe","cscript.exe","sh","bash") | summarize cnt=count(), firstSeen=min(Timestamp), lastSeen=max(Timestamp) by DeviceName, InitiatingProcessAccountName, InitiatingProcessFileName, FileName, ProcessCommandLineB. Ruch na P4 (wejściowy)
DeviceNetworkEvents | where RemotePort between (50004 .. 59904) and RemotePort % 100 == 4 | where Direction in ("Inbound","Listen") or Action =~ "Allowed" | summarize cnt=count(), sources=dcount(RemoteIP) by DeviceName, RemotePort, Protocol, InitiatingProcessFileNameCloudTrail (AWS) — otwarcie portu 5NN04 w SG (CloudTrail Lake SQL)
SELECT eventTime, eventName, userIdentity.type AS actor, requestParameters.groupId AS sg, json_extract_scalar(requestParameters, '$.toPort') AS toPort, sourceIPAddress FROM aws_cloudtrail_events WHERE eventSource='ec2.amazonaws.com' AND eventName IN ('AuthorizeSecurityGroupIngress','AuthorizeSecurityGroupEgress','CreateSecurityGroup') AND CAST(json_extract_scalar(requestParameters, '$.toPort') AS INT) BETWEEN 50004 AND 59904 AND LIKE(json_extract_scalar(requestParameters, '$.toPort'), '%04') ORDER BY eventTime DESC;Elastic / EQL
Proces potomny od Javy/SAP → interpreter poleceń
process where event.type == "start" and (process.parent.name in ("java","jstart","sapstartsrv") or process.parent.executable : "*\\java.exe") and process.name in ("cmd.exe","powershell.exe","sh","bash","zsh","ksh")Heurystyki / korelacje (co łączyć)
- Inbound na P4 (5NN04/50004) z Internetu ⟶ w krótkim czasie dziecko cmd/sh od procesu java/jstart.
- Nietypowe argumenty potomnych (/c, -c, wget, curl, nc, zapisy do /tmp/%TEMP%).
- Nagły wzrost błędów RMI‑P4 w defaultTrace koreluje z ruchem na P4 i alertami EDR.
- Zmiany Security Group/NSG odsłaniające P4 ⟶ pierwsze próby skanowania/połączeń (Zeek).
- Brak P4S (SSL) i brak ACL/allowlist dla P4 w ICM/WAF ⟶ ryzyko wyższe.
False positives / tuning
- Legalne działania administracyjne/upgrade’owe AS Java mogą krótkotrwale wywoływać skrypty systemowe.
- Ogranicz do hostów SAP, kont serwisowych (<SID>adm), okien zmian i baseline’u procesów.
- Whitelistuj znane źródła administracyjne (jump‑hosty), a alertuj Internet/nieznane ASN.
- W regułach sieciowych uwzględnij fakt, iż P4 = 5NN04, więc dopasowanie końcówki …04 zwiększa precyzję.
Playbook reagowania (IR)
- Identyfikacja/triage: potwierdź alert (proces potomek od Javy + ruch na 5NN04).
- Izolacja: odetnij host/y SAP od niezaufanych sieci; tymczasowo zablokuj 5NN04 na brzegu/WAF.
- Forensics wstępne:
- Windows: pobierz 4688/Sysmon oraz C:\usr\sap\*\J00\work\defaultTrace*.
- Linux: journalctl/auditd, /usr/sap/<SID>/J*/work/defaultTrace*.
- Weryfikacja ekspozycji portu:
- Linux: ss -lntp | awk '$4 ~ /:5[0-9]{2}04/ {print}'
- Windows (PS): Get-NetTCPConnection | ? { $_.LocalPort -ge 50004 -and $_.LocalPort -le 59904 -and ($_.LocalPort % 100 -eq 4) }
- Patche / hardening: zastosuj SAP Note #3634501 (fix) i #3660659 (JVM serialFilter).
- Rekonesans kompromitacji: szukaj anomalii w kontach, nietypowych plikach w %TEMP%//tmp, połączeń wychodzących C2.
- Eradykacja/odzyskanie: po patchu uruchom kontrolę integralności, rotację haseł/kluczy, przywrócenie zaufanej konfiguracji ICM/WAF.
- Lessons learned: zamknij ekspozycje P4, egzekwuj allowlist, monitoruj porty 5NN**.
Przykłady z kampanii / case studies
- Materiały branżowe (Arctic Wolf) wskazywały brak obserwowanej eksploatacji i publicznego PoC w chwili publikacji, choć luki SAP są atrakcyjne i gwałtownie weaponizowane po patchach.
- Dodatkowy hardening (JVM jdk.serialFilter) został opisany przez Onapsis i powiązany z notą SAP #3660659 — warto wdrożyć choćby po aktualizacji.
- Komunikaty prasowe/serwisy bezpieczeństwa szeroko opisywały wagę CVE‑2025‑42944 (CVSS 10.0) oraz iż został ujęty w wrześniowych i październikowych poradnikach SAP.
Lab (bezpieczne testy) — przykładowe komendy
Tylko w odizolowanym labie. Celem jest weryfikacja detekcji, nie wykorzystanie luki.
- Symulacja dziecka cmd od Javy (Windows): # skompiluj prostą klasę Java uruchamiającą bezpieczną komendę echo @" public class P4Echo { public static void main(String[] args) throws Exception { new ProcessBuilder("cmd.exe","/c","echo lab-test").inheritIO().start().waitFor(); } } "@ | Set-Content .\P4Echo.java javac P4Echo.java java P4Echo Oczekiwany efekt: trigger reguł Sigma/Splunk/KQL (rodzic java.exe → dziecko cmd.exe).
- Ruch na port P4 (bez payloadu), do testu korelacji sieciowej: # Linux/WSL: próba TCP handshake do P4 nc -vz <host_sap> 50004 Oczekiwany efekt: wpisy w logach FW/Zeek; brak błędów aplikacji (brak payloadu).
- Weryfikacja portów SAP wg dokumentacji: sprawdź, iż P4 to 5NN04 (np. 50004).
Mapowania (Mitigations, powiązane techniki)
Mitigations (ATT&CK):
- M1051 – Update Software: szybkie wdrożenie not #3634501 (fix) + #3660659 (serialFilter).
- M1030 – Network Segmentation: ogranicz zasięg P4 do VLAN‑ów admin/jump‑host; brak dostępu z Internetu.
- M1037 – Filter Network Traffic: WAF/NGFW — allowlista do P4/P4S, TLS preferowany (P4S).
- M1031 – Network Intrusion Prevention: sygnatury/analiza protokołu, blokowanie anomalii RMI/P4.
- M1048 – Application Isolation & Sandboxing: ograniczenie uprawnień konta procesu AS Java.
Powiązane techniki ATT&CK:
- T1190,
- T1210,
- T1059
Źródła / dalsza lektura
- NVD: opis, wektor, daty → CVE‑2025‑42944. (NVD)
- SAP Security Notes: #3634501 (fix), #3660659 (hardening jdk.serialFilter). (strony wymagają dostępu) — linki referencyjne z NVD. (NVD)
- Onapsis (Oct 2025 Patch Day): tło hardeningu i jdk.serialFilter. (Onapsis)
- Arctic Wolf (Sep 2025): przegląd luki, brak PoC/eksploatacji w momencie publikacji. (Arctic Wolf)
- The Hacker News (Oct 2025): kontekst i wzmianka o dodatkowym utwardzeniu. (The Hacker News)
- Tenable (Nessus Plugin 270696): detale skanera i potwierdzenie zakresu (AS Java, CVSS 10). (Tenable®)
- SAP Help (AS Java Ports): P4 = 5NN04, P4S/P4HTTP. (SAP Help Portal)
- MITRE ATT&CK v18 — wersje i techniki: wersja bieżąca, T1190/T1210/T1059. (MITRE ATT&CK)
Checklisty dla SOC / CISO
SOC (operacyjna)
- Reguły: Sigma (proc‑child Java→cmd/sh), SPL/KQL/EQL wdrożone.
- Korelacje: ruch na 5NN04 + proces potomny cmd/sh.
- Telemetria SAP: zbieranie defaultTrace.* i logów RMI‑P4.
- Monitoring chmury: alerty na AuthorizeSecurityGroupIngress/Egress dla portów 50004–59904.
- Wizualizacja źródeł z Internetu próbujących P4 (Zeek/FW).
CISO (strategiczna)
- Patch wg SAP #3634501 + hardening #3660659 na wszystkich krajobrazach.
- Segmentacja: P4 tylko z sieci admin/jump‑host; brak ekspozycji publicznej.
- WAF/NGFW: allowlista + wymuszenie P4S (TLS) tam gdzie możliwe.
- Ćwiczenia IR: scenariusz RCE w SAP; gotowe playbooki i retencja logów ≥ 90 dni.
- Przegląd uprawnień dla kont procesu AS Java; zasada najmniejszych uprawnień.







