Archiwa: CVE - Strona 3 z 7 - Security Bez Tabu

CVE-2019-3396 — Atlassian Confluence “Widget Connector” RCE

TL;DR

W Atlassian Confluence (Server/Data Center) luka CVE‑2019‑3396 w makrze Widget Connector pozwala zdalnemu, nieuwierzytelnionemu napastnikowi na RCE poprzez Server‑Side Template Injection (Velocity) i path traversal. W praktyce ataki często uderzają w endpoint /rest/tinymce/1/macro/preview i prowadzą do dropu web‑shella i uruchamiania powłoki systemowej przez proces Javy/Tomcata. Mitygacja: natychmiastowy upgrade do wersji naprawczych (≥ 6.6.12, 6.12.3, 6.13.3, 6.14.2 lub nowsze), ewentualnie tymczasowe wyłączenie wtyczki Widget Connector; Confluence Cloud nie jest podatny. Mapowanie do ATT&CK: przede wszystkim T1190, a dalej typowo T1059 (Interpreter poleceń) i T1505.003 (Web shell).


Krótka definicja techniczna

CVE‑2019‑3396 to błąd w komponencie Widget Connector Confluence powodujący server‑side template injection (Velocity Template), umożliwiający path traversal i ostatecznie zdalne wykonanie kodu (RCE) bez uwierzytelnienia. Błąd dotyczy wersji Server/Data Center poniżej wydań naprawczych; Confluence Cloud nie jest narażony.


Gdzie występuje / przykłady platform

  • Linux/Windows: Confluence Server/Data Center hostowany na Tomcat/Java (instalacje on‑prem/VM/bare‑metal).
  • Reverse proxy/WAF: NGINX/Apache/ALB/WAF przed Confluence — logi tych warstw są kluczowe do detekcji. [Źródła ogólne — patrz sekcja 6/7]
  • Kubernetes/K8s/ESXi: Confluence wdrożone w kontenerze/na VM (artefakty w logach kontenerów i audycie K8s). [Źródła ogólne — patrz sekcja 6/12]
  • Chmury (AWS/Azure/GCP): Same API chmurowe nie są wektorem tej luki, ale logi ALB/WAF/Front Door pomagają identyfikować próby eksploatacji. [Źródła ogólne — patrz sekcja 7]

Szczegółowy opis techniki (jak działa, cele, dlaczego skuteczna)

Błąd znajduje się w makrze Widget Connector odpowiedzialnym za osadzanie treści (np. wideo) na stronach Confluence. Przez niewłaściwą walidację parametrów napastnik może wstrzyknąć szablon Velocity i/lub skorzystać z path traversal do wczytania niezamierzonych plików szablonów, co kończy się wykonaniem arbitralnego kodu w kontekście procesu Confluence (Java/Tomcat). Typowy wektor żądań obserwowany był na endpointzie /rest/tinymce/1/macro/preview (metoda POST) z nietypowymi polami (np. _template) — legalne użycie nie powinno ich zawierać. Po skutecznej eksploatacji napastnicy często zrzucają web‑shelle i uruchamiają powłokę systemową, a następnie pobierają narzędzia (T1105) i przechodzą do ruchów bocznych. Zależnie od środowiska obserwuje się kampanie z ransomware (np. GandCrab) i kryptominery po udanym RCE, a także wykorzystanie przez grupy APT (np. APT41).

Wersje i statusy: Atlassian wydał łatki 20 marca 2019 r. (m.in. 6.6.12, 6.12.3, 6.13.3, 6.14.2). Confluence Cloud nie jest podatny. Jako obejście do czasu aktualizacji zalecano wyłączenie Widget Connector (oraz WebDAV dla innej luki CVE‑2019‑3395).


Artefakty i logi

ŹródłoCo szukaćPrzykładowe pola / EIDUwaga
HTTP reverse proxy / web server (NGINX/Apache/ALB/WAF)POST do */rest/tinymce/1/macro/preview*; obecność "_template" lub wzorca traversal ../, nagły wzrost 4xx/5xxcs-method, cs-uri-stem, request, http.request.body.content, statusW wielu raportach ten endpoint pojawiał się w eksploatacji.
Confluence/TomcatW atlassian-confluence.log/catalina.out: błędy Velocity, stacktrace’y, nietypowe wyjątki w momencie żądańTekst surowyKoreluj z czasem żądań HTTP.
WindowsProcesy potomne od java.exe/usługi Confluence: cmd.exe, powershell.exe, narzędzia siecioweSecurity 4688, Sysmon 1/3/11Spawn powłoki spod Javy jest anomalią dla Confluence.
Linuxjava/bin/bash//bin/sh/curl/wget/nc; nowo utworzone pliki w katalogu aplikacji/WEB-INFauditd: type=EXECVE, Sysmon‑for‑Linux EID 1/3/11Sprawdzaj użytkownika usługi (np. confluence).
K8s audit (jeśli Confluence w kontenerze)verb: create/get na pods/exec; podejrzane kubectl exec do podów z Confluencekubernetes.audit.verb, objectRef.subresource=="exec"Polityka audytu K8s rejestruje pods/exec (GET/CREATE).
AWS WAF/ALB (CloudWatch Logs)Wzorce żądań jak wyżejrequestUri, httpRequest.uriCloudTrail tu nie pomoże — to ruch L7, nie API.
M365[nie dotyczy]Brak bezpośrednich artefaktów.
CISA/NSA/CTIWzmianki o kampaniach, IOCWskazywane jako powszechnie eksploatowane.

Detekcja (praktyczne reguły)

Sigma — próba eksploatacji w logach HTTP (web/proxy)

title: Confluence CVE-2019-3396 Macro Preview Exploit Attempt
id: 1e2a2c9a-2b3d-4c4d-9d66-3396cve-http
status: experimental
description: Wykrywa podejrzane POST do /rest/tinymce/1/macro/preview z parametrem _template i traversal.
logsource:
  category: webserver
detection:
  sel_path:
    cs-uri-stem|contains: "/rest/tinymce/1/macro/preview"
  sel_method:
    cs-method: POST
  sel_body_a:
    request|contains: "_template"
  sel_body_b:
    request|contains:
      - "../"
      - "web.xml"
      - ".vm"
  condition: sel_path and sel_method and sel_body_a and sel_body_b
fields:
  - src_ip
  - dest_ip
  - user_agent
  - cs-uri-stem
  - request
falsepositives:
  - Bardzo mało prawdopodobne (parametr _template nie jest używany w legalnym ruchu).
level: high
tags:
  - attack.T1190

(wzorzec oparty o publiczne opisy wektora żądań i szablonu skanera; dopasowania do _template i traversal minimalizują FP).

Sigma — potomne procesy spod Confluence (Windows+Linux)

title: Confluence Spawns Shell/LOLBins (Post-Exploitation)
id: 84a3b92d-7f6f-42a1-bdb6-confluence-child-proc
status: experimental
logsource:
  category: process_creation
detection:
  parent_java:
    ParentImage|endswith:
      - '\java.exe'
      - '\tomcat*.exe'
    ParentCommandLine|contains:
      - 'atlassian-confluence'
  child_shells:
    Image|endswith:
      - '\cmd.exe'
      - '\powershell.exe'
      - '/bash'
      - '/sh'
      - '/curl'
      - '/wget'
      - '/nc'
  condition: parent_java and child_shells
level: high
tags:
  - attack.T1059
  - attack.T1505.003
fields: [Image, ParentImage, CommandLine, ParentCommandLine, User, Hostname]

Splunk (SPL) — warstwa HTTP

(index=proxy OR index=web OR sourcetype=aws:alb:accesslogs OR sourcetype=nginx OR sourcetype=apache)
"POST" "/rest/tinymce/1/macro/preview"
| search _raw="*_template*" (_raw="*../*" OR _raw="*web.xml*" OR _raw="*.vm*")
| stats count by src_ip, uri_path, user_agent, status
| where count > 1

Splunk (SPL) — potomne procesy spod Javy/Tomcata

index=sysmon (EventCode=1 OR EventCode=4688)
(ParentImage="*\\java.exe" OR ParentCommandLine="*atlassian-confluence*")
(Image="*\\cmd.exe" OR Image="*\\powershell.exe" OR Image="*/bash" OR Image="*/sh" OR Image="*/curl" OR Image="*/wget" OR Image="*/nc")
| table _time host User ParentImage Image CommandLine ParentCommandLine

KQL — Microsoft Defender for Endpoint (procesy)

DeviceProcessEvents
| where (InitiatingProcessFileName =~ "java.exe" or InitiatingProcessCommandLine has "atlassian-confluence")
| where FileName in~ ("cmd.exe","powershell.exe","bash","sh","curl","wget","nc")
| project Timestamp, DeviceName, InitiatingProcessFileName, FileName, ProcessCommandLine, InitiatingProcessCommandLine, AccountName

KQL — Azure Application Gateway WAF / Front Door (HTTP)

AzureDiagnostics
| where Category in ("ApplicationGatewayFirewallLog","FrontDoorAccessLog")
| where requestUri_s has "/rest/tinymce/1/macro/preview"
| where requestUri_s has "_template" and (requestUri_s has "../" or requestUri_s has "web.xml" or requestUri_s has ".vm")
| project TimeGenerated, clientIp_s, requestUri_s, httpStatus_d, userAgent_s

AWS — CloudWatch Logs Insights (ALB/WAF; CloudTrail nie dotyczy tej luki)

fields @timestamp, @message
| filter @message like /POST \\/rest\\/tinymce\\/1\\/macro\\/preview/
| filter @message like /_template/ and (@message like /\\.\\.\// or @message like /web\\.xml/ or @message like /\\.vm/)
| sort @timestamp desc

Elastic / EQL — procesy

process where
  process.parent.executable : ("*java*", "*tomcat*")
  and process.name : ("cmd.exe","powershell.exe","bash","sh","curl","wget","nc")

Heurystyki / korelacje (co łączyć)

  • Korelacja czasowa: (1) POST do …/macro/preview z _template±30 s → (2) java/Tomcat spawnuje powłokę/LOLBIN → (3) wywołania sieciowe z hosta Confluence (curl/wget/nc).
  • Ścieżki i rozszerzenia: nowo utworzone pliki .jsp, .jspx, .vm, nietypowe w katalogach Confluence/WEB-INF/attachments.
  • Anomalie HTTP: wzrost 4xx/5xx dla /rest/tinymce/1/macro/preview, nietypowe UA, brak CSRF‑tokenów, nienaturalna objętość POST.
  • K8s: zdarzenia pods/exec na podzie z Confluence w oknie ±5 min od wzorca HTTP.

False positives / tuning

  • Legalne podglądy makr nie używają parametru _template; warunek obecności _template + ../ znacząco ogranicza FP.
  • Zdarza się, że administracja/backup tworzy procesy potomne (skrypty konserwacyjne) — whitelista po ścieżkach, podpisie, hashach i planach crona.
  • Ustal baseline dla ruchu do endpointu /rest/tinymce/1/macro/preview (kto edytuje strony, kiedy), a alertuj odchylone UA/IP/ASN.

Playbook reagowania (kroki + komendy)

Triage & izolacja

  1. Odłącz Confluence od Internetu/DMZ (lub włącz tryb tylko‑do‑odczytu, jeśli to jedyna wiedza bazowa).
  2. Zbierz logi: reverse proxy, atlassian-confluence.log, catalina.out, systemowe, WAF/ALB.

Szybkie sprawdzenia na hoście (bezpieczne polecenia administracyjne):

  • Linux # proces + drzewo ps -ef | egrep 'confluence|tomcat|java' pstree -ap | egrep 'java|tomcat' # ostatnie podejrzane pliki w instalacji i HOME Confluence find /opt/atlassian /var/atlassian -type f -mmin -60 -printf "%TY-%Tm-%Td %TH:%TM %p\n" | sort # ślady ruchu wychodzącego z procesu java sudo lsof -nP -p "$(pgrep -f 'atlassian|confluence|tomcat|java' | tr '\n' ',')" | egrep 'TCP|UDP' # grep wzorca endpointu w logach grep -R "/rest/tinymce/1/macro/preview" /opt/atlassian/confluence/logs /var/log/nginx 2>/dev/null
  • Windows (PowerShell jako Administrator) Get-Process java,Tomcat* -IncludeUserName Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" | Where-Object { $_.Id -eq 1 -and $_.Message -match "java.exe" -and $_.Message -match "(cmd.exe|powershell.exe)" } | Select-Object TimeCreated, Id, Message Get-ChildItem "C:\Program Files\Atlassian\Confluence\" -Recurse | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-1) }

Eradykacja i przywracanie

  • Aktualizacja Confluence do wersji naprawczych; jeżeli to niemożliwe, wyłącz plugin Widget Connector jako obejście (tymczasowe).
  • Przeskanuj pod kątem web‑shelli, skryptów .jsp/.jspx/.vm, sprawdź sumy kontrolne binariów.
  • Rotacja haseł i sekretów używanych na serwerze aplikacyjnym, w tym integracji (LDAP/DB).
  • Ocena lateral movement (kontrolery domeny, serwery plików, jump‑hosty).

Przykłady z kampanii / case studies

  • Ransomware GandCrab — obserwowano drop ransomware po eksploatacji CVE‑2019‑3396.
  • Kryptominery z rootkitem — Trend Micro opisało łańcuch: CVE‑2019‑3396 → kryptominer + rootkit.
  • Wykorzystanie przez aktorów APT — APT41 wymieniany w kontekście tego CVE i techniki T1190.
  • Ujęcie rządowe — CISA/NSA klasyfikowały CVE‑2019‑3396 jako powszechnie eksploatowaną lukę; zalecenia wykrywania web‑shelli.

Lab (bezpieczne testy) — przykładowe komendy

Cel: Walidacja reguł detekcyjnych bez atakowania podatnych systemów.

  1. Test pipeline’u logów HTTP
    • Na serwerze testowym (np. lokalny NGINX, nie Confluence) wygeneruj sztuczne wpisy zawierające wzorzec: logger 'POST /rest/tinymce/1/macro/preview HTTP/1.1 ... {"_template":"../web.xml"}'
    • Upewnij się, że Twoje źródło logów (Filebeat/Fluentd/Splunk UF) przesyła to do SIEM.
    • Sprawdź, czy reguła Sigma/Splunk/KQL podnosi alert (FP=0).
  2. Test korelacji hostowej
    • Na hoście testowym uruchom „fałszywy” łańcuch procesów: # symulacja: java (rodzic) -> bash (dziecko) (sleep 5; /bin/bash -c 'echo test') & (lub uruchom minimalny proces Java, który spawnuje bash, tylko w środowisku labowym; celem jest sprawdzenie, czy korelacja Parent=java → Child=shell działa).
    • Zweryfikuj, że reguła procesowa łapie zdarzenie.

Mapowania (Mitigations, powiązane techniki)

Mitigations (ATT&CK):

  • M1051 — Update Software (regularne patchowanie aplikacji webowych).
  • M1048 — Application Isolation and Sandboxing (izolacja procesów serwera www/aplikacji).
  • M1037 — Filter Network Traffic / M1030 — Network Segmentation (DMZ dla serwerów publicznych, WAF).
  • M1016 — Vulnerability Scanning (ciągłe skanowanie i zarządzanie podatnościami).

Powiązane techniki ATT&CK:

  • T1190 — Exploit Public‑Facing Application (wektor wejściowy dla CVE‑2019‑3396).
  • T1059.003/.004 — Command & Scripting Interpreter (Windows/Unix Shell) — powłoka po RCE.
  • T1505.003 — Web Shell — utrwalenie i sterowanie przez web‑shell.
  • T1105 — Ingress Tool Transfer — pobieranie narzędzi po udanym RCE.

Źródła / dalsza literatura


Checklisty dla SOC / CISO

SOC (operacyjne)

  • Alerty na POST do …/macro/preview + _template + ../ (HTTP).
  • Korelacja: HTTP → java/tomcat spawnuje cmd/bash w ≤60 s.
  • Polowanie na web‑shelle (*.jsp, *.jspx, *.vm) w katalogach Confluence/WEB-INF.
  • Monitoring ruchu wychodzącego z hosta Confluence (curl/wget/nc/certutil).
  • K8s: alerty na pods/exec do podów z Confluence.

CISO / właściciel usługi

  • Patch: utrzymuj Confluence na wersji ≥ 6.6.12/6.12.3/6.13.3/6.14.2/6.15.x+.
  • WAF/segregacja: DMZ, WAF reguły dla macro/preview, rate‑limit.
  • Zarządzanie podatnościami: regularne skany, SLA na krytyczne poprawki.
  • Hardening: uruchamiaj Confluence z kontem o najmniejszych uprawnieniach, bez powłoki logowania.
  • IR readiness: gotowe playbooki i kopie zapasowe, rotacja sekretów po incydencie.

CVE‑2025‑42944 – SAP NetWeaver AS Java

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łoCo zbieraćEID / polaWzorce / wskazówkiUwagi
SAP AS Java defaultTrace.* / logi RMIBłędy RMI‑P4, nieudane żądania, przeciążenia kolejkicom.sap.engine.services.rmi_p4.*Wpisy o przetwarzaniu żądań P4, błędach połączeń, anomalie kolejkiPrzykładowe komunikaty RMI‑P4 potwierdza KBA SAP (P4/50004, kolejka).
Windows SecurityTworzenie procesów po udanej RCE4688Rodzic: java.exe/jstart.exe/sapstartsrv.exeDziecko: cmd.exe/powershell.exe/wscript.exeKorelować z czasem ruchu na P4
SysmonStart procesu / sieć1, 3, 10ParentImage jak wyżej; połączenia z/do *:5NN04
Linux auditdexecve/fork potomków Javytype=EXECVEppid/exe = java/jstart/sapstartsrv + sh/bash
Zeek / FWRuch przychodzący na P4dest_port50004–59904 i końcówka …04 (wzorzec 5NN04)Segmentacja i allowlista źródeł
AWS CloudTrailZmiany SG otwierające P4AuthorizeSecurityGroupIngress/Egress, CreateSecurityGrouptoPort w [50004..59904] (w przybliżeniu wzorzec 5NN04)Wykrywa „otwarcie świata” na P4 w chmurze
K8s auditWystawienie P4 z klastracreate/patch Service/Ingressspec.ports.port: 5NN04 / nodePort kończący się …04Jeś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/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, że P4 = 5NN04, więc dopasowanie końcówki …04 zwiększa precyzję.

Playbook reagowania (IR)

  1. Identyfikacja/triage: potwierdź alert (proces potomek od Javy + ruch na 5NN04).
  2. Izolacja: odetnij host/y SAP od niezaufanych sieci; tymczasowo zablokuj 5NN04 na brzegu/WAF.
  3. Forensics wstępne:
    • Windows: pobierz 4688/Sysmon oraz C:\usr\sap\*\J00\work\defaultTrace*.
    • Linux: journalctl/auditd, /usr/sap/<SID>/J*/work/defaultTrace*.
  4. 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) }
  5. Patche / hardening: zastosuj SAP Note #3634501 (fix) i #3660659 (JVM serialFilter).
  6. Rekonesans kompromitacji: szukaj anomalii w kontach, nietypowych plikach w %TEMP%//tmp, połączeń wychodzących C2.
  7. Eradykacja/odzyskanie: po patchu uruchom kontrolę integralności, rotację haseł/kluczy, przywrócenie zaufanej konfiguracji ICM/WAF.
  8. 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 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ź, ż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ń.

CVE-2025-42890 — SAP SQL Anywhere Monitor (Non‑GUI) — „hard‑coded credentials” (CWE‑798)

TL;DR

  • Krytyczna luka (CVSS 10.0) w SQL Anywhere Monitor (Non‑GUI) 17.0 — wbudowane poświadczenia mogą dać zdalne RCE bez uwierzytelnienia.
  • Zastosuj SAP Note 3666261; SAP klasyfikuje jako HotNews. Onapsis: poprawka usuwa moduł monitora; doraźnie wyłącz i usuń bazę monitora.
  • Od strony detekcji: identyfikuj hosty nasłuchujące/historycznie na TCP/4950, koreluj z nietypowymi logowaniami i nowymi procesami systemowymi po ruchu na tym porcie.
  • Na moment publikacji brak informacji SAP o aktywnej eksploatacji; patchuj priorytetowo.

Krótka definicja techniczna

CVE‑2025‑42890 to błąd klasy CWE‑798 (hard‑coded credentials) w SAP SQL Anywhere Monitor (Non‑GUI), pozwalający zdalnemu napastnikowi — bez wcześniejszego uwierzytelnienia — uzyskać dostęp do funkcji administracyjnych monitora i potencjalnie wykonać kod z wysokimi uprawnieniami, co skutkuje wysokim wpływem na C/I/A.

Gdzie występuje / przykłady platform

  • Windows / Linux (on‑prem / IaaS): monitor uruchamiany jako usługa, historycznie eksponujący HTTP na TCP/4950.
  • VM/Cloud (AWS/Azure/GCP): spotykany jako komponent pomocniczy przy środowiskach rozproszonych SQL Anywhere; w chmurze ruch widoczny w VPC/NSG Flow Logs.
  • AD/M365/K8s/ESXi: brak bezpośredniej zależności; komponent jest aplikacją serwerową spoza tych platform.

Szczegółowy opis techniki

Moduł SQL Anywhere Monitor (Non‑GUI) zawiera w kodzie stałe poświadczenia. Jeżeli usługa jest osiągalna sieciowo, atakujący może z ich użyciem uzyskać dostęp administracyjny do funkcji monitora, a następnie (w zależności od konfiguracji i scenariusza) doprowadzić do zdalnego wykonania kodu na hoście. SAP sklasyfikował lukę jako Critical/HotNews i udostępnił notę 3666261; Onapsis podaje, że poprawka deinstaluje omawiany komponent, a do czasu wdrożenia łatki należy zatrzymać usługę monitora i usunąć jego bazę repozytoryjną.
Praktycznie oznacza to, że ekspozycja TCP/4950 (lub port skonfigurowany lokalnie) z hosta z zainstalowanym monitorem znacząco zwiększa ryzyko nieautoryzowanego dostępu.

Artefakty i logi (tabela)

ŹródłoArtefakt / logCo obserwować
Firewall / NTA / ZeekPołączenia dst.port=4950/tcp (lub port monitora)Pierwsze kontakty z zewnątrz, skoki wolumenu, nowe źródła IP, długość sesji.
SysmonEID 3 (NetworkConnect)Procesy nasłuchujące/łączące się na 4950; korelacja z nietypowymi parentami.
Windows SystemEID 7045/7036 (Service install/start)Pojawienie się/uruchomienie usługi powiązanej z SQL Anywhere/monitorem.
Linuxsystemd journal / ss -lntpSłuchanie na porcie monitora, restart usługi po patchu.
EDR (proc)Nietypowe spawny (cmd.exe/powershell.exe/bash) po ruchu na 4950Możliwy follow‑on execution.
Cloud (AWS)VPC Flow Logsdstport=4950 + action=ACCEPT dla instancji z SQL Anywhere.
Azure/GCPNSG/Flow LogsAnalogiczne do VPC Flow.
K8s/M365[brak danych / nie dotyczy]

Detekcja (praktyczne reguły)

a) Sigma (firewall/NTA) — zewnętrzny dostęp do monitora

title: External Access to SAP SQL Anywhere Monitor (TCP/4950)
id: 0f2e2b2c-5f1c-4a3c-8b0a-4a2b4c7e4950
status: stable
description: Wykrywa połączenia przychodzące do SQL Anywhere Monitor (historycznie TCP/4950) spoza sieci zaufanych.
references:
  - https://help.sap.com/docs/SAP_SQL_Anywhere/.../Monitor-architecture  # port 4950
logsource:
  category: firewall
detection:
  selection:
    dst_port: 4950
    action: allow
  not_internal:
    src_ip|cidr:
      - 10.0.0.0/8
      - 172.16.0.0/12
      - 192.168.0.0/16
  condition: selection and not not_internal
fields:
  - src_ip
  - dst_ip
  - dst_port
  - bytes
  - rule
falsepositives:
  - Legalny zdalny dostęp administracyjny z zaufanych adresów (rozszerz allowlistę).
level: high

b) Splunk (CIM: Network_Traffic)

| tstats summariesonly=false count as events
  from datamodel=Network_Traffic.All_Traffic
  where All_Traffic.dest_port=4950 All_Traffic.action=allowed
  by _time span=5m All_Traffic.dest, All_Traffic.src
| where NOT cidrmatch("10.0.0.0/8", 'All_Traffic.src')
  AND NOT cidrmatch("172.16.0.0/12", 'All_Traffic.src')
  AND NOT cidrmatch("192.168.0.0/16", 'All_Traffic.src')
| eventstats sum(events) as ev_by_pair by All_Traffic.dest, All_Traffic.src
| sort - ev_by_pair

c) KQL (Microsoft Defender for Endpoint / Sentinel – DeviceNetworkEvents)

DeviceNetworkEvents
| where Timestamp > ago(7d)
| where LocalPort == 4950 or RemotePort == 4950
| where ActionType in ("ConnectionSuccess", "InboundConnectionAccepted", "ListeningConnectionCreated")
| summarize firstSeen=min(Timestamp), lastSeen=max(Timestamp), cnt=count()
  by DeviceName, InitiatingProcessFileName, LocalIP, LocalPort, RemoteIP, RemotePort, Protocol
| order by cnt desc

d) AWS VPC Flow Logs (Athena)

SELECT dstaddr, dstport, srcaddr, COUNT(*) AS hits, MIN(start) AS first_seen, MAX(end) AS last_seen
FROM vpc_flow_logs
WHERE action='ACCEPT' AND dstport=4950 AND start BETWEEN from_iso8601_timestamp('${from}') AND from_iso8601_timestamp('${to}')
GROUP BY dstaddr, dstport, srcaddr
ORDER BY hits DESC;

e) Elastic (EQL)

network where destination.port == 4950 and event.action == "allowed"
  and not cidrmatch(source.ip, ["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16"])

Uwaga: port 4950 jest historyczną wartością domyślną dla monitora — potwierdź w swojej konfiguracji (również pod kątem reverse proxy).

Heurystyki / korelacje

  • Ruch → wykonanie: przepływy na 4950 (lub port monitora) tuż przed nowymi procesami systemowymi na hoście (cmd/powershell/bash, instalacja usług).
  • Nowa ekspozycja: pojawienie się procesu nasłuchującego na 4950 po wdrożeniu lub aktualizacji hosta.
  • Anomalia źródeł: dostęp do monitora spoza adresów operacyjnych/monitorujących (jump‑hosty, narzędzia APM).
  • Zachowanie po kompromitacji: dodanie kont lokalnych, nowe zadania zaplanowane, modyfikacje reguł zapory.

False positives / tuning

  • Wewnętrzne systemy monitoringu/aplikacje APM mogą korzystać z dedykowanych portów — allowlista IP i okna czasowe maintenance.
  • Port 4950 bywa używany w dawnych wdrożeniach innych narzędzi — potwierdzaj banery/usługę zanim podniesiesz incydent.

Playbook reagowania (IR) — kroki + komendy

  1. Identyfikacja zasobu: inwentarz hostów z SQL Anywhere Monitor (Non‑GUI) 17.0. (SAP Note 3666261)
  2. Izolacja sieciowa: tymczasowo zablokuj dostęp do portu monitora z niezaufanych adresów (lub całkowicie).
    • Windows (PowerShell): New-NetFirewallRule -DisplayName "Block SQL Anywhere Monitor" -Direction Inbound -LocalPort 4950 -Protocol TCP -Action Block
    • Linux: sudo iptables -A INPUT -p tcp --dport 4950 -j DROP
  3. Wyłączenie komponentu: zatrzymaj usługę monitora; usuń instancję bazy monitora (zalecenie tymczasowe Onapsis).
  4. Wdrożenie poprawki SAP: zastosuj notę 3666261 (HotNews). Wg Onapsis poprawka usuwa komponent monitorujący.
  5. Rotacja sekretów: zmień hasła kont serwisowych powiązanych z SQL Anywhere / monitorowaniem.
  6. Łańcuch dowodowy: przejrzyj logi (sekcje 6–7) pod kątem nadużyć przed patchowaniem; skoreluj z EDR.
  7. Weryfikacja „po”: brak nasłuchu na 4950 (netstat/ss), brak procesu/usługi monitora, brak ruchu w Flow Logs.

Przykłady z kampanii / case studies

  • Stan na 11–12 lis 2025: SAP nie raportował wykorzystania „in the wild”; media branżowe również nie wskazują aktywnej eksploatacji — priorytet patchowania pozostaje wysoki ze względu na CVSS 10.0.

Lab (bezpieczne testy) — przykładowe komendy

Cel: sprawdzić, czy detekcje zadziałają bez reprodukowania luki.

  • Symulacja ekspozycji portu (host‑lab):
    • Windows: Start-Process -WindowStyle Hidden -FilePath "powershell.exe" -ArgumentList "while($true){$l=New-Object Net.Sockets.TcpListener([Net.IPAddress]::Any,4950);$l.Start();Start-Sleep -Seconds 600}"
    • Linux: sudo nc -l -p 4950
  • Weryfikacja logów:
    • Zeek/Suricata: wygeneruj połączenie curl http://<host>:4950/ z innego hosta labowego i sprawdź reguły Sigma/Splunk/KQL.
  • Test playbooku: zastosuj regułę zapory, sprawdź, że zapytania z sekcji 7 przestają wykrywać ruch.

Mapowania (Mitigations, powiązane techniki)

Mitigations (ATT&CK Enterprise):

  • M1037 – Filter Network Traffic (odcięcie ekspozycji monitora).
  • M1042 – Disable or Remove Feature or Program (usunięcie komponentu monitora zgodnie z zaleceniem).
  • M1036 – Account Use Policies (wymuszenie zasad użycia kont; lockouty, ograniczenia czasu).
  • M1026 – Privileged Account Management (segregacja kont serwisowych).
  • M1047 – Audit (ciągłe monitorowanie ruchu/zdarzeń powiązanych).

Powiązane techniki ATT&CK:

  • T1078.001,
  • T1210

Źródła / dalsza literatura

  • NVD: opis CVE, wektor CVSS, CWE‑798. (NVD)
  • SAP Security Patch Day (listopad 2025): produkt, wersja, klasyfikacja HotNews, CVSS 10.0, nr noty 3666261. (SAP Support Portal)
  • Onapsis (analiza): usunięcie komponentu, zalecenie wyłączenia i usunięcia bazy monitora. (Onapsis)
  • SecurityWeek: podsumowanie pakietu SAP, brak informacji o eksploatacji w momencie publikacji. (SecurityWeek)
  • BleepingComputer: streszczenie opisu CVE i wagi problemu. (BleepingComputer)
  • Dokumentacja SQL Anywhere — architektura monitora i domyślny port 4950. (infocenter.sybase.com)

Checklisty dla SOC / CISO

SOC:

  • Znajdź aktywne nasłuchy na TCP/4950 (lub port monitora) i ruch zewnętrzny → wewnątrz.
  • Uruchom reguły z sekcji 7; przejrzyj 7/30 dni wstecz.
  • Koreluj ruch z procesami systemowymi i nowymi usługami.
  • Eskaluj hosty z artefaktami na IR; potwierdź wersję i obecność komponentu monitora.

CISO / właściciel systemu:

  • Wymuś wdrożenie SAP Note 3666261 na wszystkich środowiskach (on‑prem/VM/IaaS).
  • Wdroż tymczasowe kontrole sieciowe (blokada portu/ACL/WAF).
  • Zaplanuj rotację sekretów/kont serwisowych i weryfikację uprawnień.
  • Zaktualizuj rejestr ryzyk (CRITICAL) i polityki „feature removal” dla komponentów wycofywanych przez producenta.

CVE-2019-11580 — Atlassian Crowd/Crowd Data Center RCE przez pdkinstall

TL;DR

Krytyczna luka w Atlassian Crowd i Crowd Data Center umożliwiała (bez uwierzytelnienia) przesłanie i zainstalowanie arbitralnego pluginu przez endpoint administracyjny — w efekcie zdalne wykonanie kodu (RCE). Wpływ: pełne przejęcie hosta aplikacyjnego/Tomcata, często zakończone doinstalowaniem webshella i dalszą penetracją sieci. Naprawa: aktualizacja do wersji 3.0.5/3.1.6/3.2.8/3.3.5/3.4.4 lub nowszej; doraźnie usunięcie paczki pdkinstall-plugin. Detekcja: szukaj żądań do /crowd/admin/uploadplugin.action oraz anomalii „java → sh/cmd” na hoście.


Krótka definicja techniczna

CVE‑2019‑11580 wynika z błędnie pozostawionego w buildach produkcyjnych pluginu developerskiego pdkinstall, który pozwalał (także bez autoryzacji) na upload i instalację komponentów OSGi/JAR. Umożliwia to instalację złośliwego pluginu i wykonanie kodu w kontekście procesu aplikacyjnego (Tomcat/Java), co skutkuje RCE.


Gdzie występuje / przykładowe platformy

  • Systemy: Linux/Unix (typowo), Windows (usługa Crowd/Tomcat).
  • Środowiska: bare metal, VM (ESXi/Hyper‑V), kontenery/K8s (Crowd w kontenerze lub jako Helm chart), reverse proxy (NGINX/Apache), WAF.
  • Chmury: AWS (EC2 + ALB/WAF), Azure (VM + App Gateway/WAF), GCP (Compute Engine + HTTP(S) LB).
  • Tożsamość: Crowd integruje się z AD/LDAP/Azure AD/M365, ale sama luka dotyczy Crowd, nie tych usług.

Szczegółowy opis techniki (jak działa, cele, dlaczego skuteczna)

  • Przyczyna: w buildach Crowd błędnie włączono pdkinstall development plugin. Pozwalał on na instalację pluginów również na instancjach produkcyjnych.
  • Wektor: żądanie HTTP do endpointu administracyjnego odpowiedzialnego za upload pluginów (np. ścieżka zawierająca /crowd/admin/uploadplugin.action). Po stronie serwera plugin jest ładowany i wykonywany w kontekście aplikacji.
  • Skutki: wykonanie dowolnego kodu (Java/serwlety), możliwość dropu webshella, ruchu bocznego, kradzieży poświadczeń i pivotu. W praktyce technika była powszechnie wykorzystywana do instalacji webshelli.
  • Zasięg wersji: dotyczy wersji 2.1.0 ≤ v < 3.0.5, 3.1.0 ≤ v < 3.1.6, 3.2.0 ≤ v < 3.2.8, 3.3.0 ≤ v < 3.3.5, 3.4.0 ≤ v < 3.4.4; naprawione w 3.0.5 / 3.1.6 / 3.2.8 / 3.3.5 / 3.4.4. CVSS v3.1: 9.8 (CRITICAL).

Artefakty i logi (SOC „punkty zaczepienia”)

ŹródłoEID / typCo obserwowaćPrzykłady / uwagi
Web access (NGINX/Apache/ALB/WAF)HTTP accessŻądania do /crowd/admin/uploadplugin.action, metody POST/PUT, wzrost 4xx/5xx przed sukcesemEndpoint potwierdzony w analizach; logi WAF/ALB/AGW zawierają URI/metodę.
Aplikacja Crowd (atlassian-crowd.log)log4jWpisy dot. instalacji/ładowania pluginów, błędów UPM, wyjątków OSGiLokalizacja/konfiguracja logów Crowd.
Tomcat (catalina.out)logNiespodziewane błędy serwletów/przeładowanie klas tuż po podejrzanym żądaniuCrowd loguje zarówno do własnego logu, jak i Tomcata.
Windows4688 (Process Create), 7045 (Service Install), Sysmon 1/3/11ParentImage=java.exe uruchamia cmd.exe/powershell.exe, sieć wychodząca, tworzenie JAR w katalogach pluginówKorelować z czasem żądań HTTP
Linuxauditd EXECVE / EDRPPID=java uruchamia /bin/sh, curl/wget, „reverse shell” artefakty
K8s (jeśli Crowd w K8s)Ingress/Nginx accessURI jak wyżej; wzrost 5xx; nietypowe źródła
AWSWAF/ALB logs (CloudWatch/S3)httpRequest.uri zawiera ścieżkę; metoda POSTCloudWatch Logs Insights/Athena do analizy
AzureApp Gateway/WAFrequestUri_s zawiera ścieżkę; httpMethod_s = POSTDane w AzureDiagnostics
M365nie dotyczy bezpośrednioCrowd integruje się z M365/IdP, ale luka jest po stronie Crowd
CloudTrailnie dotyczy (aplikacyjny HTTP, nie API AWS)Traktuj CloudTrail pobocznie (zmiany infra)

Detekcja (praktyczne reguły)

Sigma (webserver → próby uploadu pluginu)

title: Atlassian Crowd CVE-2019-11580 - Podejrzany upload pluginu
id: 4c8f5ee1-7f6a-4a7c-9b8e-cc9a2cfe9e9a
status: experimental
description: Wykrywa żądania do endpointu uploadu pluginów Crowd często nadużywanego w CVE-2019-11580.
references:
  - https://confluence.atlassian.com/crowd/crowd-security-advisory-2019-05-22-970260700.html
  - https://nvd.nist.gov/vuln/detail/CVE-2019-11580
  - https://www.rapid7.com/db/modules/exploit/multi/http/atlassian_crowd_pdkinstall_plugin_upload_rce/
logsource:
  category: webserver
detection:
  sel_path:
    url|contains: '/crowd/admin/uploadplugin.action'
    cs-uri-stem|contains: '/crowd/admin/uploadplugin.action'
  sel_method:
    http_method|contains:
      - POST
      - PUT
    cs-method|contains:
      - POST
      - PUT
  condition: sel_path and sel_method
fields:
  - src_ip
  - url
  - http_user_agent
  - http_referer
  - status
falsepositives:
  - Legalna instalacja/aktualizacja pluginu przez admina (okno serwisowe)
level: high
tags:
  - attack.T1190
  - cve.2019-11580

(endpoint/metoda potwierdzone w źródłach)

Splunk (SPL) — logi www

index=web (sourcetype=access_combined OR sourcetype=aws:alb:accesslogs OR sourcetype=nginx:ingress)
| eval uri=coalesce(cs_uri_stem, uri_path, request, uri)
| eval method=coalesce(cs_method, method, http_method)
| search uri="/crowd/admin/uploadplugin.action" method IN ("POST","PUT")
| stats count min(_time) as first max(_time) as last values(status) as http_status by src_ip, uri, method, useragent
| where count>=1

KQL (Azure) — App Gateway/WAF

AzureDiagnostics
| where Category in ("ApplicationGatewayAccessLog","ApplicationGatewayFirewallLog")
| where requestUri_s has "/crowd/admin/uploadplugin.action"
| where httpMethod_s in ("POST","PUT")
| project TimeGenerated, clientIP_s, requestUri_s, httpMethod_s, httpStatus_d, userAgent_s

AWS — CloudWatch Logs Insights (WAF/ALB)

fields @timestamp, httpRequest.clientIp, httpRequest.uri, httpRequest.httpMethod, terminatingRuleId
| filter httpRequest.uri like '/crowd/admin/uploadplugin.action'
| filter httpRequest.httpMethod in ['POST','PUT']
| sort @timestamp desc

Elastic / EQL — post‑exploitation na hoście (Java → shell)

process where event.type == "start" and
  process.parent.name : ("java","java.exe","tomcat","catalina.sh","catalina.bat") and
  process.name : ("bash","sh","cmd.exe","powershell.exe","curl","wget","nc","socat")

Heurystyki / korelacje (co łączyć)

  • Łańcuch czasowy: (1) żądanie do /crowd/admin/uploadplugin.action(2) nagły 200/302 lub 5xx→200 → (3) na hoście java uruchamia sh/cmd(4) połączenie wychodzące na nietypowe IP/port.
  • Integracja z WAF: wysoki odsetek 4xx/5xx na tej ścieżce + próby multipart POST od pojedynczego źródła.
  • FIM/baseline: nowe .jar w katalogach pluginów Crowd; nagłe zmiany w atlassian-bundled-plugins.zip.

False positives / tuning

  • Legalne okna administracyjne (instalacja/aktualizacja pluginów) — stosuj allowlist IP/adminów oraz korelację z change window.
  • Skanery podatności/Nuclei — zwykle GET/HEAD i brak dalszych artefaktów hostowych.
  • Reverse proxy health checks — nie używają POST/PUT na admin‑endpointach.
    Tuning: ogranicz alerty do POST/PUT + 2xx/3xx i wyklucz znane sieci adminów; koreluj z host‑EDR (Java→shell).

Playbook reagowania (IR) — kroki & komendy

Kontekst tylko defensywny. Wykonuj wyłącznie w środowisku, którego jesteś administratorem.

  1. Triage & potwierdzenie
    • Sprawdź wersję Crowd (podatne pasma); jeżeli poniżej 3.4.4 (lub odpowiedni fix dla linii), traktuj jako incydent krytyczny.
    • Przejrzyj WAF/ALB/NGINX: żądania do /crowd/admin/uploadplugin.action.
  2. Izolacja
    • Tymczasowo zablokuj dostęp do ścieżki na WAF/reverse proxy (rule deny URI).
    • Rozważ odłączenie hosta od Internetu (zachowując dostęp IR).
  3. Zachowanie dowodów
    • Zrzut logów: web, atlassian-crowd.log, catalina.out; snapshot VM.
    • Hash/backup katalogów pluginów.
  4. Łowiectwo zagrożeń (host)
    • Linux: grep -E "uploadplugin|multipart|pdkinstall" /var/log/nginx/access.log* grep -i "plugin" $CROWD_HOME/logs/atlassian-crowd.log find $CROWD_HOME -type f -name "*.jar" -mmin -4320
    • Windows (PowerShell/Sysmon): filtruj EventID 1 (ParentImage=java.exe) → cmd.exe/powershell.exe.
  5. Eradykacja
    • Patch do wersji z poprawką (3.0.5/3.1.6/3.2.8/3.3.5/3.4.4 lub nowszej).
    • Jeżeli patch odroczony: usuń pdkinstall-plugin z instalacji i bundla (instrukcja vendor).
    • Usuń nieznane pluginy, przywróć baseline, zrestartuj usługę (kontrolując logi po starcie).
  6. Odzyskiwanie i weryfikacja
    • Testy funkcjonalne, monitorowanie podwyższone przez 7–14 dni, rotacja haseł/kluczy używanych przez Crowd (integracje AD/LDAP).
  7. Lekcje / hardening
    • WAF rule per‑URI, segmentacja DMZ, wymuszenie SSO/AdminVPN, FIM katalogów pluginów.

Przykłady z kampanii / case studies

  • CISA (AA21‑209A): luka była rutynowo wykorzystywana do instalacji webshelli na serwerach ofiar.
  • KEV: CVE‑2019‑11580 ujęty w CISA Known Exploited Vulnerabilities — zalecana pilna aktualizacja.
  • Detekcje rynkowe: dostawcy NDR/IDS publikowali sygnatury/artefakty dla tego CVE (m.in. opis ryzyka i łańcucha eksploatacji).

Lab (bezpieczne testy) — przykładowe komendy

Uwaga: Poniższe testy nie eksploatują luki. Służą do walidacji detekcji w kontrolowanym labie.

  1. Generowanie śladu www (WAF/NGINX/ALB)
# symulacja niegroźnego ruchu do admin-URI (powinno zwrócić 401/403/404/405)
curl -I -X POST https://lab.example.com/crowd/admin/uploadplugin.action
  1. Walidacja korelacji hostowej (Linux)
# kontrolowany start i szybkie zakończenie powłoki, do sprawdzenia korelacji "java -> sh"
sudo -u crowd bash -c 'true'   # wygeneruj bezpieczny event exec
  1. FIM (plik JAR w katalogu pluginów — lab only)
# NIE w produkcji: sprawdź, czy FIM łapie nowe JAR-y
touch $CROWD_HOME/shared/plugins/test-fim.jar

Mapowania (Mitigations, powiązane techniki)

Mitigations (ATT&CK Enterprise):

  • M1051 — Update Software: szybka aktualizacja Crowd do wersji zawierającej fix.
  • M1042 — Disable or Remove Feature or Program: usunięcie pdkinstall-plugin i zbędnych komponentów.
  • M1030 — Network Segmentation: odseparowanie Crowd w DMZ/segmencie publikacyjnym.
  • M1047 — Audit: stały przegląd logów aplikacyjnych i kontroli integrity komponentów.

Powiązane techniki ATT&CK:

  • T1190,
  • T1505.003,
  • T1105,
  • T1059 .

Źródła / dalsza literatura

  • Atlassian: Crowd Security Advisory 2019‑05‑22 — wersje podatne, wersje naprawcze, mitigacja. (Atlassian Documentation)
  • NVD: opis i CVSS dla CVE‑2019‑11580. (NVD)
  • Rapid7 (opis modułu wykrywającego endpoint uploadu pluginu). (Rapid7)
  • CISA: Top Routinely Exploited Vulnerabilities — użycie do instalacji webshelli; KEV. (CISA)
  • Atlassian: lokalizacja i konfiguracja logów Crowd/Tomcat. (Atlassian Documentation)
  • ATT&CK: T1190, T1505.003, T1105, T1059 (wersje i zakres). (MITRE ATT&CK)

Checklisty dla SOC / CISO

SOC (operacyjna):

  • Monitoruj POST/PUT na /crowd/admin/uploadplugin.action (www/WAF/ALB).
  • Koreluj z hostem: javash/cmd, nowe *.jar w katalogach pluginów.
  • Wdróż reguły Sigma/SPL/KQL z §7 i testy z §12.
  • Ustal allowlist IP adminów Crowd i okna serwisowe.
  • Myślistwo: poszukaj webshelli/serwletów nietypowych (hash/baseline).

CISO/Architekt (strategiczna):

  • Patch policy: Crowd ≥ naprawione wersje (3.0.5/3.1.6/3.2.8/3.3.5/3.4.4) lub nowsze.
  • Segmentacja DMZ i WAF z regułą blokującą wrażliwy URI.
  • FIM katalogów pluginów i podpisywanie komponentów (jeśli możliwe).
  • Przeglądy audit logów UPM i retencja logów aplikacyjnych.
  • Procedury IR: izolacja, backup artefaktów, rotacja sekretów systemów zintegrowanych (AD/LDAP/M365).

Status vendor: aktualizacja opublikowana 22 maja 2019; patche dostępne dla linii 3.0.x–3.4.x; problem jest ujęty w KEV.

CVE-2015-5122 — Adobe Flash Player UAF (opaqueBackground)

TL;DR

CVE‑2015‑5122 to krytyczna luka use‑after‑free w Adobe Flash Player (klasa DisplayObject/właściwość opaqueBackground), aktywnie wykorzystywana w 2015 r. m.in. przez zestawy exploitów (Angler, RIG, Neutrino) i kampanie watering‑hole. Daje zdalne wykonanie kodu po wizycie na złośliwej lub skompromitowanej stronie (łańcuch T1189 → T1203), typowo kończąc się uruchomieniem interpretera skryptów/LOLBin z procesu przeglądarki. Dziś Flash jest EOL i globalnie blokowany, ale detekcje nadal mają wartość do wykrywania analogicznych łańcuchów klient‑strona. Patch dla Flash: 18.0.0.209 (APSB15‑18).


Krótka definicja techniczna

CVE‑2015‑5122 to błąd Use‑After‑Free (CWE‑416) w implementacji ActionScript 3 (AS3) Adobe Flash Player, który przy specjalnie spreparowanej zawartości SWF prowadzi do korupcji pamięci i zdalnego wykonania kodu bez interakcji użytkownika poza odwiedzeniem strony. Dotyczy wersji 13.x–18.0.0.203 (Windows/macOS), 11.x–11.2.202.481 (Linux) i Chrome‑Linux do 18.0.0.204; podatność była wykorzystywana w naturze w lipcu 2015 r. (CVSS v3.1: 9.8).


Gdzie występuje / przykłady platform

  • Windows / macOS / Linux (endpointy z przeglądarkami) — wektorem jest załadowanie wtyczki Flash (PPAPI/NPAPI/ActiveX) i wykonanie SWF z exploitami; historycznie obserwowano ładowanie modułów pepflashplayer.dll, NPSWF*.dll, procesy pokrewne (np. plugin‑container.exe / FlashPlayerPlugin_.exe).
  • Active Directory / VDI — ryzyko lateralne, jeśli stacje domenowe/VDI mają przestarzały Flash.
  • Chmury (AWS/Azure/GCP), K8s, ESXi, M365 — sama podatność dotyczy klienta, ale artefakty sieciowe (pobrania .swf z S3/CloudFront) mogą być widoczne w telemetrych chmurowych organizacji hostującej treści.
  • Stan obecny — Adobe zakończyło wsparcie z końcem 2020 r. i blokuje uruchamianie Flash od 12 stycznia 2021 r., lecz „zombie‑instalacje” mogą nadal istnieć w niszach środowisk.

Szczegółowy opis techniki (jak działa, cele, dlaczego skuteczna)

Atakujący dostarcza spreparowany plik SWF, który po załadowaniu przez wtyczkę Flash wyzwala UAF w obsłudze opaqueBackground w klasie DisplayObject. Stage shellcode/ROP przejmuje kontrolę w procesie wtyczki/przeglądarki i uruchamia trwały stage‑2 (np. interpreter skryptów lub „LOLBin”), często po cichu ściągając ładunek. W 2015 r. CVE‑2015‑5122 błyskawicznie trafił do zestawów exploitów (Angler, RIG, Neutrino, Magnitude) i był użyty w watering‑hole przeciw firmie z sektora lotniczego — właśnie dlatego technika była wyjątkowo skuteczna w łańcuchach malvertising i „wejdź‑i‑zainfekuj”.

Łańcuch ATT&CK (częsty):
T1189 (Drive‑by) → T1203 (Exploitation for Client Execution) → uruchomienie interpretera/LOLBin (np. powershell.exe, mshta.exe, rundll32.exe) → T1105 (Ingress Tool Transfer)/C2. (Wzorzec zgodny z analitykami/detection strategies MITRE v18).

Łatanie i reakcje ekosystemu (2015): Adobe wydało poprawkę APSB15‑18 podnosząc Flash do 18.0.0.209 (i 13.0.0.305). Mozilla tymczasowo „soft‑blockowała” wersje do 18.0.0.203.


Artefakty i logi

ŹródłoArtefakt / zdarzenieWartość dla detekcji
Windows SysmonEID 1 Process Create – dziecko powershell.exe, wscript.exe, mshta.exe, rundll32.exe, regsvr32.exe, cmd.exe, msiexec.exe uruchomione przez chrome.exe/msedge.exe/iexplore.exe/firefox.exe/plugin-container.exe/FlashPlayerPlugin_*.exeSilny sygnał post‑eksploitacyjny (client → OS).
EID 3 Network Connection – po podejrzanym procesie (C2/transfer)Korelacja czasowa po EID 1.
EID 7 Image Loaded – załadowanie pepflashplayer.dll / NPSWF*.dllKontekst historyczny (Flash w systemie).
EID 11 FileCreate – drop w %TEMP%/%APPDATA% (EXE/DLL/SCT/VBS)Artefakt płatka.
EID 22 DNS Query – zapytania do rzadkich domen chwilę po wizycie WWWCzęsty sygnał EK/C2.
Windows Security4688 Process CreationAlternatywa gdy brak Sysmon.
Przeglądarka/OSCrash/WER Event 1001 po błędzie wtyczkiUAF bywa poprzedzony niestabilnością.
Proxy/DNS/NGFWŻądania *.swf, nietypowe przekierowania, malvertisingKontekst T1189.
AWS CloudTrail (Data events/S3)GetObject na kluczach *.swf z publicznych bucketów (gdy Twoja organizacja hostuje treści)Do skanów higieny/ekspozycji.
K8s audit / M365[nie dotyczy]Luka dotyczy klienta, nie kontrol‑plane/SaaS.

Detekcja (praktyczne reguły)

Sigma (Windows / process_creation)

title: Browser/Flash Spawning Script Interpreters Or LOLBins
id: 4d9b8f83-7c2b-45b1-9e4b-ffb1b7b31012
status: stable
description: Wykrywa uruchomienie interpreterów/LOLBinów jako dziecka procesu przeglądarki/wtyczki Flash (łańcuch po T1203/CVE-2015-5122).
author: Badacz CVE
logsource:
  category: process_creation
  product: windows
detection:
  parent_browsers:
    ParentImage|endswith:
      - '\chrome.exe'
      - '\msedge.exe'
      - '\iexplore.exe'
      - '\firefox.exe'
      - '\plugin-container.exe'
      - '\FlashPlayerPlugin_32.exe'
      - '\FlashPlayerPlugin_64.exe'
  suspicious_children:
    Image|endswith:
      - '\powershell.exe'
      - '\wscript.exe'
      - '\cscript.exe'
      - '\mshta.exe'
      - '\rundll32.exe'
      - '\regsvr32.exe'
      - '\cmd.exe'
      - '\bitsadmin.exe'
      - '\certutil.exe'
      - '\msiexec.exe'
  condition: parent_browsers and suspicious_children
fields:
  - User
  - CommandLine
  - ParentCommandLine
  - Image
  - ParentImage
  - ProcessGuid
  - ParentProcessGuid
falsepositives:
  - Aktualizacje/instalatory uruchamiane z przeglądarki przez użytkownika
level: high
tags:
  - attack.t1203
  - attack.t1189

Splunk (Sysmon)

index=sysmon sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=1
| eval parent=lower(coalesce(ParentImage,ParentProcessName)), child=lower(Image)
| where like(parent,"%\\chrome.exe") OR like(parent,"%\\msedge.exe") OR like(parent,"%\\iexplore.exe")
  OR like(parent,"%\\firefox.exe") OR like(parent,"%\\plugin-container.exe") OR like(parent,"%\\flashplayerplugin%")
| where child like("%\\powershell.exe") OR child like("%\\wscript.exe") OR child like("%\\cscript.exe")
  OR child like("%\\mshta.exe") OR child like("%\\rundll32.exe") OR child like("%\\regsvr32.exe")
  OR child like("%\\cmd.exe") OR child like("%\\bitsadmin.exe") OR child like("%\\certutil.exe") OR child like("%\\msiexec.exe")
| stats count min(_time) as first_seen max(_time) as last_seen values(CommandLine) as child_cmd by host, user, parent, child, ParentCommandLine, ProcessGuid, ParentProcessGuid
| convert ctime(first_seen) ctime(last_seen)

KQL (Microsoft Defender for Endpoint / Sentinel)

DeviceProcessEvents
| where Timestamp > ago(14d)
| where InitiatingProcessFileName in~ ("chrome.exe","msedge.exe","iexplore.exe","firefox.exe","plugin-container.exe",
                                      "FlashPlayerPlugin_32.exe","FlashPlayerPlugin_64.exe")
| where FileName in~ ("powershell.exe","wscript.exe","cscript.exe","mshta.exe","rundll32.exe",
                      "regsvr32.exe","cmd.exe","bitsadmin.exe","certutil.exe","msiexec.exe")
| summarize cnt=count(), first=min(Timestamp), last=max(Timestamp),
            make_set(ProcessCommandLine), make_set(InitiatingProcessCommandLine)
          by DeviceName, AccountName, FileName, InitiatingProcessFileName

CloudTrail (S3 data events, higiena własnych zasobów)

Szuka pobrań plików .swf z Twoich bucketów (kontrola ekspozycji/legacy).

fields @timestamp, eventName, requestParameters.bucketName as bucket, requestParameters.key as key, sourceIPAddress, userAgent
| filter eventSource = "s3.amazonaws.com" and eventName = "GetObject"
| filter key like /(?i)\.swf$/
| sort @timestamp desc

Elastic / EQL

process where
  process.parent.name in ("chrome.exe","msedge.exe","iexplore.exe","firefox.exe","plugin-container.exe",
                          "FlashPlayerPlugin_32.exe","FlashPlayerPlugin_64.exe") and
  process.name in ("powershell.exe","wscript.exe","cscript.exe","mshta.exe","rundll32.exe",
                   "regsvr32.exe","cmd.exe","bitsadmin.exe","certutil.exe","msiexec.exe")

Heurystyki / korelacje (co łączyć)

  • Krótki łańcuch czasowy: wizytę WWW (proxy/DNS) → child process z przeglądarki → ruch wychodzący/C2 → drop w %TEMP%. (Wzorzec MITRE Detection Strategies dla technik klienckich).
  • Rzadkie moduły: ładowanie starych bibliotek Flash (NPSWF*, pepflashplayer.dll) na hostach, gdzie Flash nie powinien istnieć.
  • Domeny jednorazowe/malvertising: przekierowania, iFrame, 302‑cushioning — znane z EK (Angler).
  • WER/crashe po wtyczce tuż przed spawnem interpretera.

False positives / tuning

  • Instalacje/aktualizacje uruchamiane z przeglądarki (np. msiexec.exe po pobraniu legalnego instalatora).
  • Skrypty administracyjne wywoływane z web‑portali korporacyjnych (Self‑Service).
  • Tuning: zawęź do parent=browser/plugin + dziecko z listy + CommandLine z wzorcami web‑download (http, -enc, -w hidden, urlmon, bitsadmin, certutil -urlcache -split) i korelacja DNS/proxy w ±2 min.

Playbook reagowania (IR)

  1. Triage & izolacja hosta (EDR network containment).
  2. Zabezpieczenie artefaktów:
    • Zrzut pamięci podejrzanych procesów (przeglądarka/child).
    • Logi: Sysmon 1/3/11/22, WER 1001, proxy/DNS; Prefetch dla child.
  3. Szybkie IOC sweep: domeny/URL z proxy, hash dropu, ścieżki %TEMP%/%APPDATA%.
  4. Eradykacja: usuń pozostałości, zablokuj domeny/IP, wymuś aktualizację przeglądarek, odinstaluj Flash (jeśli gdzieś jeszcze jest). Adobe blokuje uruchamianie od 12.01.2021 — resztki usunąć.
  5. Higiena systemowa: ASR/EDR polityki block browser child, blokada wykonywania w %TEMP%.
  6. Post‑incident: przegląd polityk web (bloki *.swf), inwentaryzacja legacy.

Przykłady z kampanii / case studies

  • Watering‑hole na firmę lotniczą (lipiec 2015): strona ofiary serwowała exploit na CVE‑2015‑5122; po eksploatacji instalowano backdoor IsSpace.
  • Exploit‑kity (2015): 0‑day z wycieku Hacking Team trafił błyskawicznie do Angler/Neutrino/RIG/Magnitude (malvertising, przekierowania).
  • Reakcje vendorów: aktualizacja Adobe APSB15‑18 (18.0.0.209); Mozilla czasowo blokowała starsze wersje; CISA dodała CVE‑2015‑5122 do KEV.

Lab (bezpieczne testy) — przykładowe komendy

Wyłącznie w odseparowanym labie. Nie używamy prawdziwych exploitów. Celem jest walidacja detekcji łańcucha browser → child → network.

A. Szybki test detekcji (Windows)

  1. Otwórz przeglądarkę (np. Edge/Chrome), zostaw aktywne okno.
  2. W drugim oknie PowerShell uruchom „symulację dziecka” (bez złośliwości):
Start-Process -FilePath "powershell.exe" -ArgumentList "-NoLogo -NoProfile -Command whoami" -WindowStyle Hidden
Start-Process -FilePath "rundll32.exe" -ArgumentList "shell32.dll,Control_RunDLL" -WindowStyle Hidden

Ten test nie odtworzy rodzica=browser, ale pozwala przetestować parsowanie pól i konfigurację korelacji w SIEM/EDR (warunki z sekcji 7). Następnie tymczasowo wyświetl alerty „wszędzie”, aby potwierdzić, że reguły działają i dociśnij tuning do parent=browser.

B. Atomic Red Team — technika pokrewna (User Execution)
Zainstaluj Invoke-AtomicRedTeam i wykonaj bezpieczne atomiki dla T1204 (np. testy link/pliku nie ściągające malware) — cel: zobaczyć eventy procesowe i dopracować korelacje.

Set-ExecutionPolicy Bypass -Scope Process -Force
iwr https://raw.githubusercontent.com/redcanaryco/invoke-atomicredteam/master/install.ps1 | iex
Invoke-AtomicTest T1204.002 -ShowDetails -PromptForInputArgs

Dokumentacja i repozytoria: Atomic Red Team, Invoke-AtomicRedTeam.

C. Higiena legacy — skan resztek Flash
Sprawdź, czy na hostach nie ma katalogów C:\Windows\SysWOW64\Macromed\Flash\ lub starych OCX/DLL i usuń/wycofaj — Flash jest EOL i blokowany.


Mapowania (Mitigations, powiązane techniki)

Mitigations (MITRE):

  • M1051 — Update Software (patch management przeglądarek/wtyczek; historycznie APSB15‑18).
  • M1040 — Behavior Prevention on Endpoint (ASR/EDR: blok browser‑child).
  • M1031 — Network Intrusion Prevention (IDS/IPS/secure web gateway; blokowanie *.swf, wykrywanie przekierowań/ek).
  • M1017 — User Training (świadomość soc‑eng/malvertising).

Powiązane techniki ATT&CK:

  • T1189 Drive‑by Compromise (malvertising, iFrame, redirect).
  • T1204.001/002 User Execution: Malicious Link/File.
  • T1105 Ingress Tool Transfer (pobranie ładunku po eksploatacji). (strona referencyjna ogólna)

Źródła / dalsza literatura

  1. NVD — opis CVE‑2015‑5122 (CWE‑416, zakres wersji, CVSS, „exploited in the wild”). (NVD)
  2. CERT/CC VU#338736 — opaqueBackground UAF, APSB15‑18, wersja naprawcza 18.0.0.209. (kb.cert.org)
  3. CISA KEV — wpis dla CVE‑2015‑5122. (NVD)
  4. MITRE ATT&CK T1203 / T1189 / T1204.* (opisy technik i detekcje). (MITRE ATT&CK)
  5. Palo Alto Networks Unit 42 — watering‑hole na aerospace z wykorzystaniem CVE‑2015‑5122. (Unit 42)
  6. Malwarebytes (J. Segura) — EK (Angler/RIG/Neutrino/Magnitude) przyjmują 0‑day Flash. (Malwarebytes)
  7. Keysight/analiza Angler EK — techniki przekierowań (302 cushioning, domain shadowing). (Keysight)
  8. Adobe — EOL/blokada Flash od 12.01.2021. (Adobe)
  9. Mozilla — blokowanie starych wersji Flash (soft‑block). (Mozilla Support)
  10. Trend Micro — podsumowanie EK w 2015 r. (dominacja Flash, malvertising). (www.trendmicro.com)
  11. ATT&CK v18 — info o wersji/aktualizacjach. (MITRE ATT&CK)

Checklisty dla SOC / CISO

SOC (operacyjne):

  • Reguły z sekcji 7 wdrożone (Sigma/SPL/KQL/EQL) + korelacja proxy/DNS ±2 min.
  • Alarm „browser → child (interpreter/LOLBin)” = high + auto‑contain host.
  • Widoczność na WER/crashe pluginów i file drops w %TEMP%.
  • Blokowanie *.swf i legacy MIME w web‑gateway/NGFW.
  • Threat hunt: hosty z pepflashplayer.dll / NPSWF*.dll.

CISO (strategiczne):

  • Politycznie zabroniony Flash (potwierdzona deinstalacja; EOL).
  • ASR/EDR: „Block Office/Browser child process” i „Block executable content from email/web.”
  • Patch management (M1051) — gwarancja aktualnych przeglądarek; legacy wycofane.
  • Program szkoleń użytkowników (malvertising, „click‑to‑play” historia).

Uwagi końcowe

Flash Player jest wyłączony i blokowany przez Adobe — jakiekolwiek pozostałości należy usuwać. Dzisiejsza wartość detekcyjna polega na rozpoznawaniu wzorca zachowań klient‑strona, który pozostaje aktualny dla nowych błędów RCE w przeglądarkach/wtyczkach.

CVE-2015-3113 — Adobe Flash Player RCE

TL;DR

Krytyczna luka w Adobe Flash Player (CVE‑2015‑3113) umożliwiała zdalne wykonanie kodu poprzez przepełnienie bufora na stercie, m.in. po wejściu na złośliwą stronę lub kliknięciu odsyłacza w kampanii phishingowej. Zero‑day wykorzystywany był w operacji Clandestine Wolf (APT3), z łańcuchem: e‑mail → profilowanie JS → załadowanie pliku SWF/FLV → ROP/DEP/ASLR bypass → zrzut backdoora (SHOTPUT). Detekcja: obserwuj pobrania .swf, procesy/załadowane moduły Flash oraz nietypowe dzieci procesów Flash (cmd/powershell/wscript). Ponieważ Flash jest EOL (12.2020), każde użycie Flash w 2025 r. jest co najmniej podejrzane.


Krótka definicja techniczna

CVE‑2015‑3113 to luka typu heap‑based buffer overflow w Adobe Flash Player (przed 13.0.0.296; 14.x–18.x < 18.0.0.194 dla Windows/OS X; Linux < 11.2.202.468), pozwalająca zdalnie wykonać kod przy przetwarzaniu specjalnie spreparowanych treści Flash; w czerwcu 2015 była aktywnie wykorzystywana na wolności.


Gdzie występuje / przykłady platform

  • Endpointy: Windows (IE/Edge Legacy/Chrome/Firefox), macOS (Safari/Firefox/Chrome), Linux (Firefox/Chromium – PPAPI/NPAPI).
  • Scenariusze ataku: phishing z linkiem do serwisu z exploitem, drive‑by po wejściu na zainfekowaną stronę; znane cele zawierały m.in. Windows 7 (IE) i Firefox na XP.
  • Stan dzisiaj: Flash Player zakończył życie 31.12.2020 (blokada uruchomienia od 12.01.2021) — użycie w sieci produkcyjnej to incydent ryzyka.

Szczegółowy opis techniki (jak działa, cele, dlaczego skuteczna)

Kampania Operation Clandestine Wolf przypisywana APT3 wykorzystywała e‑maile z odsyłaczami do przejętych witryn. Po kliknięciu ofiara była przekierowywana do skryptów profilujących (JS), które sprawdzały wersje przeglądarki/wtyczek. Następnie serwer dostarczał parę plików SWF + FLV wykorzystujących CVE‑2015‑3113. Exploit uzyskiwał arbitralny zapis/odczyt, wykonywał łańcuch ROP omijający DEP/ASLR, a finalnie odpalał shellcode i zrzucał backdoora SHOTPUT. Efekt: zdalne RCE i trwała kontrola hosta.

Dlaczego skuteczna?
(1) popularność Flash w 2015, (2) atak drive‑by nie wymagał pobierania plików przez użytkownika, (3) łańcuch exploitów obchodził mechanizmy łagodzące (DEP/ASLR), (4) szybka adopcja w ekosystemie exploit kitów (np. Magnitude).


Artefakty i logi

WarstwaArtefakt / źródłoWskaźniki / polaUwagi
Windows (Sysmon)EID 1 Process CreateImage/ParentImage: FlashPlayer.exe, FlashUtil*.exe, FlashPlayerPlugin*.exe; dzieci: cmd.exe, powershell.exe, wscript.exe, rundll32.exe, regsvr32.exeNietypowe dziecko procesu Flash = silny sygnał RCE. Nazwy procesów potwierdza Adobe Flash Player Admin Guide.
Windows (Sysmon)EID 7 Image LoadedImageLoaded = \pepflashplayer.dll (Chrome/Chromium)Obserwuj załadowanie w procesach przeglądarki.
Windows (Application)EID 1000 Application ErrorAwaria modułów Flash/pepflashNagłe crashe Flash niedługo przed nietypowym procesem‑dzieckiem.
Proxy/NGFW/DNSDostęp HTTP/S do *.swf, MIME application/x-shockwave-flashurl, mime, user_agent, referrerKoreluj z kliknięciami z e‑maila (M365).
M365 DefenderEmailUrlInfo, UrlClickEventsUrl, UrlDomain, kliknięcia Safe LinksŁącz URL .swf z hostami, które uruchomiły procesy Flash.
MITRE ATT&CK (kontekst)APT3 + SHOTPUTProfilowanie, dostarczenie backdooraDo korelacji z TTP grupy.
AWS (opcjonalnie)CloudTrail Lake (S3 Data Events)GetObject na kluczach %.swfWymaga włączonych data events.
CDNCloudFront Access Logs / Athenacs-uri-stem like '%.swf', sc-content-typePrzy hostowaniu/pośrednictwie treści.

Detekcja (praktyczne reguły)

Sigma (Windows / Sysmon – anomalie dzieci procesów Flash)

title: Flash Plugin Spawns Suspicious Child (CVE-2015-3113 Context)
id: 5a8b2f3b-8ce3-49d0-9f1f-6a2e1d1f3f31
status: experimental
description: Wykrywa nietypowe dzieci procesów Flash (cmd/powershell/skrpty), co bywa obserwowane przy RCE (np. CVE-2015-3113).
references:
  - https://nvd.nist.gov/vuln/detail/CVE-2015-3113
  - https://cloud.google.com/blog/topics/threat-intelligence/operation-clandestine-wolf-adobe-flash-zero-day/
tags:
  - attack.t1203
  - attack.t1189
  - attack.t1566.002
  - cve.2015-3113
logsource:
  category: process_creation
  product: windows
detection:
  sel_parent:
    ParentImage|contains:
      - '\FlashPlayer'
      - '\FlashUtil'
      - '\FlashPlayerPlugin'
  sel_child:
    Image|endswith:
      - '\cmd.exe'
      - '\powershell.exe'
      - '\wscript.exe'
      - '\cscript.exe'
      - '\rundll32.exe'
      - '\regsvr32.exe'
  condition: sel_parent and sel_child
fields:
  - ParentImage
  - ParentCommandLine
  - Image
  - CommandLine
falsepositives:
  - Rzadkie narzędzia korporacyjne wołane z aplikacji opartej na Flash (dziś skrajnie rzadkie)
level: high

Splunk (SPL)

1) Flash uruchomiony przez przeglądarkę

index=sysmon EventCode=1
(ParentImage="*\\iexplore.exe" OR ParentImage="*\\chrome.exe" OR ParentImage="*\\firefox.exe" OR ParentImage="*\\msedge.exe")
(Image="*\\FlashPlayer*.exe" OR Image="*\\FlashUtil*.exe" OR Image="*\\FlashPlayerPlugin*.exe")
| stats count min(_time) max(_time) by host, ParentImage, Image, CommandLine, ParentCommandLine

2) Dzieci procesów Flash

index=sysmon EventCode=1
(ParentImage="*\\FlashPlayer*.exe" OR ParentImage="*\\FlashUtil*.exe" OR ParentImage="*\\FlashPlayerPlugin*.exe")
(Image="*\\cmd.exe" OR Image="*\\powershell.exe" OR Image="*\\wscript.exe" OR Image="*\\rundll32.exe" OR Image="*\\regsvr32.exe")
| table _time host ParentImage Image CommandLine

3) Proxy/HTTP — pobrania .swf

index=proxy (uri_path="*.swf" OR mime_type="application/x-shockwave-flash")
| stats count by src_ip, user, uri, http_status, user_agent, referrer

KQL (Microsoft Defender / M365)

Defender for Endpoint — dzieci procesów Flash

DeviceProcessEvents
| where InitiatingProcessFileName in~ ("FlashPlayer.exe","FlashPlayerPlugin.exe","FlashUtil32.exe","FlashUtil64.exe")
| where FileName in~ ("cmd.exe","powershell.exe","wscript.exe","cscript.exe","rundll32.exe","regsvr32.exe")
| project Timestamp, DeviceName, InitiatingProcessFileName, FileName, ProcessCommandLine, InitiatingProcessCommandLine

MDO — kliknięcia linków .swf

UrlClickEvents
| where Url endswith ".swf" or Url has ".swf?"
| summarize Clicks=count() by UrlDomain, Url, AccountUpn, Timestamp

MDO — adresy URL w wiadomościach

EmailUrlInfo
| where Url endswith ".swf" or Url has ".swf?"
| join kind=leftouter EmailEvents on NetworkMessageId
| project Timestamp, SenderFromAddress, RecipientEmailAddress, Url, UrlDomain, Subject, ThreatTypes

(Definicje tabel: EmailUrlInfo, UrlClickEvents — dokumentacja Microsoft).

CloudTrail / CloudWatch (AWS)

Założenie: włączone S3 Data Events lub logi CloudFront.

CloudTrail Lake SQL (AWS CLI): wyszukaj pobrania *.swf z bucketów

SELECT eventTime, sourceIPAddress, userIdentity.principalId, requestParameters.bucketName AS bucket,
       requestParameters.key AS objectKey
FROM event_data_store
WHERE eventSource = 's3.amazonaws.com'
  AND eventName   = 'GetObject'
  AND requestParameters.key LIKE '%.swf'
  AND eventTime > TIMESTAMP '2025-11-01 00:00:00';

(Wymaga włączonych data events).

CloudFront / Athena (przykład):

SELECT date, time, cs_host, cs_uri_stem, sc_status, sc_content_type, c_ip, cs_user_agent
FROM cloudfront_logs
WHERE cs_uri_stem LIKE '%.swf'
ORDER BY date, time DESC;

Elastic EQL

process where
  process.parent.name in ("FlashPlayer.exe","FlashPlayerPlugin.exe","FlashUtil32.exe","FlashUtil64.exe") and
  process.name in ("cmd.exe","powershell.exe","wscript.exe","cscript.exe","rundll32.exe","regsvr32.exe")

Heurystyki / korelacje

  • Klik .swf ⇒ proces Flash ⇒ podejrzane dziecko ⇒ połączenie wychodzące (czasowo blisko) — korelacja M365 (UrlClickEvents / EmailUrlInfo) + EDR + egress DNS/HTTP.
  • Załadowanie pepflashplayer.dll przez przeglądarkę, następnie nietypowe zachowanie (np. nagłe powershell.exe).
  • Rzadko używane dziś MIME application/x-shockwave-flash w ruchu web — traktuj jako anomalię.
  • Artefakty APT3/SHOTPUT (nietypowe rozpoznanie hosta/użytkowników/sieci po kompromitacji) jako sygnały post‑exploitation do korelacji (np. lista kont, netstat).

False positives / tuning

  • Dziedzictwo wewnętrzne: pojedyncze kioski/offline‑aplikacje z zawartością SWF (dziś wyjątkowe). Użyj allowlist domen/aplikacji biznesowych i ogranicz reguły do organizacji/OU, gdzie jakiekolwiek Flash jest dopuszczone.
  • Narzędzia administracyjne mogą incydentalnie wywołać interpretery (np. skrypty logowania), ale rodzicem nie powinien być proces Flash.
  • Ustal okno czasowe (np. ±5 min od kliknięcia URL .swf) i filtruj znane testy w labie.

Playbook reagowania (SOC/IR)

  1. Zablokuj źródło: domenę/URL z .swf w proxy/DNS firewall; wypchnij blokadę przez EDR.
  2. Izoluj host z alertem (EDR quarantine).
  3. Triage artefaktów:
    • Procesy potomne Flash, dropy w %APPDATA%, połączenia C2.
    • Zrzut pamięci procesu przeglądarki/Flash (jeśli polityka na to pozwala).
  4. Hunting rozprzestrzenienie: użyj zapytań (SPL/KQL/EQL powyżej) w horyzoncie 7–30 dni.
  5. Patch & harden: potwierdź brak Flash w flocie (wycofanie EOL), wymuś aktualizacje przeglądarek.
  6. Eradykacja: usuń artefakty, przeinstaluj przeglądarkę, unieważnij poświadczenia pozyskane po kompromitacji.
  7. Lessons learned: blokada typów/MIME, EDR policy na podejrzane dzieci procesów, kampania edukacyjna „nie klikaj .swf”.

Przykłady z kampanii / case studies

  • Operation Clandestine Wolf (APT3/UPS) — phishing z odsyłaczami do przejętych witryn; profilowanie JS; exploit CVE‑2015‑3113; backdoor SHOTPUT (Backdoor.APT.CookieCutter). Branże: A&D, telco, high‑tech, transport, budownictwo.
  • Eksploatacja na szeroką skalę — szybka adopcja w exploit kitach (np. Magnitude) w 2015 r.

Lab (bezpieczne testy) — tylko w kontrolowanym środowisku

Nie instaluj Flash w produkcji. Nie testujemy exploitu — jedynie łańcuch detekcji.

  • Symulacja ruchu web
    • curl -I https://lab.example.org/test.swf (serwuj neutralny plik binarny z nagłówkiem Content-Type: application/x-shockwave-flash).
    • Zweryfikuj, że proxy/NGFW/Athena (CloudFront) odnotowały żądanie *.swf.
  • Symulacja korelacji M365
    • Wyślij na skrzynkę testową e‑mail z linkiem do https://lab.example.org/test.swf.
    • Sprawdź EmailUrlInfo / UrlClickEvents (KQL z sekcji 7).
  • Symulacja anomalii procesów
    • Zastępczo uruchom aplikację, która imituje wzorzec: proces „AplikacjaGUI.exe” → cmd.exe /c whoami. Reguły powinny złapać schemat „aplikacja multimedialna → interpreter”. (Bez użycia Flash).

Mapowania

Mitigations (ATT&CK):

  • M1050 Exploit Protection — ASR/Exploit Guard/EDR exploit prevention.
  • M1033 Limit Software Installation — blokada instalacji wtyczek/dodatków; usunięcie Flash.
  • M1040 Behavior Prevention on Endpoint — blokuj podejrzane łańcuchy (Flash → skrypty/LOLBins).
  • M1017 User Training — prewencja kliknięć w odsyłacze .swf.

Powiązane techniki (kaskada):

  • T1105 Ingress Tool Transfer — dociąganie backdoora po RCE.
  • T1027 Obfuscated/Compressed Files & Information — xor/steganografia/packery w payloadach.

Źródła / dalsza literatura

  • NVD: opis, wersje, „exploited in the wild” (VI 2015). (NVD)
  • Mandiant/FireEye: Operation Clandestine Wolf, łańcuch ataku, SHOTPUT (APT3). (Google Cloud)
  • SecurityWeek: zero‑day, cele (IE na Win7, Firefox na XP), powiązanie z APT3. (SecurityWeek)
  • Trend Micro: adopcja w exploit kitach (Magnitude). (www.trendmicro.com)
  • Adobe: EOL Flash (31.12.2020). (Adobe)
  • Adobe Flash Player 32 Admin Guide: procesy/plik DLL (FlashUtil*, pepflashplayer.dll). (open-flash.github.io)
  • MITRE ATT&CK: T1189, T1566.002, T1203; wersja v18.0. (MITRE ATT&CK)
  • Microsoft Defender: tabele EmailUrlInfo, UrlClickEvents. (Microsoft Learn)
  • AWS: CloudTrail Data Events, CloudFront/Athena zapytania. (AWS Documentation)

Checklisty dla SOC / CISO

SOC (operacyjne):

  • Włączone telemetry: Sysmon (EID 1/7), proxy/DNS, M365 Defender (EmailUrlInfo/UrlClickEvents).
  • Reguły: Sigma (Flash → cmd/powershell), SPL/KQL/EQL z sekcji 7.
  • Korelacja: klik .swf ↔ procesy Flash ↔ dziecko/egress DNS/HTTP.
  • Blokady: MIME application/x-shockwave-flash, rozszerzenie .swf w bramkach.
  • Hunting retro 30 dni: dzieci procesów Flash i ruch do domen z kampanii (wg TI).

CISO (strategiczne):

  • Potwierdzić brak Flash w organizacji (EOL).
  • Polityka „deny by default” dla wtyczek przeglądarek.
  • Wymuszony Exploit Protection/EDR (M1050/M1040).
  • Szkolenia użytkowników (M1017) z naciskiem na klikalność linków.
  • Gotowość IR: playbook powyżej, retencja logów ≥ 30–90 dni.

CVE-2015-2545 — złośliwy EPS w dokumentach Microsoft Office

TL;DR

CVE‑2015‑2545 to krytyczna podatność RCE w parserze EPS pakietu Microsoft Office, umożliwiająca wykonanie kodu po otwarciu dokumentu z osadzonym plikiem EPS. Była szeroko wykorzystywana w kampaniach APT (m.in. PLATINUM, APT16). Dziś kluczowe jest: pełne łatanie (MS15‑099), blokada EPS w Office (domyślnie wyłączone od 2017 r.), filtrowanie w bramkach pocztowych oraz detekcje „Office → nietypowe dziecko” i (na starszych hostach) ładowanie EPSIMP32.FLT.


Krótka definicja techniczna

CVE‑2015‑2545 to błąd w obsłudze grafiki Encapsulated PostScript (EPS) w Office, który po otwarciu dokumentu z wbudowanym EPS pozwala napastnikowi doprowadzić do korupcji pamięci i zdalnie wykonać kod w kontekście użytkownika. Exploit wykorzystuje kod PostScript, a historycznie potrafił omijać ASLR/DEP.


Gdzie występuje / przykłady platform

  • Windows / Office: Office 2007 SP3, 2010 SP2, 2013 SP1, 2013 RT SP1 (późniejsze Office miały zablokowaną obsługę EPS).
  • M365 (Exchange/Defender): wektor pocztowy (załączniki DOC/DOCX/RTF z EPS); telemetria EmailEvents, EmailAttachmentInfo, DeviceProcessEvents.
  • Pozostałe platformy (AD, AWS, Azure, GCP, K8s, ESXi, M365): wpływ pośredni (np. phishing do skrzynek M365; hosty Windows). CloudTrail/K8s/ESXi zazwyczaj nie dotyczy samej eksploatacji, ale można korelować pobrania plików z S3 (jeśli dokument był hostowany w chmurze).

Szczegółowy opis techniki (jak działa, cele, dlaczego skuteczna)

Atakujący wysyła do ofiary dokument Office (DOC/DOCX/RTF) z osadzonym EPS. Po otwarciu dokumentu silnik importu grafiki (EPSIMP32.FLT) parsuje treść EPS, co przy specjalnie spreparowanych danych prowadzi do RCE. W praktyce łańcuch wyglądał następująco:

  1. Initial Access: spearphishing z załącznikiem zawierającym EPS (T1566.001).
  2. Execution: użytkownik otwiera plik (T1204.002), Office ładuje filtr EPS i wyzwala błąd → shellcode.
  3. Post‑exploitation: uruchomienie procesu lolbin (np. rundll32.exe, regsvr32.exe, mshta.exe) lub droppera.

Eksploatacja była popularna, bo łączyła socjotechnikę z błędem klienta (Office), a ochrona oparta wyłącznie na AV bywała nieskuteczna. Microsoft wydał poprawki w MS15‑099 (09.2015; 11.2015 re-release), a w 04.2017 domyślnie wyłączył EPS w Office (trwale od 05.2018 w M365/Office 2019+).


Artefakty i logi (co zbierać)

ŹródłoPole / EIDCo szukaćUwagi
Windows Security4688 (Process Creation)WINWORD.EXE / EXCEL.EXE / POWERPNT.EXE / OUTLOOK.EXE → dziecko: cmd.exe, powershell.exe, wscript.exe, cscript.exe, mshta.exe, regsvr32.exe, rundll32.exe, schtasks.exe, certutil.exeSilny wskaźnik post‑exploitation
Sysmon1 (Process Create)Jak wyżej + CommandLine z nietypowymi parametramiKorelować z 7 i 11
Sysmon7 (ImageLoad)ImageLoaded kończy się na \EPSIMP32.FLT ładowane przez OfficeMa sens wyłącznie na starych, niezałatanych hostach/wersjach Office (EPS włączony)
Sysmon11 (FileCreate) / 15 (FileStreamCreated)Zapisy Office do %TEMP% i strumieni z URL/UNC; wkrótce spawn lolbinDobrze korelować w oknie 0–5 min
M365 DefenderDeviceProcessEventsInitiatingProcessFileName ∈ {WINWORD, EXCEL, POWERPNT, OUTLOOK} → child z listy lolbinówT1204.002 / T1203
M365 DefenderEmailEvents, EmailAttachmentInfoZałączniki .doc/.docx/.rtf z nietypowych nadawców, tematy kampanii APTWspiera triage Initial Access
Exchange OnlineAudit/SearchCompliance Search po Attachments:*.epsPo stronie poczty
CloudTrail (S3 Data Events)GetObjectPobrania dokumentów z rozszerzeniami .doc/.docx/.rtf/.eps z nieznanych lokalizacji/IPOpcjonalne, jeśli hosting w S3
K8s audit / ESXi[brak danych / zwykle nie dotyczy]Eksploatacja dotyczy klienta Office

Źródła podatności i wersji: NVD/MS15‑099; KEV potwierdza eksploatację w realu.


Detekcja (praktyczne reguły)

Sigma (dwie gotowe reguły)

A) Office → nietypowe procesy potomne (T1204.002 / T1203 / T1566.001)

title: Office Spawns Unusual Child Process (EPS/CVE-2015-2545 tradecraft)
id: 1b3ef8a6-5d5e-4f79-8c42-3f9f5f0c9b15
status: stable
description: Detects Office applications spawning suspicious system utilities often used post-exploitation.
references:
  - https://attack.mitre.org/techniques/T1204/002/
  - https://attack.mitre.org/techniques/T1203/
  - https://attack.mitre.org/techniques/T1566/001/
tags:
  - attack.T1204.002
  - attack.T1203
  - attack.T1566.001
logsource:
  category: process_creation
  product: windows
detection:
  parent_office:
    ParentImage|endswith:
      - '\WINWORD.EXE'
      - '\EXCEL.EXE'
      - '\POWERPNT.EXE'
      - '\OUTLOOK.EXE'
  suspicious_child:
    Image|endswith:
      - '\cmd.exe'
      - '\powershell.exe'
      - '\wscript.exe'
      - '\cscript.exe'
      - '\mshta.exe'
      - '\regsvr32.exe'
      - '\rundll32.exe'
      - '\schtasks.exe'
      - '\certutil.exe'
  condition: parent_office and suspicious_child
falsepositives:
  - Legalne dodatki Office, automatyzacja skryptowa w działach DTP
level: high
fields:
  - ParentImage
  - Image
  - CommandLine
  - ParentCommandLine
  - User

B) (Środowiska legacy) Ładowanie filtra EPS przez Office

title: Office Loads EPS Filter (EPSIMP32.FLT) - Legacy Host
id: 0e7a0c6e-c9f0-4c8a-b0a3-7c3a1d0a9c01
status: experimental
description: Detects image load of EPSIMP32.FLT by Office processes (should be disabled on modern Office).
tags: [ attack.T1203, attack.T1204.002 ]
logsource:
  category: image_load
  product: windows
detection:
  selection:
    ImageLoaded|endswith: '\EPSIMP32.FLT'
    Image|endswith:
      - '\WINWORD.EXE'
      - '\EXCEL.EXE'
      - '\POWERPNT.EXE'
  condition: selection
falsepositives:
  - Stare, niezałatane instalacje Office z włączonym EPS
level: medium

Kontekst ATT&CK i status technik: T1203, T1204.002 oraz T1566.001 w ATT&CK v18.0.


Splunk (SPL)

Office → nietypowe dziecko

index=endpoint sourcetype IN ("Sysmon:ProcessCreate","WinEventLog:Security")
| eval Parent=coalesce(ParentImage,ParentProcessName)
| eval Image=coalesce(Image,NewProcessName)
| where like(lower(Parent), "%\\winword.exe")
   OR like(lower(Parent), "%\\excel.exe")
   OR like(lower(Parent), "%\\powerpnt.exe")
   OR like(lower(Parent), "%\\outlook.exe")
| where like(lower(Image), "%\\cmd.exe")
   OR like(lower(Image), "%\\powershell.exe")
   OR like(lower(Image), "%\\wscript.exe")
   OR like(lower(Image), "%\\cscript.exe")
   OR like(lower(Image), "%\\mshta.exe")
   OR like(lower(Image), "%\\regsvr32.exe")
   OR like(lower(Image), "%\\rundll32.exe")
   OR like(lower(Image), "%\\schtasks.exe")
   OR like(lower(Image), "%\\certutil.exe")
| stats values(CommandLine) as cmd by _time host user Parent Image
| sort - _time

Ładowanie EPSIMP32.FLT (Sysmon EID 7)

index=endpoint sourcetype="Sysmon:ImageLoad"
ImageLoaded="*\\EPSIMP32.FLT" (ProcessImage="*\\WINWORD.EXE" OR ProcessImage="*\\EXCEL.EXE" OR ProcessImage="*\\POWERPNT.EXE")
| table _time host ProcessImage ImageLoaded Signed Status

KQL (Microsoft 365 Defender – Advanced Hunting)

// Office -> suspicious child
DeviceProcessEvents
| where InitiatingProcessFileName in~ ("WINWORD.EXE","EXCEL.EXE","POWERPNT.EXE","OUTLOOK.EXE")
| where FileName in~ ("cmd.exe","powershell.exe","wscript.exe","cscript.exe","mshta.exe","regsvr32.exe","rundll32.exe","schtasks.exe","certutil.exe")
| project Timestamp, DeviceName, InitiatingProcessFileName, FileName, FolderPath, ProcessCommandLine, InitiatingProcessCommandLine, AccountName
| order by Timestamp desc
// (Legacy) EPS filter load by Office
DeviceImageLoadEvents
| where InitiatingProcessFileName in~ ("WINWORD.EXE","EXCEL.EXE","POWERPNT.EXE")
| where FileName endswith "EPSIMP32.FLT"
| project Timestamp, DeviceName, InitiatingProcessFileName, FileName, FolderPath, SHA256

CloudTrail query (CloudWatch Logs Insights — gdy dokument hostowany w S3)

fields @timestamp, eventName, requestParameters.bucketName as bucket, requestParameters.key as key, sourceIPAddress, userAgent
| filter eventSource = "s3.amazonaws.com"
| filter eventName in ["GetObject","GetObjectVersion"]
| filter key like /(?i)\.(doc|docx|rtf|ppt|pptx|pps|eps)$/ 
| sort @timestamp desc

Pamiętaj: aby widzieć Data Events S3, muszą być włączone dla bukietu.


Elastic / EQL

process where
  process.parent.name in ("WINWORD.EXE","EXCEL.EXE","POWERPNT.EXE","OUTLOOK.EXE") and
  process.name in ("cmd.exe","powershell.exe","wscript.exe","cscript.exe","mshta.exe","regsvr32.exe","rundll32.exe","schtasks.exe","certutil.exe")

(opcjonalnie — sekwencja z ładowaniem filtra EPS na hostach legacy)

sequence by host.id with maxspan=5m
  [process where process.name in ("WINWORD.EXE","EXCEL.EXE","POWERPNT.EXE")]
  [image_load where file.name == "EPSIMP32.FLT"]
  [process where process.name in ("cmd.exe","powershell.exe","mshta.exe","rundll32.exe","regsvr32.exe")]

Heurystyki / korelacje

  • Korelacja czasowa 0–5 min: zapis plików Office w %TEMP% → uruchomienie lolbin.
  • Office + ImageLoad EPSIMP32.FLT (na starszych hostach) → wysoka waga.
  • EmailEvents ↔ DeviceProcessEvents: załącznik → otwarcie → spawn lolbin.
  • Nietypowe strefy czasowe/IP dla GetObject z S3 lub pobrania dokumentu.
  • Blok EPS w orgu: każdy ImageLoad EPSIMP32.FLT = anomalia konfiguracyjna.

False positives / tuning

  • Legalne dodatki Office (DTP, automatyzacje) mogą spawnować procesy — zastosuj listy wyjątków dla znanych ścieżek/podpisów.
  • W środowiskach, gdzie EPS jest per-policy włączony (np. starsze stacje offline), potwierdzaj kontekst (źródło pliku, nadawca, reputacja).
  • Zmniejsz FP przez kontekst: brak interakcji użytkownika, nietypowe CommandLine, rzadkie child process, procesy sieciowe zaraz po otwarciu dokumentu.

Playbook reagowania (SOC)

  1. Triage alertu: potwierdź łańcuch Office → child → sieć/pliki oraz ewentualny EPSIMP32.FLT.
  2. Izolacja hosta (MDE): Live Response / Isolate device.
  3. Hunting w M365:
    • KQL (sekcja 7) → wylistuj inne hosty/użytkowników z tym samym nadawcą/załącznikiem.
    • EmailEvents / EmailAttachmentInfo: koreluj temat, nadawcę, hash załącznika.
  4. Containment:
    • Quarantine pliku i StopAndQuarantineFile (MDE).
    • W Exchange Online (Compliance): wyszukaj i usuń wiadomości z EPS: New-ComplianceSearch -Name "EPS-bulk" -ExchangeLocation All -ContentMatchQuery 'attachments:*.eps' Start-ComplianceSearch -Identity "EPS-bulk" New-ComplianceSearchAction -SearchName "EPS-bulk" -Purge -PurgeType SoftDelete
  5. Eradication:
    • Upewnij się, że hosty mają zainstalowane poprawki MS15‑099 lub nowsze; sprawdź, czy EPS jest wyłączony (w nowoczesnych Office jest domyślnie).
  6. Recovery: sprawdź trwałość (Run/Services/Tasks); rotacja haseł kont interaktywnych, jeśli były użyte.
  7. Lessons learned: wymuś blokadę załączników EPS na bramkach, włącz szkolenie użytkowników i pre‑filter DMARC/SPF/DKIM.

Przykłady z kampanii / case studies

  • PLATINUM (TwoForOne): pierwsze wykryte użycie CVE‑2015‑2545 (sierpień 2015); później porzucone po patchach.
  • APT16 (Tajwan, 2015): wariant exploita EPS, łańcuch spearphishing + ELMER.
  • EvilPost (Japonia, 2015), SPIVY oraz kampania Danti (2016): konsekwentne używanie EPS w DOCX; omówienia telemetryczne i szczegóły shellcode.
  • FireEye/Mandiant “The EPS Awakens”: opis wykorzystania PostScript do wywołania korupcji pamięci oraz 0‑day w momencie ujawnienia.

Lab (bezpieczne testy) — przykładowe komendy

Tylko w izolowanym środowisku testowym. Celem jest walidacja detekcji, nie eksploatacja luki.

  • Atomic Red Team — T1566.001 (Spearphishing Attachment): ćwicz pipeline pocztowy bez złośliwości (pobranie przykładowego dokumentu/artefaktu), aby sprawdzić korelacje EmailEvents → DeviceProcessEvents.
  • Atomic Red Team — T1204.002 (User Execution: Malicious File): uruchom testy, które symulują uruchomienie nietypowych child process przez aplikacje użytkownika (bez exploitów).
    • Instalacja narzędzi (lab): patrz Invoke‑AtomicRedTeam i dokumentacja uruchamiania lokalnego. IEX (IWR 'https://raw.githubusercontent.com/redcanaryco/invoke-atomicredteam/master/install-atomicredteam.ps1'); Install-AtomicRedTeam -getAtomics # Przykład: uruchom scenariusze T1204.002 bez złośliwych payloadów Invoke-AtomicTest T1204.002 -ShowDetailsBrief Po teście wykonaj cleanup zgodnie z instrukcjami atomika.

Mapowania (Mitigations, powiązane techniki)

Mitigations (ATT&CK):

  • M1051 — Update Software: bezwzględne łatanie Office (MS15‑099 i nowsze).
  • M1054 — Software Configuration: globalna blokada EPS (wspierana przez Microsoft; domyślnie wyłączone od 2017 r., zniesione obejście rejestrem w 2018 r.).
  • M1037 — Filter Network Traffic: blokady na bramkach pocztowych/http, sandboxing załączników.

Powiązane techniki ATT&CK:

  • T1566.001 (wektor wejścia — spearphishing attachment),
  • T1204.002 (wykonanie przez użytkownika),
  • T1203 (exploitation klienta).

Źródła / dalsza literatura

  • NVD — CVE‑2015‑2545 (opis, CVSS v3.1 7.8, KEV) (NVD)
  • Microsoft MS15‑099 — biuletyn bezpieczeństwa (patch, wektor przez EPS) (Microsoft Learn)
  • Microsoft: wsparcie dla EPS wyłączone w Office (od 2017‑04‑11; trwałe wyłączenie obejścia rejestrem od 2018‑05) (Microsoft Support)
  • Kaspersky Securelist (2016): „CVE‑2015‑2545: overview of current threats” — kampanie APT, omijanie ASLR/DEP, EPSIMP32.FLT (securelist.com)
  • Mandiant/FireEye: „The EPS Awakens” — analiza zero‑day (CVE‑2015‑2545) (Google Cloud)
  • CISA — Known Exploited Vulnerabilities Catalog (wpis CVE‑2015‑2545, dodany 2022‑03‑03) (CISA)
  • MITRE ATT&CK: T1203, T1204.002, T1566.001; wersja v18.0 (2025‑10‑28) (MITRE ATT&CK)

Checklisty dla SOC / CISO

SOC (operacyjne):

  • Włącz reguły: Office → child process (cmd/powershell/wscript/mshta/…); EPSIMP32.FLT (legacy).
  • Koreluj EmailEvents ↔ DeviceProcessEvents (okno 0–5 min).
  • Blokuj .eps na bramkach pocztowych i w DLP.
  • Hunt na stacjach z przestarzałym Office; potwierdź brak możliwości wstawiania EPS.
  • W razie incydentu: izolacja hosta, purge wiadomości, unieważnienie tokenów, IOC sweep.

CISO (strategiczne):

  • Wymuszone aktualizacje Office (M1051) oraz polityka „no‑EPS”.
  • Regularne testy kontrolne (Atomic Red Team) dla T1566.001/T1204.002.
  • KPI: MTTR od alertu Office→child, odsetek stacji z zablokowanym EPS, E2E e-mail sandbox rate.
  • Wdrożona polityka filtrowania treści i reputacji nadawcy (DMARC/SPF/DKIM).

Podsumowanie ryzyka: mimo wieku, CVE‑2015‑2545 pozostaje istotny kontekstowo (retro/legacy, archiwa poczty). Najlepszą obroną są: aktualizacje, blok EPS, detekcje łańcucha Office→lolbin i silne kontrole pocztowe.