
Co znajdziesz w tym artykule?
- 1 TL;DR
- 2 Krótka definicja techniczna
- 3 Gdzie występuje / przykłady platform
- 4 Szczegółowy opis techniki (jak działa, cele, dlaczego skuteczna)
- 5 Artefakty i logi
- 6 Detekcja (praktyczne reguły)
- 7 Heurystyki / korelacje (co łączyć)
- 8 False positives / tuning
- 9 Playbook reagowania (IR)
- 10 Przykłady z kampanii / case studies
- 11 Lab (bezpieczne testy) — przykładowe komendy
- 12 Mapowania (Mitigations, powiązane techniki)
- 13 Źródła / dalsza lektura
- 14 Checklisty dla SOC / CISO
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śli 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śli 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 właściwej walidacji powoduje, że 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, lecz historycznie luki RCE w SAP są szybko weaponizowane po ujawnieniu poprawek. Priorytet: patch + segmentacja + filtracja P4.
Artefakty i logi
| Źródło | Co zbierać | EID / pola | Wzorce / wskazówki | Uwagi |
|---|---|---|---|---|
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.t1210
Wariant 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_shell
Splunk (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 user
B. 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 - count
KQL (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, ProcessCommandLine
B. 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, InitiatingProcessFileName
CloudTrail (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/shod procesujava/jstart. - Nietypowe argumenty potomnych (
/c,-c,wget,curl,nc, zapisy do/tmp/%TEMP%). - Nagły wzrost błędów RMI‑P4 w
defaultTracekoreluje 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, że P4 = 5NN04, więc dopasowanie końcówki
…04zwię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*.
- Windows: pobierz 4688/Sysmon oraz
- 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) }
- Linux:
- 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 szybko weaponizowane po patchach.
- Dodatkowy hardening (JVM
jdk.serialFilter) został opisany przez Onapsis i powiązany z notą SAP #3660659 — warto wdrożyć nawet po aktualizacji. - Komunikaty prasowe/serwisy bezpieczeństwa szeroko opisywały wagę CVE‑2025‑42944 (CVSS 10.0) oraz że 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
cmdod 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 P4EchoOczekiwany efekt: trigger reguł Sigma/Splunk/KQL (rodzicjava.exe→ dzieckocmd.exe). - Ruch na port P4 (bez payloadu), do testu korelacji sieciowej:
# Linux/WSL: próba TCP handshake do P4 nc -vz <host_sap> 50004Oczekiwany efekt: wpisy w logach FW/Zeek; brak błędów aplikacji (brak payloadu). - Weryfikacja portów SAP wg dokumentacji: sprawdź, że 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ń.