Archiwa: Windows - Strona 35 z 65 - Security Bez Tabu

CVE-2025-14847 (MongoDB Server) — wyciek pamięci heap przez zlib w protokole MongoDB

TL;DR

CVE-2025-14847 to podatność w MongoDB Server związana z obsługą zlib w kompresji sieciowej protokołu MongoDB: niespójne pola długości w nagłówkach skompresowanych wiadomości mogą doprowadzić do zwrócenia fragmentów niezainicjalizowanej pamięci heap do klienta bez uwierzytelnienia.
Dla SOC oznacza to: jeśli instancja MongoDB jest wystawiona na Internet, atakujący może „wyciągać” z odpowiedzi wrażliwe fragmenty pamięci procesu (potencjalnie dane aplikacyjne/sekrety zależnie od tego, co akurat było w RAM). Priorytet: patch do wersji naprawionych lub czasowo usuń zlib z kompresorów.


Krótka definicja techniczna (1 akapit)

CVE-2025-14847 to błąd klasy CWE-130 polegający na niewłaściwej obsłudze niespójnych parametrów długości w zlib-compressed protocol headers MongoDB, co umożliwia zdalnemu, nieautoryzowanemu klientowi odczyt niezainicjalizowanej pamięci heap poprzez odpowiedzi serwera.


Gdzie występuje / przykłady platform (Windows, AD, AWS, Azure, GCP, K8s, ESXi, M365)

Windows (self-hosted):

  • mongod.exe/mongos.exe uruchomione jako usługa (często port 27017) — ryzyko rośnie, gdy bind/listen jest „na świat” i gdy zlib pozostaje włączony (domyślnie jest).

AD (Active Directory):

  • Bezpośrednio „nie dotyczy” (to nie jest podatność AD), ale realnie MongoDB bywa konsumowane przez aplikacje domenowe; wyciek pamięci może pośrednio ujawnić np. tokeny/sekrety aplikacyjne trzymane w RAM.

AWS (EC2 / EKS / self-managed):

  • EC2 z Security Group otwierającą 27017/27018 do 0.0.0.0/0 → klasyczny scenariusz T1190.
  • EKS: MongoDB jako StatefulSet; ekspozycja przez Service type=LoadBalancer/Ingress/NodePort zwiększa ryzyko.

Azure (VM / AKS):

  • VM z publicznym IP + NSG pozwalający na 27017; AKS analogicznie jak EKS.

GCP (Compute Engine / GKE):

  • Publiczny endpoint + reguły FW do 27017; w GKE ekspozycja przez Service LB.

Kubernetes (K8s):

  • Szczególnie ryzykowne: publiczny LoadBalancer dla MongoDB lub brak NetworkPolicy dla namespace z bazą.

ESXi:

  • Pośrednio: gdy MongoDB stoi na VM — liczą się zasady ekspozycji/segmentacji sieci, snapshoty do IR itp.

M365:

  • Zwykle „nie dotyczy” (chyba że logi/alerty spływają do Sentinel/MDE; sama podatność jest po stronie serwera MongoDB).

Ważne operacyjnie: MongoDB informował, że Atlas fleet został spatchowany i „nie ma dowodów” na wykorzystanie ani kompromitację danych klientów; dotyczy to jednak usług zarządzanych — self-hosted musi być zaktualizowany osobno.


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

Negocjacja kompresji i dlaczego zlib ma znaczenie

MongoDB wspiera kompresję ruchu między klientem a serwerem (OP_COMPRESSED). Domyślnie zarówno mongod, jak i mongos mają ustawione kompresory sieciowe na snappy,zstd,zlib (w tej kolejności).
CVE-2025-14847 dotyczy ścieżki obsługi zlib: spreparowane (niepoprawne) nagłówki skompresowanych wiadomości z niespójnymi długościami mogą doprowadzić do sytuacji, w której serwer zwraca w odpowiedzi fragmenty niezainicjalizowanej pamięci heap.

Co realnie wycieka z heap i jak to eskaluje ryzyko

Ponieważ mowa o pamięci procesu, w praktyce „to, co wycieknie”, zależy od:

  • obciążenia bazy (zapytania/odpowiedzi, BSON, bufory),
  • bibliotek i alokacji w danym buildzie,
  • tego, co aplikacje trzymają w pamięci (np. fragmenty dokumentów, metadane sesji, czasem sekrety).

Oficjalny wektor CVSS od CNA wskazuje wysoki wpływ na poufność i brak wpływu na integralność/dostępność (C:H / I:N / A:N).

Dlaczego to pasuje do ATT&CK T1190

Jeżeli MongoDB jest publicznie wystawione (Internet-facing), to atakujący wykorzystuje błąd w usłudze nasłuchującej na gnieździe TCP — to klasyczny model Exploit Public-Facing Application (T1190) w taktyce Initial Access (nawet jeśli „efektem” jest wyciek informacji, a nie RCE).


Artefakty i logi (tabela — EID, CloudTrail events, K8s audit, M365 operations)

Obszar obserwacjiWindows EID (przykłady)CloudTrail (AWS)K8s AuditM365 operationsCo zbierać / na co patrzeć
Ekspozycja portu MongoDB (27017/27018)Sysmon EID 3 (NetworkConnect), Windows Filtering Platform 5156AuthorizeSecurityGroupIngress, ModifySecurityGroupRules, RevokeSecurityGroupIngresspatch/create Service (LoadBalancer/NodePort), Ingress, NetworkPolicyN/ASkoki nowych źródeł łączących się do 27017; ruch z Internetu do DB zamiast z warstwy app
Start procesu MongoDB i parametry ryzykaSysmon EID 1 (ProcessCreate), Security 4688N/Acreate/patch Deployment/StatefulSet (args/env/config)N/ACzy mongod/mongos startuje z --bind_ip_all / 0.0.0.0 oraz czy wymuszasz wyłączenie zlib
Zmiany konfiguracji kompresjiEID 1/4688 + (opcjonalnie) audyt plików mongod.confN/Azmiany ConfigMap/Secret montowanych do podaN/ACzy net.compression.compressors nadal zawiera zlib (domyślnie zawiera)
„Skany” i bursty połączeń do MongoDBSysmon EID 3 + firewall(opcjonalnie) GuardDuty/VPC Flow Logs poza CloudTrailN/AN/AWysoka liczba krótkich połączeń, nietypowe geolokacje/ASN, brak auth events (bo pre-auth)
Działania IR/patchEID 1/4688 (restart usługi), systemd logsStartInstances/StopInstances (jeśli robisz)rollout restart, delete podN/AOkno zmian + walidacja, że wersja/kompresja jest zgodna z polityką

Detekcja (praktyczne reguły)

Sigma (gotowa reguła)

Cel: wykryć hosty, na których MongoDB jest uruchamiane w sposób zwiększający ekspozycję na CVE-2025-14847 (publiczny bind i/lub jawnie włączone zlib).
Uwaga: to jest detekcja „posture / hardening”, nie sygnatura exploit payload.

title: MongoDB Server Risky Startup Options (CVE-2025-14847 / zlib / public bind)
id: 3f7f2c2e-5b5c-4a6c-9b5e-6b7f9e3a8a21
status: experimental
description: >
  Detects mongod/mongos started with zlib network compression enabled and/or bound to all interfaces,
  increasing exposure to CVE-2025-14847 (unauth heap memory read via zlib compressed protocol).
references:
  - https://nvd.nist.gov/vuln/detail/CVE-2025-14847
  - https://jira.mongodb.org/browse/SERVER-115508
  - https://www.mongodb.com/docs/manual/reference/configuration-options/
author: Badacz CVE
date: 2025/12/25
tags:
  - attack.initial_access
  - attack.t1190
logsource:
  category: process_creation
  product: windows
detection:
  selection_image:
    Image|endswith:
      - '\mongod.exe'
      - '\mongos.exe'

  selection_public_bind:
    CommandLine|contains:
      - '--bind_ip_all'
      - '--bind_ip 0.0.0.0'
      - 'bindIpAll'
      - 'bindIp: 0.0.0.0'

  selection_zlib_cli:
    CommandLine|contains|all:
      - 'networkMessageCompressors'
      - 'zlib'

  selection_zlib_cfg_hint:
    CommandLine|contains|all:
      - 'net.compression.compressors'
      - 'zlib'

  condition: selection_image and (selection_public_bind or selection_zlib_cli or selection_zlib_cfg_hint)
fields:
  - Image
  - CommandLine
falsepositives:
  - MongoDB za reverse-proxy / w prywatnej sieci, gdzie bind na 0.0.0.0 jest akceptowalny
  - Środowiska, gdzie zlib jest wymagany (wydajność/kompatybilność), ale port nie jest publiczny
level: medium

Dlaczego to ma sens: zlib jest domyślnie włączony w mongod/mongos (snappy,zstd,zlib), więc realna mitigacja często polega na jego usunięciu/wyłączeniu.


Splunk (SPL)

A) Wykrywanie nieautoryzowanych źródeł łączących się do MongoDB (logi MongoDB):

index=mongodb sourcetype=mongodb:log ("connection accepted" OR "Connection accepted")
| rex field=_raw "from (?<src_ip>\d{1,3}(\.\d{1,3}){3}):(?<src_port>\d+)"
| stats count as connections dc(src_port) as uniq_src_ports by src_ip
| sort - connections

B) Bursty krótkich połączeń (sygnał skanowania / prób exploitacji pre-auth):

index=mongodb sourcetype=mongodb:log ("connection accepted" OR "end connection")
| rex field=_raw "connection accepted from (?<src_ip>\d{1,3}(\.\d{1,3}){3})"
| timechart span=5m count by src_ip limit=20

C) (Jeśli masz VPC/NSG/Firewall w Splunku) — inbound na 27017 z Internetu:

index=netflow (dest_port=27017 OR dest_port=27018) action=allowed
| stats sum(bytes) as bytes count as flows by src_ip dest_ip dest_port
| sort - flows

KQL (Azure / Microsoft Sentinel)

A) Azure Firewall (NetworkRule) — ruch do 27017/27018:

AzureDiagnostics
| where Category == "AzureFirewallNetworkRule"
| where msg_s has "Dport: 27017" or msg_s has "Dport: 27018"
| summarize flows=count() by SourceIP=src_ip_s, DestinationIP=dst_ip_s, bin(TimeGenerated, 5m)
| order by flows desc

B) Wykrywanie publicznej ekspozycji przez zmiany NSG (Activity Log):

AzureActivity
| where OperationNameValue has_any ("MICROSOFT.NETWORK/NETWORKSECURITYGROUPS/SECURITYRULES/WRITE",
                                   "MICROSOFT.NETWORK/NETWORKSECURITYGROUPS/WRITE")
| where ActivityStatusValue == "Succeeded"
| where Properties has "27017" or Properties has "27018"
| project TimeGenerated, Caller, OperationNameValue, ResourceGroup, Resource, Properties
| order by TimeGenerated desc

CloudTrail query (AWS CLI/CloudWatch)

A) CloudTrail Lake (SQL) — kto otworzył MongoDB na świat:

SELECT eventTime, userIdentity.arn, sourceIPAddress, eventName, requestParameters
FROM <your_cloudtrail_lake_table>
WHERE eventName IN ('AuthorizeSecurityGroupIngress','ModifySecurityGroupRules','RevokeSecurityGroupIngress')
  AND requestParameters LIKE '%27017%'
ORDER BY eventTime DESC;

B) AWS CLI (lookup-events) + filtr portów (przykład z jq):

aws cloudtrail lookup-events \
  --lookup-attributes AttributeKey=EventName,AttributeValue=AuthorizeSecurityGroupIngress \
  --start-time 2025-12-01T00:00:00Z \
  --end-time   2025-12-25T23:59:59Z \
  --max-results 50 \
| jq -r '.Events[]
  | select(.CloudTrailEvent | test("27017|27018"))
  | [.EventTime, .Username, .EventName] | @tsv'

Elastic (EQL) przykłady

A) Inbound connections do MongoDB z adresów publicznych (Elastic Defend / endpoint network events):

network
where event.type == "start"
  and destination.port in (27017, 27018)
  and network.direction == "inbound"
  and not cidrMatch(source.ip, "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16")

B) Start mongod/mongos z parametrami wysokiego ryzyka:

process
where event.type == "start"
  and process.name in ("mongod", "mongos", "mongod.exe", "mongos.exe")
  and (
    process.command_line like "*bind_ip_all*" or
    process.command_line like "*bind_ip 0.0.0.0*" or
    process.command_line like "*networkMessageCompressors*" and process.command_line like "*zlib*"
  )

Heurystyki / korelacje (co łączyć)

  1. Asset + posture: lista instancji MongoDB + wersja + czy port publiczny + czy zlib wyłączony.
    • zlib jest domyślnie włączony → jeśli nie zrobiłeś hardeningu, traktuj jak „włączone”.
  2. Netflow/VPC Flow Logs/NSG Flow Logs: wzrost liczby połączeń do 27017 z nietypowych ASN/geo + krótkie sesje.
  3. MongoDB logs: dużo connection accepted bez towarzyszących zdarzeń auth/audit (pre-auth).
  4. Change management: korelacja w czasie z rolloutem poprawek (upgrade/konfig) i spadkiem prób połączeń.

False positives / tuning

Typowe FP:

  • skanowanie wewnętrzne (CMDB, monitoring, VA tools),
  • load balancer / NAT pokazuje jeden adres źródłowy,
  • legalne aplikacje o wysokiej częstotliwości połączeń.

Tuning:

  • allowlist znanych CIDR aplikacji/ETL/backup,
  • alertuj tylko dla źródeł spoza prywatnych zakresów,
  • progi: np. >N nowych IP w 10 minut lub >X połączeń/IP/5 min.

Playbook reagowania

  1. Triage ekspozycji
    • Sprawdź, czy MongoDB jest Internet-facing (SG/NSG/Firewall/Ingress).
    • Jeśli tak: priorytet P1 (T1190).
  2. Weryfikacja wersji
    • Na hoście:mongod --version mongos --version
    • Porównaj z wersjami naprawionymi: 8.2.3 / 8.0.17 / 7.0.28 / 6.0.27 / 5.0.32 / 4.4.30.
  3. Natychmiastowa mitigacja (jeśli nie możesz patchować „teraz”)
    • Wyłącz zlib w kompresji sieciowej, ustawiając kompresory na snappy,zstd albo disabled.
    • Przykład (wariant uruchomieniowy):mongod --networkMessageCompressors snappy,zstd # albo całkowicie: mongod --networkMessageCompressors disabled
  4. Remediacja docelowa
    • Upgrade do wersji naprawionej (jw.).
  5. Hunting / impact assessment
    • Przejrzyj logi połączeń do 27017 (źródła, wolumeny, okna czasowe).
    • Jeśli DB była publiczna: potraktuj to jak incydent „potential data exposure”.
  6. Rotacja sekretów (jeśli ekspozycja była realna)
    • Rotuj hasła użytkowników DB, klucze aplikacyjne, tokeny (w zależności od tego, co mogło znaleźć się w pamięci procesu).
    • Wymuś TLS + auth + segmentację sieci (minimalny blast radius).

Przykłady z kampanii / case studies

  • Brak publicznie potwierdzonych kampanii APT/ransomware wykorzystujących CVE-2025-14847 „w dziczy” na moment publikacji źródeł; MongoDB wskazywał, że w Atlas „nie ma dowodów” na wykorzystanie ani kompromitację danych i że flota została spatchowana.
  • Ten CVE jest jednak modelowym przykładem ryzyka T1190 dla baz danych (public-facing socket + bug w parserze/protokole).

Lab (bezpieczne testy) — przykładowe komendy

  1. Sprawdź, czy serwer nadal pozwala na zlib
    • Ponieważ pole hello.compression pojawia się tylko, gdy kompresja jest używana, wymuś po stronie klienta zlib i zobacz, czy serwer je negocjuje.
    • Przykład:mongosh "mongodb://<host>:27017/?compressors=zlib" --eval 'db.hello()'
    • Jeśli w wyniku pojawia się "compression": ["zlib"], to zlib jest aktywnie używane (czyli mitigacja nie została wdrożona).
  2. Weryfikacja domyślnej listy kompresorów (dla wiedzy operacyjnej)
    • MongoDB domyślnie: snappy,zstd,zlib.
  3. Weryfikacja ustawień w pliku konfiguracyjnymsudo grep -n "compression" -n /etc/mongod.conf sudo grep -n "bindIp" -n /etc/mongod.conf
  4. K8s: sprawdź argumenty/ConfigMapkubectl -n <ns> get sts <mongo-sts> -o yaml | grep -n "networkMessageCompressors" -n kubectl -n <ns> get cm -o yaml | grep -n "net.compression" -n

Mapowania (Mitigations, Powiązane techniki)

ATT&CK (główne):

  • T1190 Exploit Public-Facing ApplicationTA0001 Initial Access

Dlaczego nie „RCE” w mapowaniu?
Opis CNA/NVD mówi o odczycie niezainicjalizowanej pamięci (information disclosure), a wektor CVSS v3.1 ma I:N/A:N — to nie jest opis skutku typu „arbitrary code execution”.

Mitigations (praktycznie):

  • Patch management / szybka aktualizacja wersji naprawionych
  • Ograniczenie ekspozycji (SG/NSG/Firewall/NetworkPolicy), zasada „DB nie jest publiczna”
  • Wyłączenie zlib (czasowo lub polityką) — snappy,zstd albo disabled

Powiązane techniki (łańcuchowo, zależnie od tego co wycieknie):

  • Potencjalnie: nadużycie ujawnionych sekretów → Valid Accounts (T1078) (jeśli wyciek umożliwi logowanie innymi kanałami).
    (To zależne od środowiska; sam CVE nie gwarantuje przejęcia kont.)

Źródła / dalsza literatura

  • NVD: opis, CVSS, wersje podatne, CWE-130 (NVD)
  • MongoDB JIRA SERVER-115508: fix/upgrade + workaround (wyłączenie zlib) (MongoDB Jira)
  • MongoDB Alerts (CVE-2025-14847): oficjalny wpis „Zlib … may allow memory read” + zakresy wersji (MongoDB)
  • MongoDB Docs: domyślne snappy,zstd,zlib (mongod/mongos) (MongoDB)
  • MongoDB Docs: hello.compression (walidacja negocjacji kompresji) (MongoDB)
  • MITRE ATT&CK: T1190 (tactic Initial Access, last modified) (MITRE ATT&CK)
  • MongoDB Community Hub: komunikat o spatchowaniu Atlas + brak dowodów exploitacji (wg MongoDB) (MongoDB)

Checklisty dla SOC / CISO

SOC (operacyjnie, dziś):

  • Zidentyfikuj wszystkie mongod/mongos i ich wersje.
  • Sprawdź ekspozycję 27017/27018 (Internet-facing = P1).
  • Jeśli nie możesz patchować natychmiast: usuń zlib z kompresorów (snappy,zstd lub disabled).
  • Wdróż detekcje: bursty połączeń, nowe źródła, zmiany SG/NSG.
  • Jeśli DB była publiczna: threat hunting + ocena ryzyka wycieku danych.

CISO / Risk:

  • Wymuś politykę: „bazy danych nie mają publicznych endpointów”.
  • SLA na patchowanie krytycznych/High dla usług publicznych.
  • Segmentacja sieci + Zero Trust dla dostępu do DB.
  • Standard hardening MongoDB: auth/TLS, ograniczenia kompresji, monitoring i centralne logowanie.

CVE-2025-3232 — Mitsubishi Electric Europe B.V. smartRTU

TL;DR

  • CVE-2025-3232 dotyczy Mitsubishi Electric Europe B.V. smartRTU (≤ 3.37) i polega na braku uwierzytelnienia dla krytycznej funkcji (CWE-306) – w praktyce zdalny, nieuwierzytelniony atakujący może obejść kontrolę dostępu i przez konkretną trasę API doprowadzić do wykonania poleceń systemu operacyjnego.
  • Ocena ryzyka (CNA/ICS-CERT): CVSS v3.1 7.5 (HIGH); NVD pokazuje też CVSS v4 8.7 (HIGH) (ocena NVD “not yet provided”, widoczna jest ocena CNA).
  • To część pakietu problemów w smartRTU opisanego w ICSA-25-105-09 – obok CVE-2025-3128 (CWE-78, OS Command Injection, CVSS 9.8), który bywa opisywany jako kolejny krok po obejściu uwierzytelnienia.
  • Najważniejsze działania defensywne (kompensacyjne): zdejmij ekspozycję z Internetu, ogranicz dostęp do zaufanych sieci, stosuj VPN / firewall, a jeśli HTTP/HTTPS musi być wystawione – rozważ WAF.
  • W materiałach CISA/CSAF (ICSA-25-105-09) wskazano, że nie było raportów o publicznie znanej exploitacji ukierunkowanej na tę podatność (stan na publikację/rewizję advisory).

Krótka definicja techniczna

CVE-2025-3232 to podatność typu Missing Authentication for Critical Function (CWE-306) w smartRTU (≤ 3.37), umożliwiająca atakującemu z sieci wywołanie wrażliwej funkcji przez określoną trasę API bez poprawnego uwierzytelnienia, co według opisu CVE może skutkować wykonaniem dowolnych poleceń OS (impact wg CVSS: Integrity = High). W kontekście MITRE ATT&CK (ICS) najbliższe mapowanie to T0819 Exploit Public-Facing Application (Initial Access), często w praktyce łączone też z T0866 Exploitation of Remote Services oraz wykonaniem komend po przejęciu kontekstu (np. T0807 Command-Line Interface).


Gdzie występuje / przykłady platform

  • ICS/OT: smartRTU (urządzenie/komponent RTU używany w środowiskach przemysłowych, zwykle z interfejsem web/API do zarządzania).
  • Windows: pośrednio (stacje inżynierskie/HMI/jump hosty, z których administruje się smartRTU) – przydatne do korelacji EDR/SIEM.
  • AD: zwykle nie dotyczy bezpośrednio (chyba że integracja/SSO w warstwie IT).
  • AWS / Azure / GCP: nie dotyczy samej podatności, ale może dotyczyć ekspozycji (np. reverse proxy/WAF w chmurze).
  • K8s: nie dotyczy.
  • ESXi: nie dotyczy.
  • M365: nie dotyczy.

Szczegółowy opis techniki

Jak to działa (perspektywa defensywna)

W smartRTU istnieje funkcjonalność dostępna przez interfejs web/API, która powinna być chroniona uwierzytelnieniem/autoryzacją. W przypadku CVE-2025-3232 mechanizm ten jest niewystarczający: krytyczna funkcja (wywoływana przez “specific API route”) może zostać uruchomiona bez poprawnej autentykacji, co według opisu CVE prowadzi do wykonania poleceń OS.

Cele atakującego

W OT/ICS taki wektor wejścia jest atrakcyjny, bo:

  • daje zdalny foothold na urządzeniu brzegowym (RTU), często stojącym na styku sieci (telemetria, zdalne zarządzanie),
  • może umożliwić manipulację konfiguracją, “tampering” oraz potencjalnie przygotowanie gruntu pod kolejne kroki (ruch boczny, zmiana parametrów, sabotaż).

Dlaczego jest skuteczna

  • Brak wymogu poświadczeń (PR:N) i niska złożoność (AC:L) w CVSS oznacza, że przy złej ekspozycji (Internet / nieufne segmenty) ryzyko operacyjne szybko rośnie.
  • OT często ma ograniczony telemetry/EDR na urządzeniach embedded, więc “signal” detekcyjny bywa głównie sieciowy (FW/WAF/IDS) i z elementów pośredniczących.

Artefakty i logi

Źródło / warstwaEID (Windows)CloudTrail eventsK8s auditM365 operationsCo warto zbierać / na co patrzeć
Dostęp do interfejsu web/API smartRTUN/AN/AN/AN/ALogi HTTP (reverse proxy/WAF), metoda POST/PUT/DELETE, nietypowe URI, skoki 4xx/5xx, nietypowe UA, duże payloady
Firewall / IDS/IPSN/AN/AN/AN/AInbound do panelu zarządzania (80/443 lub inne), źródła spoza allowlist, skanowanie, bursty requestów
Host/EDR na stacji inżynierskiej/jump hoście (jeśli zarządzanie z Windows)4688, 4625/4624 (korelacje logowań)N/AN/AN/ANietypowe procesy uruchomione w kontekście narzędzi admin/remote, “helper tools”, nowe połączenia sieciowe do RTU
Telemetria z urządzenia (jeśli dostępna)N/AN/AN/AN/ASyslog/audit (o ile jest), historia poleceń, zmiany konfiguracji, restarty usług/urządzenia
WAF (jeśli publikujesz web)N/A(raczej) N/AN/AN/AReguły blokujące nietypowe requesty, anomalie w parametrach i nagłówkach; korelacja z ruchem zewnętrznym

Detekcja (praktyczne reguły)

Uwaga praktyczna: w OT często nie masz idealnych logów “z urządzenia”. Dlatego poniżej są reguły, które da się zastosować w warstwie pośredniej (WAF/reverse proxy) albo na hostach, które zbierają procesy (EDR). Nie używam tu żadnych “kroków exploitacji” ani nie podaję konkretnej trasy API – bo publiczne advisory mówi tylko o “specific API route”.

Sigma (gotowa reguła)

title: Possible Web/API Triggered OS Command Execution via Web Server Parent (smartRTU / CVE-2025-3232 context)
id: 3b2b8e3a-3c3d-4d6a-9d7a-1f6b62b8d6c1
status: experimental
description: |
  Detects suspicious shell/process execution spawned by common embedded/web server processes.
  Useful as compensating detection for scenarios where an unauthenticated API route may lead to OS command execution
  (e.g., smartRTU CVE-2025-3232 and related chains).
references:
  - https://nvd.nist.gov/vuln/detail/CVE-2025-3232
  - https://raw.githubusercontent.com/cisagov/CSAF/develop/csaf_files/OT/white/2025/icsa-25-105-09.json
author: "Badacz CVE (SOC/Blue Team)"
date: 2025/12/25
tags:
  - attack.initial_access
  - attack.t1190
  - attack.execution
logsource:
  category: process_creation
  product: linux
detection:
  parent_websrv:
    ParentImage|endswith:
      - /nginx
      - /apache2
      - /httpd
      - /lighttpd
      - /uhttpd
      - /boa
  child_shell:
    Image|endswith:
      - /sh
      - /bash
      - /ash
      - /busybox
  cmd_susp:
    CommandLine|contains:
      - " -c "
      - "wget "
      - "curl "
      - "nc "
      - "mkfifo "
      - "/dev/tcp/"
  condition: parent_websrv and (child_shell or cmd_susp)
falsepositives:
  - Legitimate CGI scripts or admin maintenance jobs that spawn shells from web services
  - Firmware update routines implemented via web backend
level: high

Splunk (SPL)

Wariant A – proxy/WAF access logs (szukamy nieautoryzowanych prób do panelu/API):

index=net* (sourcetype=nginx:access OR sourcetype=apache:access OR sourcetype=waf)
dest_port IN (80,443)
| eval uri=coalesce(uri_path, uri, request)
| search http_method IN ("POST","PUT","DELETE") OR like(uri,"%api%")
| where NOT cidrmatch("10.0.0.0/8", src_ip) AND NOT cidrmatch("192.168.0.0/16", src_ip)
| stats count min(_time) as firstSeen max(_time) as lastSeen values(http_method) values(status) values(uri) by src_ip dest_ip
| sort -count

Wariant B – EDR/host telemetry (webserver → shell):

index=edr* sourcetype=process*
| where (parent_process_name IN ("nginx","httpd","apache2","lighttpd","uhttpd","boa"))
| where (process_name IN ("sh","bash","ash","busybox") OR like(process_command_line,"% -c %"))
| stats count min(_time) max(_time) values(process_command_line) by host user parent_process_name process_name
| sort -count

KQL (Azure)

Defender for Endpoint (jeśli masz DeviceProcessEvents z hostów/jump hostów):

DeviceProcessEvents
| where InitiatingProcessFileName in~ ("nginx","httpd","apache2","lighttpd","uhttpd","boa")
| where FileName in~ ("sh","bash","ash","busybox") or ProcessCommandLine has " -c "
| project Timestamp, DeviceName, AccountName, InitiatingProcessFileName, FileName, ProcessCommandLine
| order by Timestamp desc

Azure WAF / App Gateway (jeśli smartRTU stoi za takim frontem):

AzureDiagnostics
| where Category has "ApplicationGatewayFirewallLog"
| where action_s == "Blocked" or ruleSetType_s =~ "OWASP"
| project TimeGenerated, clientIp_s, requestUri_s, requestMethod_s, message_s, ruleId_s
| order by TimeGenerated desc

CloudTrail query (AWS CLI/CloudWatch)

CloudTrail nie loguje ruchu HTTP do smartRTU (to nie są wywołania AWS API). Jeżeli jednak wystawiasz smartRTU przez AWS WAF/ALB, sensowniejsze jest pytanie CloudWatch Logs Insights na logach WAF:

fields @timestamp, httpRequest.clientIp as srcIp, httpRequest.httpMethod as method, httpRequest.uri as uri, action, terminatingRuleId
| filter method in ["POST","PUT","DELETE"] or uri like /api/
| stats count() as hits, min(@timestamp) as firstSeen, max(@timestamp) as lastSeen by srcIp, method, uri, action
| sort hits desc

Elastic/EQL przykłady

process
where host.os.type == "linux"
  and process.parent.name in ("nginx","httpd","apache2","lighttpd","uhttpd","boa")
  and (
    process.name in ("sh","bash","ash","busybox")
    or process.command_line like "* -c *"
  )

Heurystyki / korelacje

  1. Ruch sieciowy → objaw na hoście: burst requestów HTTP/HTTPS do interfejsu zarządzania + w krótkim oknie czasowym proces potomny typu shell (jeśli masz telemetrię).
  2. Źródło spoza polityki dostępu: jakikolwiek request do panelu/API smartRTU z IP spoza allowlist (VPN/management VLAN).
  3. Zmiany konfiguracyjne / restarty: anomalia w dostępności RTU, restart usług, zmiany parametrów – skorelowane czasowo z nietypowym ruchem do web/API.
  4. Skanowanie: rozproszony ruch do portów zarządczych (80/443) poprzedzający właściwe wywołania.

False positives / tuning

  • Legalna administracja potrafi wyglądać “podejrzanie”, jeśli:
    • admin używa narzędzi automatyzujących (API),
    • są wykonywane update’y/backup/diagnostyka z panelu (może generować wywołania typu POST).
  • Tuning praktyczny:
    • twarda allowlista źródeł (VPN, jump hosty, sieci adminów),
    • baseline “normalnych” URI i metod HTTP,
    • korelacja z oknami serwisowymi (maintenance windows),
    • w EDR: allowlist legalnych skryptów/agentów, które realnie mogą startować shell (jeśli to w ogóle dopuszczalne w Twoim środowisku).

Playbook reagowania (kroki + komendy)

1) Identyfikacja i triage

  • Zrób inventory: gdzie stoi smartRTU i czy wersja jest ≤ 3.37 (to zakres “known affected” w advisory).
  • Sprawdź ekspozycję: czy panel zarządzania jest dostępny z Internetu albo z segmentów nie-OT.

2) Natychmiastowe ograniczenie ekspozycji (kompensacja)

Zgodnie z zaleceniami w advisory:

  • wymuś VPN / firewall przy dostępie zdalnym,
  • ogranicz do LAN i blokuj sieci nieufne,
  • jeśli HTTP/HTTPS musi działać – postaw WAF i ogranicz web client access do zaufanych sieci.

Przykład (Linux firewall na reverse proxy – tylko allowlista):

# tylko przykład – dopasuj interfejs/port
sudo iptables -A INPUT -p tcp --dport 443 -s <TRUSTED_ADMIN_SUBNET_CIDR> -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j DROP

3) Polowanie (hunting)

  • Szukaj anomalii w:
    • logach WAF/proxy: nietypowe metody, częste 4xx/5xx, requesty spoza allowlist,
    • FW/IDS: ruch do portów zarządczych z “dziwnych” źródeł,
    • EDR: webserver → shell (jeśli masz).

4) Jeśli podejrzenie kompromitacji

  • Odizoluj urządzenie od sieci produkcyjnej (w OT zawsze z oceną wpływu na proces).
  • Zabezpiecz logi i artefakty z elementów pośrednich (WAF/FW/jump host).
  • Rotuj hasła/poświadczenia powiązane z dostępem administracyjnym i kanałami zdalnymi.
  • Rozważ kontrolę integralności konfiguracji (co się zmieniło i kiedy).

Przykłady z kampanii / case studies

  • Publiczne materiały dla smartRTU (ICSA-25-105-09 w formacie CSAF) wskazują, że raportującym był Claroty Team82 (w acknowledgments), a w sekcji “Recommended Practices” pada stwierdzenie o braku znanej publicznej exploitacji ukierunkowanej na tę podatność (na moment publikacji/rewizji).

Lab (bezpieczne testy) — przykładowe komendy

Tylko w odseparowanym labie OT (VLAN/lab), za zgodą właściciela środowiska. Celem jest walidacja ekspozycji i detekcji, nie test exploitów.

Test 1: czy urządzenie/panel jest wystawiony tam, gdzie nie powinien

# skan usług (wersje) – tylko własna sieć/lab
nmap -sV -p 80,443 <SMART_RTU_IP>

Test 2: szybka walidacja kontroli dostępu (bez exploitacji)

# sprawdzenie odpowiedzi HTTP nagłówkami (bez “payloadów”)
curl -kI https://<SMART_RTU_IP>/

Test 3: walidacja segmentacji (czy blokuje z nieufnego segmentu)

# próba zestawienia TCP z sieci, która NIE powinna mieć dostępu
nc -vz <SMART_RTU_IP> 443

Test 4: test reguły “webserver → shell” na hostach (symulacja benign)

Na hoście testowym (reverse proxy / lab VM) uruchom kontrolowany łańcuch procesów, żeby sprawdzić czy SIEM/EDR zareaguje:

# benign: tworzy plik, ale generuje charakterystyczny wzorzec "shell -c"
sudo -u www-data /bin/sh -c 'echo healthcheck > /tmp/web-child-test'

Mapowania (Mitigations, Powiązane techniki)

MITRE ATT&CK (ICS) – techniki

  • T0819 – Exploit Public-Facing Application (Initial Access)
  • T0866 – Exploitation of Remote Services (Initial Access, Lateral Movement)
  • T0807 – Command-Line Interface (Execution)

MITRE – przykładowe mitigacje dla T0819 (ICS)

Z karty T0819 jako szczególnie sensowne dla smartRTU:

  • M0950 Exploit Protection (np. WAF)
  • M0930 Network Segmentation (DMZ/segmentacja usług wystawionych)
  • M0948 Application Isolation and Sandboxing (ograniczenie skutków exploitacji)
  • M0926 Privileged Account Management (least privilege, kontrola kont uprzywilejowanych)

Powiązane konteksty podatności

  • CWE-306 (Missing Authentication for Critical Function) dla CVE-2025-3232
  • W tym samym advisory: CVE-2025-3128 (CWE-78, OS Command Injection) – często istotne w analizie łańcucha.

Źródła / dalsza literatura

  • NVD: CVE-2025-3232 (opis, CVSS, CWE, daty publikacji) (NVD)
  • CISA CSAF: ICSA-25-105-09 JSON (zakres wersji ≤3.37, mitigacje, kontekst, “no known public exploitation…”) (GitHub)
  • Mitsubishi Electric Europe: raport PSIRT MEU_PSIRT_2025-3128 (pakiet podatności dla smartRTU) (MITSUBISHI ELECTRIC Europe)
  • Claroty disclosure dashboard dla CVE-2025-3232 (zalecenia mitigacyjne w punktach)
  • MITRE ATT&CK (ICS): T0819, T0866, T0807 (MITRE ATT&CK)

Checklisty dla SOC / CISO

SOC (operacyjnie)

  • Znajdź wszystkie instancje smartRTU i potwierdź wersje (szczególnie ≤ 3.37).
  • Zweryfikuj ekspozycję: czy panel/API nie jest dostępny z Internetu.
  • Włącz logowanie i korelacje na FW/WAF/proxy (źródło IP, URI, metody, statusy).
  • Dodaj reguły “webserver → shell” (jeśli masz telemetrię procesów).
  • Ustal allowlistę źródeł administracyjnych i alertuj na odchylenia.

CISO / właściciel ryzyka

  • Wymuś model dostępu: VPN + jump host + segmentacja (zamiast bezpośredniej ekspozycji).
  • Zdefiniuj kompensacje (WAF, ACL, DMZ) i plan ciągłości działania OT.
  • Oceń ryzyko łańcucha z CVE-2025-3128 (jeśli dotyczy Twojego wdrożenia).
  • Ustal progi eskalacji (kiedy izolujemy RTU, kiedy zatrzymujemy zdalne zarządzanie).

Atak ransomware na rumuńską administrację wodną „Apele Române” (ANAR): ~1000 systemów zaszyfrowanych z użyciem BitLockera

Wprowadzenie do problemu / definicja luki

W weekend 20–22 grudnia 2025 rumuńska Administrația Națională „Apele Române” (ANAR) – instytucja odpowiedzialna za zarządzanie zasobami wodnymi i infrastrukturą hydrotechniczną – potwierdziła incydent typu ransomware, który dotknął ok. 1000 systemów IT w centrali i w niemal wszystkich strukturach regionalnych.

Kluczowy element tej sprawy: zamiast „klasycznego” szyfratora przestępcy mieli nadużyć natywnego mechanizmu Windows – BitLockera – aby zablokować dostęp do danych i wymusić kontakt w sprawie okupu.


W skrócie

  • Kiedy: incydent zgłoszony/ujawniony po 20 grudnia 2025 (atak rozpoczął się 20.12).
  • Skala: ok. 1000 zaszyfrowanych/wyłączonych systemów (m.in. serwery GIS, bazy danych, poczta, WWW, stacje robocze, DNS).
  • Wpływ na OT: według komunikatów systemy operacyjne (OT) i obiekty hydrotechniczne nie ucierpiały, a praca dyspozytorska była prowadzona kanałami głosowymi (telefon/radio).
  • Wymuszenie: pozostawiono notę z żądaniem kontaktu w ciągu 7 dni.
  • Śledztwo: rumuńska DIICOT wszczęła postępowanie „in rem” (na czyn, bez wskazania sprawcy).

Kontekst / historia / powiązania

Ataki na podmioty infrastruktury krytycznej mają zwykle dwa cele: szybkie wymuszenie (okup/downtime) oraz długoterminowe podważenie zaufania do państwa i usług publicznych. W tym przypadku dodatkowym „sygnałem ostrzegawczym” jest to, że choć OT miało pozostać nietknięte, paraliż IT uderza w elementy wspierające: mapowanie zasobów (GIS), raportowanie, komunikację, analitykę i zarządzanie incydentami.

W publicznych doniesieniach nie wskazano sprawcy ani wektora wejścia (na moment publikacji materiałów źródłowych).


Analiza techniczna / szczegóły luki

1) „Ransomware” bez typowego szyfratora: BitLocker jako narzędzie wymuszenia

Wg informacji przekazywanych przez media na podstawie ocen technicznych po stronie rumuńskich instytucji, atakujący użyli legalnego składnika Windows (BitLocker), by zaszyfrować zasoby i wymusić okup. To podejście wpisuje się w trend „living-off-the-land” (LOLBins): zamiast wprowadzać własny binarny szyfrator, przestępca wykorzystuje wbudowane narzędzia systemu, co może utrudniać detekcję opartą wyłącznie o sygnatury.

2) Co to implikuje z punktu widzenia uprawnień?

Żeby masowo „odwrócić” BitLockera przeciw organizacji, atakujący zwykle muszą osiągnąć wysoki poziom uprawnień (administrator lokalny/domenowy) oraz kontrolę nad mechanizmami zarządzania stacjami/serwerami (np. domena, polityki, narzędzia dystrybucji). To nie jest dowód na konkretną ścieżkę ataku, ale praktyczna konsekwencja samej metody.

3) Jakie systemy były dotknięte?

W publikowanych opisach pojawiają się m.in.: serwery aplikacji GIS, bazy danych, serwery poczty i WWW, stacje robocze Windows, serwery Windows oraz serwery DNS.
Warto podkreślić, że właśnie GIS w administracji wodnej to „mózg sytuacyjny” (warstwy map, obiekty hydrotechniczne, dane o ryzykach) – jego utrata znacząco komplikuje pracę operacyjną, nawet jeśli urządzenia OT działają lokalnie.


Praktyczne konsekwencje / ryzyko

  1. Długotrwały przestój i praca w trybie degradacji – przejście na telefon/radio to sposób na utrzymanie ciągłości, ale równocześnie obniża „przepustowość” procesów i zwiększa ryzyko błędów.
  2. Ryzyko eskalacji do OT (pośrednio) – nawet jeśli OT nie zostało naruszone, to kompromitacja IT bywa punktem startowym do późniejszych prób wejścia w sieci przemysłowe.
  3. Niepewność dot. wycieku danych – w dostępnych opisach nacisk położono na szyfrowanie i przywracanie usług; brak publicznego potwierdzenia eksfiltracji nie oznacza, że jej nie było (to typowy obszar do weryfikacji w IR).
  4. Presja negocjacyjna – nota z żądaniem kontaktu w 7 dni to standardowy mechanizm eskalacji presji czasowej na ofierze.

Rekomendacje operacyjne / co zrobić teraz

Poniżej zestaw działań „bezpiecznych do wdrożenia” i przydatnych również w organizacjach spoza sektora wodnego:

1) Priorytet: odzyskanie kontroli nad tożsamością i zarządzaniem

  • sprawdź integralność AD / Entra ID, kont uprzywilejowanych i narzędzi zdalnego zarządzania,
  • wymuś rotację haseł/kluczy na kontach admin i serwisowych, zacznij od tych z dostępem do GPO/zarządzania urządzeniami.

2) BitLocker w trybie „defensywnym”

  • upewnij się, że klucze odzyskiwania są centralnie escrowowane (i że dostęp do nich jest ściśle kontrolowany),
  • monitoruj zdarzenia związane z masowymi zmianami stanu szyfrowania oraz „nietypową” aktywnością administracyjną na wielu hostach naraz (korelacja w SIEM).

3) Segmentacja i granice zaufania IT/OT

  • odseparuj stacje biurowe od sieci sterowania,
  • wymuś jednokierunkowe przepływy danych tam, gdzie to możliwe (np. strefy DMZ dla danych raportowych).

4) Backup i odtwarzanie (realne, nie „na papierze”)

  • testuj odtwarzanie całych usług (DB + aplikacja + uprawnienia), nie tylko plików,
  • trzymaj kopie offline/niemodyfikowalne (ochrona przed sabotażem kopii).

5) Gotowość na wariant „double extortion”

  • przygotuj plan komunikacji kryzysowej i analizę danych wrażliwych,
  • traktuj telemetrykę sieciową (proxy, DNS, EDR) jako źródło prawdy o ewentualnym wycieku.

Różnice / porównania z innymi przypadkami (jeśli dotyczy)

W tej sprawie wyróżnia się mechanizm szyfrowania: BitLocker jako „legalny” komponent Windows. Takie podejście bywa postrzegane jako mniej „hałaśliwe” (bo nie wprowadza typowego payloadu ransomware), ale nadal wymaga głębokiej kontroli nad środowiskiem i zwykle zostawia ślady w logach administracyjnych.

Drugi wyróżnik to relatywnie klarowna separacja komunikacyjna: w doniesieniach konsekwentnie podkreślano, że OT/hydrotechnika działa, a instytucja przeszła na tryb pracy dyspozytorskiej przez kanały głosowe.


Podsumowanie / kluczowe wnioski

  • Atak na „Apele Române” pokazuje, że ransomware nie musi oznaczać klasycznego szyfratora – nadużycie BitLockera jest wystarczające, by sparaliżować organizację.
  • Skala (~1000 systemów) i objęcie struktur regionalnych sugerują problem systemowy: tożsamość, uprawnienia i zarządzanie flotą są dziś główną „dźwignią” napastnika.
  • Nawet jeśli OT pozostaje bezpośrednio nietknięte, utrata IT uderza w świadomość sytuacyjną (GIS), komunikację i procesy decyzyjne.

Źródła / bibliografia

  1. TechRadar – opis incydentu, zakres systemów, informacja o BitLocker i nocie okupu (23.12.2025). (TechRadar)
  2. BleepingComputer – dodatkowe szczegóły dot. dotkniętych usług i trybu działania operacyjnego (22.12.2025). (BleepingComputer)
  3. The Record (Recorded Future News) – kontekst „LOLBins” i BitLocker jako metoda wymuszenia (22.12.2025). (The Record from Recorded Future)
  4. The Register – uzupełniające informacje o skali i rekomendacjach dot. negocjacji (22.12.2025). (The Register)
  5. Europa Liberă România (RFE/RL) – informacje o postępowaniu DIICOT i wyjaśnienie roli GIS oraz statusu OT (21–22.12.2025). (Europa Liberă România)

CVE-2025-14733 (WatchGuard Fireware OS / Firebox)

TL;DR

  • Co to jest: krytyczne RCE bez uwierzytelnienia (out-of-bounds write / CWE-787) w procesie iked w WatchGuard Fireware OS.
  • Kiedy boli najbardziej: gdy Firebox ma włączone IKEv2 VPN (Mobile User VPN IKEv2 oraz BOVPN IKEv2 z dynamic gateway peer).
  • Wersje podatne (wg NVD): Fireware OS 11.10.2–11.12.4_Update1, 12.0–12.11.5, 2025.1–2025.1.3.
  • Fixy (wg WatchGuard): 2025.1.4, 12.11.6, 12.5.15 (T15/T35), 12.3.1_Update4 (FIPS); 11.x = EoL.
  • Status operacyjny: WatchGuard potwierdza aktywne próby eksploatacji, a NVD odnotowuje dodanie do KEV (terminy dla FCEB w USA wg wpisu w NVD).
  • Mapowanie ATT&CK: T1190 – Exploit Public-Facing Application (taktika: Initial Access, v2.8, Last Modified 24 Oct 2025).
  • Co robić teraz: patch/upgrade, zawężenie ekspozycji UDP 500/4500 (tylko znane peer’y), hunting po logach iked (CERT > 2000, chain > 8), rotacja sekretów po IoA/IOC.

Krótka definicja techniczna

T1190 (Exploit Public-Facing Application) opisuje scenariusz, w którym atakujący wykorzystuje błąd w usłudze wystawionej do Internetu, aby uzyskać initial access; CVE-2025-14733 to praktyczny przykład tej techniki na urządzeniu brzegowym (WatchGuard Firebox), gdzie podatność w IKEv2 (iked) umożliwia zdalne wykonanie kodu bez logowania, jeśli usługa VPN jest wystawiona i skonfigurowana w określony sposób.


Gdzie występuje / przykłady platform (Windows, AD, AWS, Azure, GCP, K8s, ESXi, M365)

  • Network Devices / Edge (najważniejsze): WatchGuard Firebox (Fireware OS) wystawiony do Internetu na IKEv2.
  • Windows / AD: zwykle kolejny etap po initial access (pivot przez VPN, kradzież poświadczeń, ruch lateralny). [brak danych / do uzupełnienia] dla konkretnej kampanii powiązanej z CVE-2025-14733 (brak publicznie potwierdzonego kill-chain per-actor w źródłach vendorowych).
  • AWS / Azure / GCP: jeśli Firebox działa jako appliance w chmurze (np. Firebox Cloud) — dochodzi warstwa kontroli ekspozycji przez Security Group/NSG i logi cloudowe (CloudTrail/Activity Log) do wykrywania nagle otwartych UDP 500/4500.
  • K8s: nie dotyczy bezpośrednio (to nie jest podatność kontenerowa).
  • ESXi: nie dotyczy bezpośrednio (chyba że Firebox jest elementem segmentacji/DMZ).
  • M365: nie dotyczy bezpośrednio; ewentualnie telemetria logowań po kompromitacji.

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

W praktyce CVE-2025-14733 wpisuje się w T1190, bo:

  • Punkt wejścia to usługa brzegowa: IKEv2 VPN na Fireboxie (Mobile User VPN i/lub Branch Office VPN).
  • Klasa błędu: out-of-bounds write (CWE-787), co typowo daje spektrum skutków od crash/hang po RCE.
  • Warunki podatności (ważne dla SOC): WatchGuard wskazuje zależność od konfiguracji IKEv2 (w tym dynamic gateway peer) oraz fakt, że nawet po usunięciu konfiguracji dynamic peer urządzenie może nadal pozostać podatne w określonych przypadkach (istniejące BOVPN do static peer).
  • Dlaczego skuteczne operacyjnie: edge urządzenia są często wystawione do Internetu i mają ograniczone host-based controls; do tego dochodzi presja “VPN musi działać”, więc okno patchowania bywa realnie dłuższe niż w serwerach aplikacyjnych. To jest dokładnie kontekst, który MITRE opisuje dla T1190 (również w odniesieniu do urządzeń sieciowych).

Artefakty i logi (tabela — EID, CloudTrail events, K8s audit, M365 operations)

Artefakt / sygnałEID (Windows)CloudTrail events (AWS)K8s auditM365 operationsGdzie szukać / komentarz
iked: “Received peer certificate chain is longer than 8…”Syslog/Traffic Monitor z Firebox (domyślny error level). To vendor opisuje jako medium indicator of attack.
iked: “IKE_AUTH request … CERT(sz=3000) …” i CERT > 2000Syslog przy info logging; WatchGuard wskazuje >2000 jako strong indicator.
IKED hang (VPN re-key/negocjacje “stają”)Zachowanie urządzenia: przerwane negocjacje, istniejące tunele mogą działać.
IKED crash + fault reportWatchGuard: crash po udanej/nieudanej próbie (weak indicator).
Ruch outbound z Firebox do wskazanych IP (IoA)WatchGuard: outbound do tych IP to mocny sygnał kompromitacji; inbound może oznaczać recon/attempt.
Nagle otwarte UDP 500/4500 do Internetu (Firebox Cloud)AuthorizeSecurityGroupIngress / zmiany NACLDla wdrożeń w AWS: koreluj zmiany ekspozycji z aktywnością iked. (Detekcja “okołopodatnościowa”, ale praktyczna).

Detekcja (praktyczne reguły)

Sigma (gotowa reguła)

Założenie: logi Firebox (syslog) trafiają do SIEM jako tekst (np. message). Dopasuj logsource do swojego pipeline’u (np. Syslog/CEF).

title: WatchGuard Firebox CVE-2025-14733 - IKEv2 iked Indicators
id: 3f3a8a7c-5b0c-4b56-9c1d-4a5a54f6d2f1
status: experimental
description: |
  Detects WatchGuard Firebox iked log patterns associated with CVE-2025-14733 exploitation attempts:
  - peer certificate chain longer than 8
  - IKE_AUTH requests with abnormally large CERT payload size (>=2000 bytes)
references:
  - https://nvd.nist.gov/vuln/detail/CVE-2025-14733
  - https://www.watchguard.com/wgrd-psirt/advisory/wgsa-2025-00027
author: SOC/Blue Team
date: 2025/12/23
logsource:
  category: firewall
  product: watchguard
detection:
  sel_chain_long:
    message|contains:
      - 'Received peer certificate chain is longer than 8'
      - 'Reject this certificate chain'
  sel_cert_big:
    message|contains:
      - 'IKE_AUTH request'
      - 'CERT(sz='
  sel_cert_big_re:
    message|re: 'CERT\(sz=(2[0-9]{3}|[3-9][0-9]{3,})\)'
  condition: sel_chain_long or (sel_cert_big and sel_cert_big_re)
falsepositives:
  - Unusual but legitimate certificate chains from misconfigured peers
  - Large certificate payloads in rare enterprise PKI setups
level: high
tags:
  - attack.initial_access
  - attack.t1190

Wzorce logów i progi (chain > 8, CERT > 2000) są oparte o wskaźniki opisane przez WatchGuard.

Splunk (SPL)

1) IoA w logach iked (CERT/chain):

index=network (sourcetype=syslog OR sourcetype=watchguard*)
("iked" AND ("Received peer certificate chain is longer than 8" OR "IKE_AUTH request"))
| rex field=_raw "CERT\(sz=(?<cert_sz>\d+)\)"
| eval cert_sz=tonumber(cert_sz)
| where like(_raw,"%Received peer certificate chain is longer than 8%") OR cert_sz>=2000
| stats count earliest(_time) as firstSeen latest(_time) as lastSeen values(host) as devices values(src) as src_ip values(cert_sz) as cert_sizes by dest
| convert ctime(firstSeen) ctime(lastSeen)

2) Ruch do IP z advisory (outbound = silniejszy sygnał):

index=network (sourcetype=pan:traffic OR sourcetype=netflow OR sourcetype=watchguard*)
(dest_ip IN ("45.95.19.50","51.15.17.89","172.93.107.67","199.247.7.82") OR
 src_ip  IN ("45.95.19.50","51.15.17.89","172.93.107.67","199.247.7.82"))
| stats count earliest(_time) as firstSeen latest(_time) as lastSeen values(action) as actions values(dest_port) as ports by src_ip dest_ip
| convert ctime(firstSeen) ctime(lastSeen)

Lista IP i interpretacja inbound/outbound pochodzą z WatchGuard IoA.

KQL (Azure / Microsoft Sentinel)

Syslog (Syslog table) — CERT > 2000 / chain > 8:

Syslog
| where ProcessName has "iked" or SyslogMessage has "iked"
| extend CertSz = toint(extract(@"CERT\(sz=(\d+)\)", 1, SyslogMessage))
| where SyslogMessage has "Received peer certificate chain is longer than 8"
   or (SyslogMessage has "IKE_AUTH request" and CertSz >= 2000)
| project TimeGenerated, Computer, Facility, SeverityLevel, ProcessName, CertSz, SyslogMessage
| order by TimeGenerated desc

CommonSecurityLog / firewall telemetry — IoA IP:

let ioc_ips = dynamic(["45.95.19.50","51.15.17.89","172.93.107.67","199.247.7.82"]);
CommonSecurityLog
| where DestinationIP in (ioc_ips) or SourceIP in (ioc_ips)
| project TimeGenerated, DeviceVendor, DeviceProduct, SourceIP, DestinationIP, DestinationPort, Activity, Message
| order by TimeGenerated desc

IoA IP i log-patterny: WatchGuard advisory.

CloudTrail query (AWS CLI/CloudWatch)

Scenariusz: Firebox Cloud w AWS — polujemy na “nagłe wystawienie” UDP 500/4500 do Internetu.

AWS CLI (CloudTrail LookupEvents) — SG ingress na 500/4500 (wymaga jq):

aws cloudtrail lookup-events \
  --lookup-attributes AttributeKey=EventName,AttributeValue=AuthorizeSecurityGroupIngress \
  --max-results 50 \
| jq -r '
  .Events[]
  | (.CloudTrailEvent | fromjson)
  | select(.requestParameters.ipPermissions.items[]? | (.fromPort==500 or .fromPort==4500))
  | {eventTime, userIdentity: .userIdentity.arn, groupId: .requestParameters.groupId, ipPermissions: .requestParameters.ipPermissions.items}
'

Jeśli zamiast CloudTrail trzymasz telemetrię w innych źródłach, oznacz to jako [brak danych / do uzupełnienia] w swoim runbooku.

Elastic/EQL przykłady

Kibana KQL (syslog z Firebox):

(event.dataset: syslog OR event.dataset: "watchguard*")
and (message: "*Received peer certificate chain is longer than 8*"
     or (message: "*IKE_AUTH request*" and message: "*CERT(sz=2*")
     or (message: "*IKE_AUTH request*" and message: "*CERT(sz=3*"))

EQL (jeśli masz ustandaryzowane pola):

any where
  event.category == "network" and
  (process.name == "iked" or message like "*iked*") and
  (
    message like "*Received peer certificate chain is longer than 8*"
    or (message like "*IKE_AUTH request*" and message regex "CERT\\(sz=(2[0-9]{3}|[3-9][0-9]{3,})\\)")
  )

Heurystyki / korelacje

Dla SOC sensownie działa korelacja “multi-signal”, zgodna z duchem MITRE (request → error → post-exploit).

Proponowane łańcuchy:

  1. IKE_AUTH (CERT > 2000) lub chain > 8 → w oknie 1–5 min IKED hang/crash → w oknie 5–30 min outbound do podejrzanych IP / nowy egress z urządzenia.
  2. Spike w inbound UDP 500/4500 z AS/geo nietypowego dla Twoich peerów + równoległy wzrost błędów iked.
  3. Dla static BOVPN: obecność “allow from all” na UDP 500 (domyślne polityki) + ruch z Internetu + anomalie iked → priorytet P1 (bo tu “hardening” jest realnym workaroundiem).

False positives / tuning

  • “certificate chain longer than 8” może się zdarzyć przy źle złożonym łańcuchu certów po stronie peera (PKI, błędy klienta) — traktuj jako średni sygnał, dopóki nie ma korelacji z crash/hang lub CERT > 2000.
  • CERT > 2000: vendor opisuje jako strong indicator, ale w dużych środowiskach (długie łańcuchy, nietypowe certy) warto whitelistingować znane peer IP i/lub profile, zamiast obniżać próg.
  • Crash iked: WatchGuard podkreśla, że są inne przyczyny crashy → traktuj jako weak indicator sam w sobie.
  • Tuning praktyczny: ogranicz ekspozycję do znanych peerów (alias) i wyłącz domyślne “allow IKE from all” — wtedy większość FP znika, bo “Internet noise” przestaje docierać do usługi.

Playbook reagowania (kroki + komendy)

Krok 0 — triage (czy jesteśmy w zakresie?)

  1. Sprawdź wersję Fireware i porównaj z listą podatnych/fix.
  2. Sprawdź, czy masz IKEv2 (Mobile VPN IKEv2 / BOVPN IKEv2, dynamic peer).
  3. Hunting po IoA logach (iked) i połączeniach do IP z advisory.

Krok 1 — containment (minimalizuj powierzchnię ataku)

  • Jeśli biznes pozwala: czasowo wyłącz IKEv2 VPN lub ogranicz go do stałych peerów.
  • Jeśli masz tylko static peer BOVPN i nie możesz od razu patchować: zastosuj hardening wg WatchGuard:
    1. wyłącz dynamic peer VPN,
    2. utwórz alias ze stałymi IP peerów,
    3. dodaj polityki dopuszczające UDP 500/4500 tylko z aliasu,
    4. wyłącz domyślne polityki IPSec “allow all”.

Krok 2 — eradication (patch/upgrade)

  • Wgraj wersje naprawione:
    • 2025.1.4+, 12.11.6+, 12.5.15 (T15/T35), 12.3.1_Update4 (FIPS).
  • Jeśli jesteś na 11.x: to gałąź EoL — plan migracji jest obowiązkowy (w praktyce “nie ma co czekać na fix”).

Krok 3 — recovery (po podejrzeniu kompromitacji: rotacja sekretów)

WatchGuard zaleca rotację lokalnie przechowywanych sekretów. Przykładowa lista do odhaczenia:

  • credentials do zarządzania Firebox,
  • Firebox-DB,
  • importowane certyfikaty i klucze prywatne,
  • IPsec PSK (BOVPN/L2TP/mobile IPsec),
  • Log Server PSK,
  • SNMP community / SNMPv3 auth,
  • RADIUS shared secrets,
  • LDAP/AD “searching user” password,
  • DDNS creds, PPPoE creds, itp.

Krok 4 — post-incident hardening

  • Wprowadź stały proces: vuln scanning + szybkie patchowanie dla edge (MITRE mitigation: Update Software, Vulnerability Scanning, Limit Access…).

Przykłady z kampanii / case studies

  • WatchGuard wprost wskazuje, że obserwuje aktywną próbę eksploatacji w środowiskach produkcyjnych.
  • Różne źródła branżowe raportują dużą liczbę wystawionych/podatnych instancji (rzędu ~115k–125k) na podstawie skanów/obserwacji (np. Shadowserver) — to podbija ryzyko “spray-and-pray” na UDP 500/4500.
  • NVD odnotowuje powiązanie z KEV (wpisy dot. “Date Added / Due Date / Required Action” pojawiają się w szczegółach CVE), co w praktyce często koreluje z dojrzałą eksploatacją.

Lab (bezpieczne testy) — przykładowe komendy

A) Test detekcji w SIEM przez “wstrzyknięcie” przykładowego sysloga

Na systemie, który wysyła syslog do SIEM:

logger -p local3.err 'iked[1234]: (203.0.113.1<->203.0.113.2) Received peer certificate chain is longer than 8. Reject this certificate chain'
logger -p local3.info 'iked (203.0.113.1<->203.0.113.2)"IKE_AUTH request" message has 6 payloads [ IDi(sz=21) CERT(sz=3000) SA(sz=44) TSi(sz=24) TSr(sz=24) N(sz=8)]'

Wzorce komunikatów są zgodne z przykładami z advisory.

B) Test “ekspozycji” portów tylko na własnym publicznym IP Firebox

nmap -sU -p 500,4500 -Pn <PUBLIC_IP_FIREBOX>

Cel: potwierdzenie, czy UDP 500/4500 jest wystawione szeroko, czy ograniczone politykami do znanych peerów (hardening).

C) Walidacja hardeningu (bez patcha, doraźnie)

Wykonaj kroki z KB: aliasy + nowe polityki + wyłączenie systemowych “allow IKE”.


Mapowania (Mitigations, Powiązane techniki)

MITRE ATT&CK (technika główna)

  • T1190 — Exploit Public-Facing Application
    • Taktika: Initial Access
    • ATT&CK (strona techniki): Version 2.8, Last Modified 24 Oct 2025

MITRE Mitigations (praktyczne dla CVE-2025-14733)

Z listy mitigacji przypisanych do T1190 (wybrane, najbardziej operacyjne dla Firebox/edge):

  • M1051 Update Software (patch management edge)
  • M1016 Vulnerability Scanning (zewnętrzne skany + szybkie okna patchy)
  • M1035 Limit Access to Resource Over Network (zawężenie UDP 500/4500 do znanych peerów)
  • M1037 Filter Network Traffic (kontrola egress, blokady IoA)
  • M1030 Network Segmentation (DMZ/segmentacja od reszty)

Powiązane techniki (kontekstowe)

  • Exploitation for Defense Evasion (gdy exploit jednocześnie omija kontrolki) oraz Exploitation for Client Execution — MITRE wskazuje, że T1190 może się z tym łączyć zależnie od podatności.

Źródła / dalsza literatura

  • WatchGuard PSIRT Advisory WGSA-2025-00027 (IoA/IoC, wersje naprawione, logi iked). (watchguard.com)
  • WatchGuard blog (lista wydań firmware i nacisk na pilną aktualizację). (watchguard.com)
  • NVD: CVE-2025-14733 (opis, zakres wersji, CWE-787, CVSS). (NVD)
  • CSA Singapore alert (potwierdzenie krytyczności i informacji o eksploatacji). (Cyber Security Agency of Singapore)
  • WatchGuard KB: hardening BOVPN/IKEv2 (aliasy + polityki + wyłączenie systemowych “allow”). (techsearch.watchguard.com)
  • WatchGuard KB: lista sekretów do rotacji po podejrzeniu kompromitacji. (techsearch.watchguard.com)
  • MITRE ATT&CK: T1190 (definicja, platformy, mitigacje, detection strategy). (MITRE ATT&CK)
  • Doniesienia branżowe o skali ekspozycji i atakach: BleepingComputer / SecurityWeek / TheHackerNews. (BleepingComputer)

Checklisty dla SOC / CISO

SOC (operacyjnie)

  • Zidentyfikuj wszystkie Fireboxy i ich wersje Fireware; oznacz EoL 11.x jako P0 do migracji.
  • Sprawdź konfiguracje: Mobile VPN IKEv2 / BOVPN IKEv2 (dynamic peer) + “pozostałości” po konfiguracjach historycznych.
  • Włącz/zbierz logi iked do SIEM; reguły na chain > 8 i CERT > 2000.
  • Koreluj z iked hang/crash oraz ruchem outbound do IoA IP.
  • Po IoA/IOC: uruchom procedurę rotacji sekretów (lista wg KB).

CISO / właściciel ryzyka

  • Wymuś patch/upgrade do wersji naprawionych (SLA “edge”).
  • Zmień standard: IKEv2 nie jest “publiczny dla świata” — tylko znane peer’y (aliasy/polityki).
  • Włącz stałe vulnerability scanning + szybkie okna patchy na urządzeniach brzegowych.

CVE-2025-61884 – Oracle E-Business Suite (EBS)

TL;DR

  • CVE-2025-61884 dotyczy Oracle E-Business Suite (EBS) → Oracle Configurator → komponent Runtime UI w wersjach 12.2.3–12.2.14 i jest zdalnie wykorzystywalna bez uwierzytelnienia przez HTTP/HTTPS.
  • Ocena producenta/NVD wskazuje na wysoki wpływ na poufność (CVSS 3.1: 7.5, C:H / I:N / A:N), czyli przede wszystkim nieautoryzowany dostęp/wyciek danych.
  • W praktyce jest opisywana jako pre-auth SSRF (nazwa w KEV/NVD oraz alerty branżowe/instytucjonalne), a publiczne raporty łączą ją z aktywnym wykorzystywaniem i publicznie dostępnym PoC.
  • W ATT&CK najlepiej mapuje się do T1190 – Exploit Public-Facing Application (Initial Access); MITRE wskazuje m.in. WAF, filtrowanie ruchu i patching jako kluczowe mitygacje.

Krótka definicja techniczna (1 akapit)

CVE-2025-61884 to podatność w publicznie wystawionym komponencie webowym (Oracle Configurator Runtime UI), która umożliwia niezalogowanemu atakującemu doprowadzenie aplikacji do zachowań niezamierzonych (w raportach klasyfikowanych jako SSRF) i w konsekwencji uzyskanie dostępu do wrażliwych zasobów/danych; w ATT&CK odpowiada temu T1190 (Initial Access) – wejście przez podatną aplikację dostęp­ną z Internetu.


Gdzie występuje / przykłady platform (Windows, AD, AWS, Azure, GCP, K8s, ESXi, M365)

  • Windows: rzadziej jako host EBS, ale jeśli front (proxy/WAF) lub komponenty pośrednie są na Windows — interesują logi IIS/reverse proxy oraz EDR na hoście aplikacji. (Rdzeń CVE jest jednak w komponencie EBS/Configurator).
  • AD: pośrednio — EBS bywa spięty z AD/SSO. Skutkiem może być ekspozycja danych i późniejsza eskalacja (np. kradzież konfiguracji, identyfikatorów, mapowań).
  • AWS: częsty scenariusz: EBS na EC2 + ALB/WAF + CloudWatch Logs. W kontekście SSRF szczególnie ważne: egress z serwera i ochrona przed dostępem do metadata endpoint (169.254.169.254).
  • Azure: analogicznie (App Gateway WAF / Front Door + Log Analytics). SSRF → ryzyko dostępu do metadanych instancji i tokenów, jeśli egress nie jest ograniczony.
  • GCP: podobny model (LB/WAF, logi HTTP LB, kontrola egress).
  • K8s: rzadziej dla EBS, ale jeśli komponent jest „opakowany” lub stoi za ingress — logi ingress + korelacja z egress kontenera.
  • ESXi: nie dotyczy bezpośrednio CVE, ale MITRE wskazuje T1190 także dla infrastruktury (gdy aplikacje/zarządzanie są wystawione).
  • M365: brak bezpośredniego wektora; może być użyte w łańcuchu (np. dalsza eksfiltracja).

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

Kontekst CVE-2025-61884 w łańcuchu Initial Access

W przypadku Oracle EBS/Configurator Runtime UI, atakujący nie potrzebuje konta — wystarczy dostęp sieciowy do HTTP/HTTPS i podatnej wersji. To jest „książkowy” wariant T1190, bo aplikacja publicznie wystawiona staje się bramą do danych/zasobów.

Co realnie daje podatność

  • Oficjalny opis (Oracle/NVD) wskazuje na dostęp do „sensitive resources” oraz nieautoryzowany dostęp do krytycznych danych w ramach tego, co Oracle Configurator udostępnia.
  • W metadanych NVD/KEV podatność nazywana jest SSRF, a CISA-ADP przypisało m.in. CWE-918 (SSRF) oraz inne CWE, co sugeruje albo wieloprzymitywowy błąd, albo różne interpretacje łańcucha (ważne: Oracle zwykle nie publikuje pełnych detali technicznych).
  • Publiczne raporty wskazują, że poprawka wiązała się m.in. z walidacją parametru typu return_url, co jest typowym miejscem dla nadużyć SSRF/redirect/CRLF — dla SOC to cenna wskazówka do polowania w logach.

Dlaczego to jest skuteczne (z perspektywy atakującego)

  • Pre-auth (brak loginu) + niska złożoność (AC:L) = bardzo szybkie skanowanie Internetu i automatyzacja.
  • „Systemy biznesowe” (EBS) często zawierają dane finansowe/HR/procesowe, więc nawet „tylko” poufność (C:H) ma wysoki wpływ operacyjny.
  • MITRE rekomenduje podejście multi-signal (żądanie → błędy → proces/egress), bo same żądania HTTP nie zawsze wystarczą do pewnego potwierdzenia skutecznej eksploatacji.

Artefakty i logi

WarstwaŹródło logówPrzykładowe pola/artefaktyEID / EventCo polować (CVE-2025-61884 / T1190)
Reverse proxy / OHS / Apache / Nginxaccess_log, error_logurl.path, url.query, status, bytes, user_agent, src_ipUderzenia w UiServlet/SyncServlet + parametry typu return_url + nietypowe schematy/hosty/IP, skoki 4xx/5xx
WAF (Cloudflare/AWS WAF/Azure WAF/F5)WAF eventsaction, rule_id, uri, args, client_ipBloki/alerty na sygnatury SSRF / CVE-2025-61884 (np. nowe reguły WAF)
Aplikacja Oracle EBSlogi aplikacyjne EBS/Configuratorślady wywołań servletów, błędy walidacji URL, wyjątkiNietypowe wyjątki w Runtime UI, brak sesji użytkownika, nietypowe wzorce zapytań
Sieć (on-prem)firewall/proxydest IP/port, SNI/Host, ilość danychEgress z serwera EBS do nietypowych hostów / link-local / zasobów wewnętrznych (wzorzec SSRF)
AWSVPC Flow Logs / ALB/WAF logs (CloudWatch)srcaddr, dstaddr, dstport, action— / (CloudTrail: N/A)Korelacja: inbound atak → outbound z EBS do nietypowych destów; WAF hit na CVE
AzureNSG Flow Logs + AppGW/FrontDoor WAF (Log Analytics)clientIP, requestUri, ruleNameIdentyczne korelacje jak wyżej
K8sK8s audit / ingress logsrequestURI, userAgent, sourceIPsJeśli EBS jest za ingress: wzorce exploit-probing + egress z poda
M365Unified Audit LogZwykle N/A dla samego CVE

Detekcja (praktyczne reguły)

Poniższe przykłady celują w telemetrię HTTP/WAF i klasyczne sygnały SSRF/probing. Wg publicznych raportów aktywność obejmowała m.in. endpointy UiServlet/SyncServlet oraz parametry redirekt/URL.

Sigma (gotowa reguła)

Dopasuj mapowanie pól do Twojego parsera (ECS, Splunk CIM, IIS, Nginx itp.).

title: Oracle EBS Configurator Runtime UI - Suspicious SSRF / return_url Patterns (CVE-2025-61884)
id: 2a2c9c6d-6d2b-4b5a-9c86-5b2f7a3f3b7d
status: experimental
description: |
  Detects suspicious requests to Oracle E-Business Suite (Oracle Configurator Runtime UI) endpoints
  with URL/redirect parameters suggestive of SSRF/probing related to CVE-2025-61884.
author: Badacz CVE
date: 2025/12/23
tags:
  - attack.initial_access
  - attack.t1190
logsource:
  category: webserver
detection:
  selection_endpoint:
    url.path|contains:
      - "/configurator/UiServlet"
      - "/OA_HTML/configurator/UiServlet"
      - "/OA_HTML/SyncServlet"
  selection_param:
    url.query|contains:
      - "return_url="
  selection_ssrf_indicators:
    url.query|contains:
      - "http://"
      - "https://"
      - "file://"
      - "gopher://"
      - "ftp://"
      - "169.254.169.254"
      - "127.0.0.1"
      - "localhost"
      - "%0d%0a"
      - "%0D%0A"
  condition: selection_endpoint and selection_param and selection_ssrf_indicators
falsepositives:
  - Rare legitimate redirect flows using absolute URLs (tune by source IP ranges, auth/session cookies, user agents, rate)
level: high

Splunk (SPL)

(index=web OR index=waf OR index=proxy)
| eval path=coalesce(url_path, uri_path, cs_uri_stem, request_path)
| eval query=coalesce(url_query, uri_query, cs_uri_query, query_string)
| where like(path, "%/configurator/UiServlet%")
   OR like(path, "%/OA_HTML/configurator/UiServlet%")
   OR like(path, "%/OA_HTML/SyncServlet%")
| where isnotnull(query) AND match(lower(query), "return_url=")
| where match(lower(query), "(http://|https://|file://|gopher://|ftp://|169\\.254\\.169\\.254|127\\.0\\.0\\.1|localhost|%0d%0a)")
| stats count as hits min(_time) as first_seen max(_time) as last_seen values(status) as status values(useragent) as ua by src_ip, host, path
| sort - hits

KQL (Azure / Microsoft Sentinel)

WAF / reverse proxy w Log Analytics (przykład ogólny):

let suspiciousPaths = dynamic([
  "/configurator/UiServlet",
  "/OA_HTML/configurator/UiServlet",
  "/OA_HTML/SyncServlet"
]);
AzureDiagnostics
| extend path = tostring(requestUri_s), query = tostring(queryString_s), clientIp = tostring(clientIP_s)
| where path has_any (suspiciousPaths)
| where query has "return_url="
| where query has_any ("http://","https://","file://","gopher://","ftp://","169.254.169.254","127.0.0.1","%0d%0a")
| summarize hits=count(), first_seen=min(TimeGenerated), last_seen=max(TimeGenerated),
            ua=makeset(userAgent_s, 5) by clientIp, path
| order by hits desc

CloudTrail query (AWS CLI/CloudWatch)

Dla tej klasy zdarzeń CloudTrail zwykle nie pomoże (to nie są API calls), ale sensowny jest CloudWatch Logs Insights na AWS WAF logs:

fields @timestamp, httpRequest.clientIp, httpRequest.uri, httpRequest.args, action, terminatingRuleId
| filter httpRequest.uri like /\/configurator\/UiServlet|\/OA_HTML\/configurator\/UiServlet|\/OA_HTML\/SyncServlet/
| filter httpRequest.args like /return_url=/ 
| filter httpRequest.args like /http:\/\/|https:\/\/|169\.254\.169\.254|127\.0\.0\.1|localhost|%0d%0a/i
| stats count() as hits, min(@timestamp) as first_seen, max(@timestamp) as last_seen,
        values(action) as actions, values(terminatingRuleId) as rules
  by httpRequest.clientIp, httpRequest.uri
| sort hits desc

Elastic/EQL przykłady

Kibana KQL (logi HTTP/WAF w ECS):

url.path : ("/configurator/UiServlet" or "/OA_HTML/configurator/UiServlet" or "/OA_HTML/SyncServlet")
and url.query : ("return_url=" and ("http://" or "https://" or "file://" or "gopher://" or "ftp://" or "169.254.169.254" or "127.0.0.1" or "localhost" or "%0d%0a"))

EQL (korelacja inbound → outbound, jeśli masz EDR + network events):

sequence by host.id with maxspan=5m
  [network where network.direction == "inbound"
    and url.path in ("/configurator/UiServlet", "/OA_HTML/configurator/UiServlet", "/OA_HTML/SyncServlet")]
  [network where network.direction == "outbound"
    and destination.ip in ("169.254.169.254","127.0.0.1")]

Heurystyki / korelacje (co łączyć)

Korzystaj z podejścia „multi-signal correlation” (MITRE):

  1. Sygnał 1 — inbound probing: nietypowe żądania do servletów Configurator/Sync, często z zewnętrznych adresów i bez kontekstu sesji.
  2. Sygnał 2 — WAF / error spike: wzrost blokad WAF, 4xx/5xx w krótkim oknie czasu. (Cloudflare dodał nawet dedykowaną detekcję „Oracle EBS – SSRF – CVE-2025-61884”).
  3. Sygnał 3 — egress anomalia: serwer EBS inicjuje połączenia do nietypowych hostów (wewnętrznych, link-local, metadata). To jest kluczowe przy SSRF.
  4. Sygnał 4 — data exfil: duże odpowiedzi HTTP (bytes out) / długie czasy odpowiedzi dla endpointów Runtime UI, szczególnie bez typowego flow aplikacyjnego.
  5. Sygnał 5 — kontekst zagrożenia: CVE zostało dodane do KEV (NVD pokazuje daty dodania i deadline), co zwiększa priorytet i uzasadnia hunting retrospektywny.

False positives / tuning

Typowe FP i jak je ograniczać:

  • Legalne użycie redirectów: jeśli aplikacja używa parametru return_url do nawigacji — dopuszczalne, ale zwykle:
    • pochodzi z wewnętrznych adresów IP/VPN,
    • ma spójny user-agent,
    • występuje w obecności cookie/sesji.
      Tuning: ogranicz detekcję do źródeł spoza korporacyjnych CIDR, dodaj warunek braku sesji, dodaj próg częstotliwości (rate).
  • Skanery podatności w organizacji: wpisz je na allowlistę (IP/UA), ale zachowaj osobny dashboard „security scanning activity”.
  • WAF sygnatury: jeśli korzystasz z Cloudflare — śledź nową regułę dla CVE-2025-61884 jako sygnał, ale koreluj z ruchem „allowed”, bo część kampanii może próbować obejść WAF przez inne ścieżki (np. bez WAF lub przez inne punkty wejścia).

Playbook reagowania (kroki + komendy)

Natychmiastowe ograniczenie ryzyka (containment)

  1. Odetnij Internet → Runtime UI / EBS (tymczasowo: allowlist VPN/bastion/WAF). MITRE wprost rekomenduje ograniczenie ekspozycji usług oraz segmentację/DMZ.
  2. Włącz/zaostrz WAF (jeśli masz Cloudflare — zweryfikuj, czy działa reguła dla CVE-2025-61884).
  3. Ogranicz egress z serwera EBS (SSRF „żyje” egress’em).

Przykład (Linux, defensywnie – blokada metadata; dopasuj do polityk):

sudo iptables -A OUTPUT -d 169.254.169.254 -j REJECT
sudo iptables -A OUTPUT -d 127.0.0.1 -p tcp --dport 80 -j REJECT

Patching i weryfikacja

  • Zastosuj Oracle Security Alert z 11 października 2025 (Rev 1); Oracle wskazuje, że wersje spoza wsparcia mogły nie być testowane, ale „prawdopodobnie” wcześniejsze też mogą być dotknięte → jeśli masz starsze EBS, traktuj to jak ryzyko wysokie i planuj upgrade.

Hunting (retrospektywnie 30–90 dni)

Szybkie grepy (ścieżki dopasuj do Oracle HTTP Server / reverse proxy):

# Szukanie podejrzanych endpointów
zgrep -RniE "(/configurator/UiServlet|/OA_HTML/SyncServlet|/OA_HTML/configurator/UiServlet)" /var/log/* 2>/dev/null

# Szukanie podejrzanych wskaźników SSRF/CRLF w query
zgrep -RniE "return_url=.*(http://|https://|169\.254\.169\.254|127\.0\.0\.1|%0d%0a)" /var/log/* 2>/dev/null

Jeśli podejrzewasz skuteczną kompromitację

  • Traktuj to jak incydent o możliwym wpływie na dane: identyfikacja zakresu wycieku, powiadomienia, analiza kont/SSO integracji.
  • Publiczne raporty opisują złożone łańcuchy exploitacji w ekosystemie EBS (różne CVE i różne łańcuchy); nawet jeśli CVE-2025-61884 ma CVSS tylko na poufność, w praktyce SOC powinien sprawdzić, czy nie wystąpiły sygnały „post-exploit”.

Przykłady z kampanii / case studies

  • Dodanie do KEV (widoczne w NVD) sugeruje dowody aktywnego wykorzystania i podbija priorytet patchowania/huntingu (NVD pokazuje „Date Added: 2025-10-20” oraz deadline).
  • CSA Singapur opublikowała alert wprost o aktywnej eksploatacji SSRF i podała, że PoC jest publicznie dostępny.
  • Media branżowe raportowały, że exploit/PoC miał zostać ujawniony publicznie (m.in. w wątku „ShinyHunters”), a Oracle wypuścił poprawkę out-of-band.
  • Kontekst kampanii extortion wokół Oracle EBS był szeroko opisywany, m.in. przez Reuters (z zastrzeżeniem, że ocena prawdziwości części twierdzeń napastników bywała na tamtym etapie niepewna).

Lab (bezpieczne testy) — przykładowe komendy

Cel labu dla Blue Team: zweryfikować ekspozycję, widoczność w logach i skuteczność detekcji, bez „odtwarzania exploitów”.

  1. Sprawdź ekspozycję portów i usług (host EBS / reverse proxy):
sudo ss -lntp | egrep ':(80|443)\s'
  1. Wygeneruj kontrolowany „ruch testowy” do standardowej strony (bez payloadów CVE), aby upewnić się, że logi trafiają do SIEM:
curl -kI https://twoj-host-ebs.example/ | head
  1. Test parsowania i reguł detekcji na „sztucznych” wpisach logów (bez kontaktu z EBS):
cat <<'EOF' > /tmp/test_access.log
203.0.113.10 - - [23/Dec/2025:10:00:00 +0000] "GET /OA_HTML/SyncServlet?return_url=http://example.com/ HTTP/1.1" 200 1234 "-" "lab-test-agent"
EOF

Następnie odpal swoje pipeline’y (Filebeat/Fluent Bit/Splunk UF) na pliku testowym i sprawdź, czy reguła (Sigma/SPL/KQL) łapie zdarzenie.

  1. Sprawdź, czy WAF raportuje sygnatury dla CVE-2025-61884 (np. w Cloudflare jest to osobna detekcja w managed rules).

Mapowania (Mitigations, Powiązane techniki)

ATT&CK

  • Technika: T1190 – Exploit Public-Facing Application
  • Taktyka: Initial Access
  • ATT&CK (katalog): v18 (aktualizacja październik 2025)
  • Last Modified (T1190): 24 Oct 2025

Mitigations (MITRE)

Dla T1190 MITRE podkreśla m.in.:

  • M1050 Exploit Protection / WAF,
  • M1037 Filter Network Traffic (zwłaszcza ograniczenie egress),
  • M1035 Limit Access to Resource Over Network,
  • M1030 Network Segmentation,
  • M1051 Update Software,
  • M1016 Vulnerability Scanning,
  • M1048 Application Isolation and Sandboxing.

Powiązane techniki (często w tym samym łańcuchu)

  • T1210 Exploitation of Remote Services (gdy exploit przeradza się w ruch lateralny)
  • T1041 Exfiltration Over C2 Channel / T1567 Exfiltration Over Web Service (jeśli dane są wyprowadzane)
  • (Kontekstowo) techniki związane z SSRF → dostęp do metadanych chmurowych i nadużyciem IAM (zależne od środowiska).

Źródła / dalsza literatura

  • Oracle: Security Alert CVE-2025-61884 (opis, risk matrix, wersje dotknięte, parametry CVSS). (Oracle)
  • NVD: CVE-2025-61884 (CVSS vector, wersje 12.2.3–12.2.14, wątek KEV i nazwa SSRF, lista CWE z CISA-ADP). (NVD)
  • MITRE ATT&CK: T1190 (definicja, mitygacje, strategie detekcji, data modyfikacji). (MITRE ATT&CK)
  • CSA Singapore: alert o aktywnej eksploatacji i PoC. (Cyber Security Agency of Singapore)
  • Canadian Centre for Cyber Security: kontekst patchy i KEV. (Canadian Centre for Cyber Security)
  • Cloudflare: emergency WAF release z detekcją dla CVE-2025-61884. (Cloudflare Docs)
  • BleepingComputer: tło kampanii, PoC leak, SSRF/return_url jako trop huntingowy. (BleepingComputer)
  • Google Cloud (Mandiant/GTIG): kontekst wielu łańcuchów exploitacji w EBS (ważne dla „post-exploit” huntingu). (Google Cloud)
  • Reuters: tło kampanii extortion wokół Oracle EBS (ostrożnie z atrybucją). (Reuters)

Checklisty dla SOC / CISO

SOC (operacyjnie, 24–72h)

  • Zidentyfikuj wszystkie instancje Oracle EBS/Configurator Runtime UI i czy są publicznie dostępne.
  • Wdróż/zweryfikuj patch z Security Alert (11 Oct 2025) na dotkniętych wersjach 12.2.3–12.2.14.
  • Włącz korelację: (inbound endpointy) + (WAF/error spike) + (egress anomalia).
  • Retrospektywny hunting: UiServlet/SyncServlet + return_url + wskaźniki SSRF/CRLF.
  • Jeśli widzisz sygnały skutecznej eksploatacji: uruchom IR (triage danych, izolacja hostów, analiza egress).

CISO (zarządczo)

  • Traktuj CVE-2025-61884 jako „exploited-in-the-wild” (KEV) i ustaw priorytet patchowania/izolacji jak dla krytycznych systemów biznesowych.
  • Wymuś polityki: WAF + segmentacja + ograniczenie egress dla aplikacji publicznych.
  • Upewnij się, że monitoring obejmuje warstwę aplikacyjną i sieciową (bez tego SSRF bywa „ciche”).

CVE-2025-68613 (n8n)

TL;DR

  • CVE: CVE-2025-68613 — krytyczne RCE w platformie automatyzacji workflow n8n (expression evaluation / expression injection), wymagające uwierzytelnienia użytkownika (PR:L).
  • Wpływ: wykonanie dowolnego kodu z uprawnieniami procesu n8n → potencjalne przejęcie instancji, modyfikacje workflow, dostęp do danych/sekretów.
  • Wersje podatne: >= 0.211.0 oraz < 1.120.4 (oraz osobna gałąź >= 1.121.0 i < 1.121.1)`.
  • Wersje naprawione: 1.120.4, 1.121.1, 1.122.0; rekomendacja maintainerów: upgrade do 1.122.0+ (dodatkowe zabezpieczenia).
  • CVSS (CNA/GitHub): 9.9 CRITICAL, CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H.
  • MITRE ATT&CK mapowanie (główne): T1190 Exploit Public-Facing Application (takt. Initial Access). ATT&CK v18, technika T1190 v2.8, Last Modified: 24 Oct 2025.
  • Ryzyko „skali Internetu”: Censys raportował ~103,476 potencjalnie podatnych instancji (stan na 22 grudnia 2025) oraz „no known exploitation at time of writing”.

Krótka definicja techniczna

T1190 (Exploit Public-Facing Application) to technika Initial Access, w której atakujący wykorzystuje lukę w aplikacji/usłudze wystawionej na Internet (lub szerzej: osiągalnej z sieci), aby uzyskać dostęp i uruchomić kod w kontekście tej aplikacji. W przypadku CVE-2025-68613 wektor jest sieciowy, a „wejściem” są workflow expressions w n8n oceniane w kontekście niedostatecznie odizolowanym od runtime, co daje RCE z uprawnieniami procesu n8n.


Gdzie występuje / przykłady platform (Windows, AD, AWS, Azure, GCP, K8s, ESXi, M365)

Typowe środowiska dla n8n + ryzyko T1190/CVE-2025-68613:

  • Windows: n8n jako proces node.exe/usługa; detekcja głównie po process creation (4688/Sysmon EID 1) i anomaliach w ruchu wychodzącym.
  • Linux: najczęściej spotykane wdrożenie (bare metal/VM/containers); detekcja po execve (auditd) i potomkach procesu node.
  • K8s (EKS/AKS/GKE): n8n jako Deployment/StatefulSet; ślady w K8s audit, logach Ingress (nginx/traefik), oraz w telemetrii runtime (Falco/eBPF).
  • AWS: n8n na EC2/ECS/EKS; ryzyko wzrasta, jeśli instancja ma rolę IAM (po RCE możliwa kradzież tokenów z metadata). T1190 wspiera platformy IaaS/Containers.
  • Azure: n8n na VM/AKS; analogicznie — MDE/AMA/Defender for Cloud do korelacji procesu i sieci.
  • GCP: n8n na GCE/GKE; analogicznie — Cloud Logging + VPC Flow Logs + GKE audit.
  • ESXi: n8n uruchomione jako VM; kontekst T1190 obejmuje również ESXi jako platformę (ogólnie dla public-facing usług).
  • AD: sama luka nie jest „AD-specific”, ale dostęp uwierzytelniony bywa pochodną kompromitacji tożsamości/SSO. W praktyce koreluj: logowanie do n8n ↔ zmiany workflow ↔ zdarzenia na hostach domenowych, jeśli n8n ma integracje.
  • M365: jeśli n8n przechowuje tokeny do M365 (Graph/Exchange/SharePoint), po przejęciu instancji ryzykujesz nadużycie tych tokenów; szukaj anomalii w M365 Unified Audit Log (operacje administracyjne, nietypowe OAuth usage).

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

Mechanika (na przykładzie n8n i CVE-2025-68613)

  1. Warunek wstępny: atakujący posiada dostęp uwierzytelniony do n8n (PR:L).
  2. Punkt wejścia: podczas konfiguracji workflow wprowadzane są expressions (np. w polach korzystających z expression engine).
  3. Błąd izolacji: w podatnych wersjach expression evaluation może odbywać się w kontekście niewystarczająco odizolowanym od runtime (CWE-913).
  4. Efekt: możliwość uruchomienia dowolnego kodu z uprawnieniami procesu n8n → odczyt/zmiana workflow, dostęp do danych, potencjalne operacje systemowe.

Dlaczego to jest skuteczne w realnym środowisku

  • n8n bywa wystawiane na Internet (panel edycji, webhooki, API), a workflow często przechowują sekrety i integracje (SaaS, chmury).
  • Wymóg uwierzytelnienia nie „ratuje” sytuacji, jeśli:
    • konta są współdzielone,
    • brak MFA,
    • jest SSO z podatnym IdP,
    • dochodzi do przejęcia sesji/tokenów.
  • Skuteczność rośnie, gdy proces n8n działa z szerokimi uprawnieniami (np. root w kontenerze, dostęp do socketa Dockera, dostęp do metadata/roli IAM, szeroki egress).

Artefakty i logi (tabela — EID, CloudTrail events, K8s audit, M365 operations)

WarstwaŹródło logów / artefaktID / typ zdarzeniaCo polować (IOA)
Aplikacjan8n logs (console/file, najlepiej json)[brak EID]Nagłe błędy evaluatora, nietypowe pola expressions, wzrost błędów 5xx w UI/API; ustaw N8N_LOG_FORMAT=json dla parsowalności.
Aplikacjan8n “Security audit” (n8n audit, /audit)[raport]Wykrycie ryzykownych node’ów, niechronionych webhooków, brakujących ustawień, „outdated instance”.
Reverse proxy/WAFNginx/Traefik/ALB/Ingress access logsHTTP accessSekwencja: logowanie → edycja workflow/API → błędy 5xx/4xx → chwilę później anomalie procesowe/egress (korelacja).
WindowsSecurity4688node.exe/n8n uruchamia cmd.exe, powershell.exe lub narzędzia sieciowe (nietypowe dla automatyzacji).
WindowsSysmonEID 1, 3, 11Process create + network connect + file create w krótkim oknie czasu po zmianie workflow.
Linuxauditdexecve, connectProces node (n8n) spawn’uje /bin/sh, interpretery, pobiera pliki, tworzy cron/systemd.
K8sK8s audit logcreate/patch/execNiespodziewane pods/exec, zmiany w Deployment/Secret/ConfigMap po incydencie (jeśli atak eskaluje do K8s API).
AWSCloudTrailAssumeRole, GetCallerIdentity, List*, Get*, Put*Nietypowe użycie roli/kluczy przypisanych do n8n/instancji po symptomach RCE (szczególnie STS).
M365Unified Audit LogOperacje Exchange/SharePoint/EntraSkok w aktywności aplikacji/OAuth (jeśli w n8n były tokeny do M365) — koreluj czasowo z przejęciem instancji.

Uwaga: część wpisów (CloudTrail/M365/K8s) jest warunkowa — zależy od tego, jakie integracje i uprawnienia ma n8n w Twoim środowisku.


Detekcja (praktyczne reguły)

Sigma (gotowa reguła)

title: Suspicious child process spawned by n8n / Node.js (possible n8n RCE - CVE-2025-68613)
id: 3e7b6d6a-3a33-4a23-9a9a-2c7e3b6f4c11
status: experimental
description: >
  Detects suspicious process spawning patterns where a Node.js-based n8n service spawns shells
  or common system utilities. Useful as a post-exploitation signal for CVE-2025-68613.
references:
  - https://nvd.nist.gov/vuln/detail/CVE-2025-68613
author: Badacz CVE (SOC/Blue Team)
date: 2025/12/24
tags:
  - attack.initial_access
  - attack.t1190
  - attack.execution
logsource:
  category: process_creation
  product: windows
detection:
  selection_parent:
    ParentImage|endswith:
      - '\node.exe'
      - '\n8n.exe'
  selection_child:
    Image|endswith:
      - '\cmd.exe'
      - '\powershell.exe'
      - '\pwsh.exe'
      - '\wscript.exe'
      - '\cscript.exe'
      - '\bitsadmin.exe'
      - '\certutil.exe'
      - '\mshta.exe'
      - '\rundll32.exe'
  condition: selection_parent and selection_child
falsepositives:
  - Legitimate automation that intentionally executes OS commands from workflows (high-risk design).
  - Maintenance scripts launched by the n8n service account.
level: high

Splunk (SPL)

Przykład dla Sysmon (EID 1) lub równoważnych zdarzeń procesu:

index=endpoint (sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=1)
(
  ParentImage="*\\node.exe" OR ParentImage="*\\n8n.exe" OR ParentCommandLine="* n8n *"
)
(
  Image="*\\cmd.exe" OR Image="*\\powershell.exe" OR Image="*\\pwsh.exe" OR Image="*\\wscript.exe" OR Image="*\\cscript.exe"
  OR Image="*\\bitsadmin.exe" OR Image="*\\certutil.exe" OR Image="*\\mshta.exe" OR Image="*\\rundll32.exe"
)
| stats count min(_time) as first_seen max(_time) as last_seen values(Computer) values(User) values(ParentCommandLine) values(CommandLine) by Image, ParentImage
| convert ctime(first_seen) ctime(last_seen)

KQL (Azure / Microsoft Defender for Endpoint)

Wariant oparty o DeviceProcessEvents:

DeviceProcessEvents
| where InitiatingProcessFileName in~ ("node.exe", "node", "n8n.exe", "n8n")
| where FileName in~ ("cmd.exe","powershell.exe","pwsh.exe","wscript.exe","cscript.exe","bash","sh")
| project Timestamp, DeviceName, AccountName, InitiatingProcessFileName, InitiatingProcessCommandLine, FileName, ProcessCommandLine, FolderPath, SHA256
| order by Timestamp desc

CloudTrail query (AWS CLI/CloudWatch)

CloudWatch Logs Insights (przykład “polowania” na nietypowe STS/Identity po objawach kompromitacji aplikacji):

fields @timestamp, eventSource, eventName, userIdentity.type, userIdentity.arn, sourceIPAddress, userAgent
| filter eventSource in ("sts.amazonaws.com","iam.amazonaws.com")
| filter eventName in ("AssumeRole","GetCallerIdentity","CreateAccessKey","PutUserPolicy","AttachRolePolicy")
| sort @timestamp desc
| limit 200

AWS CLI (jeśli trzymasz CloudTrail w S3 i masz Athena/Glue — tutaj tylko “szkielet”; dostosuj do swojego źródła logów):

# Wyszukaj zdarzenia STS dla roli/ARN powiązanej z n8n (uzupełnij <ROLE_ARN_FRAGMENT>)
aws cloudtrail lookup-events \
  --lookup-attributes AttributeKey=EventSource,AttributeValue=sts.amazonaws.com \
  --max-results 50 \
| jq '.Events[] | select(.CloudTrailEvent | contains("<ROLE_ARN_FRAGMENT>"))'

Elastic/EQL przykłady

EQL dla Elastic Endpoint / logs-*:

process
where event.type == "start"
  and process.parent.name in ("node","node.exe","n8n","n8n.exe")
  and process.name in ("cmd.exe","powershell.exe","pwsh.exe","bash","sh","wscript.exe","cscript.exe")

Heurystyki / korelacje (co łączyć)

Najlepiej działa korelacja „multi-sygnał” (T1190), zgodna z ideą: request → error → post-exploit behavior:

  1. Ingress/WAF/Reverse proxy: nietypowe żądania do n8n + skok 4xx/5xx.
  2. Aplikacja: logi n8n (w JSON) pokazują wzmożoną aktywność edycji/uruchomień workflow albo błędy w evaluacji.
  3. Host/Container: proces node zaczyna tworzyć nietypowe potomki (shell/interpretery) w krótkim oknie czasu po anomaliach HTTP.
  4. Egress: nowe połączenia wychodzące (szczególnie do Internetu lub do usług typu metadata 169.254.169.254 w chmurach — jeśli środowisko to umożliwia).
    MITRE opisuje taki łańcuch korelacyjny jako skuteczną strategię detekcji dla T1190 (również dla aplikacji kontenerowych i chmurowych).

False positives / tuning

Najczęstsze źródła FP:

  • Środowiska, w których n8n z założenia uruchamia polecenia systemowe (workflow jako „orchestrator” hosta).
  • Zadania administracyjne (backup, eksport, maintenance) wykonywane przez konto serwisowe n8n.

Tuning praktyczny:

  • Dodaj warunek kontekstu: alertuj tylko, jeśli parent=Node/n8n uruchamia shell i jednocześnie:
    • jest „nowy” zewnętrzny kierunek egress,
    • wystąpił spike 5xx,
    • zaszła zmiana workflow/aktywacja workflow w nietypowych godzinach.
  • Wykorzystaj n8n audit do identyfikacji “risky nodes”/niechronionych webhooków i potraktuj je jako wskaźnik podwyższonego ryzyka (priorytetyzacja instancji do hardeningu).

Playbook reagowania (kroki + komendy)

Krok 1 — identyfikacja narażenia (scoping)

  • Sprawdź wersję n8n i porównaj z zakresem podatności oraz wersjami naprawionymi.
  • Jeśli korzystasz z logów plikowych/JSON — upewnij się, że logowanie jest włączone i parsowalne (np. N8N_LOG_FORMAT=json, N8N_LOG_OUTPUT=file).

Przykładowe komendy (Linux/Docker, defensywne):

docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}'
docker inspect <n8n_container> --format '{{.Config.Image}}'
docker logs <n8n_container> --since 24h | tail -n 200

Krok 2 — natychmiastowe ograniczenie ryzyka (containment)

Zalecenia workarounds od maintainerów (tymczasowe, gdy nie możesz patchować od razu):

  • Ogranicz prawa do tworzenia/edycji workflow wyłącznie do w pełni zaufanych użytkowników.
  • Uruchom n8n w środowisku utwardzonym: najmniejsze uprawnienia OS, segmentacja, ograniczony egress.

Krok 3 — zebranie materiału dowodowego

  • Zbierz: logi reverse proxy/WAF, logi n8n (najlepiej JSON), zdarzenia procesów na hoście, listę aktywnych połączeń, listę zmienionych plików w ostatnich 24–72h.

Przykładowe komendy (Linux):

# połączenia i procesy (triage)
ss -tpn
ps -eo pid,ppid,user,cmd --sort=-%cpu | head

# szybkie polowanie na świeże pliki (dostosuj ścieżki do wdrożenia)
find / -xdev -mtime -2 -type f 2>/dev/null | head

Krok 4 — eradication i recovery

  • Upgrade do wersji naprawionej: 1.120.4 / 1.121.1 / 1.122.0, preferencyjnie 1.122.0+.
  • Jeśli podejrzewasz przejęcie: potraktuj instancję jak „burned”:
    • rotuj sekrety/tokenu API używane w workflow,
    • wymuś reset sesji/kont,
    • rozważ redeploy z czystego obrazu + odtworzenie workflow z zaufanego backupu.

Krok 5 — działania po incydencie (hardening)

Odnieś się do mitigations dla T1190:

  • Update Software (M1051) + procedury szybkiego patchowania,
  • Network Segmentation (M1030) / DMZ,
  • Filter Network Traffic (M1037) (szczególnie outbound),
  • Application Isolation and Sandboxing (M1048).

Przykłady z kampanii / case studies

  • Skala ekspozycji: Censys raportował 103,476 potencjalnie podatnych instancji (stan na 22 grudnia 2025), co typowo napędza skanowanie oportunistyczne po publikacji krytycznego RCE.
  • Status exploitacji: według Censys (22 grudnia 2025) „No known exploitation at time of writing” — to nie jest gwarancja bezpieczeństwa, ale ważny punkt odniesienia w komunikacji ryzyka.
  • Disclosure: advisory na GitHub opublikowano 19 grudnia 2025, jako krytyczne, z przypisaniem CWE-913 i wskazaniem patched versions.

Lab (bezpieczne testy) — przykładowe komendy

Poniżej bezpieczne testy dla zespołu SOC/Blue Team (bez payloadów i bez instrukcji exploitacji):

  1. Weryfikacja konfiguracji logowania (parsowalność pod SIEM)
    Zgodnie z dokumentacją n8n ustaw logi na JSON i wyjście do pliku/console (w zależności od wdrożenia).
export N8N_LOG_FORMAT=json
export N8N_LOG_OUTPUT=console,file
export N8N_LOG_LEVEL=info
  1. Uruchomienie security audytu n8n
    To test „higieny” instancji (risky nodes, niechronione webhooki, outdated instance).
# w środowisku testowym / na kopii instancji
n8n audit
  1. Test detekcji post-exploit (symulacja TTP bez exploita)
  • W labie sprawdź, czy Twoje EDR/SIEM podnosi alert, gdy proces node uruchamia nieoczekiwany interpreter/shell (symulacja kontrolowana przez administratora labu).
  • Celem jest walidacja reguł Sigma/SPL/KQL/EQL z sekcji 7.

Mapowania (Mitigations, Powiązane techniki)

Mitigations dla T1190 (MITRE)

Z techniki T1190 wynikają szczególnie praktyczne mitygacje:

  • M1048 Application Isolation and Sandboxing
  • M1050 Exploit Protection (np. WAF)
  • M1037 Filter Network Traffic (zwłaszcza outbound z serwera aplikacji)
  • M1035 Limit Access to Resource Over Network
  • M1030 Network Segmentation
  • M1026 Privileged Account Management (least privilege konta usługi)
  • M1051 Update Software
  • M1016 Vulnerability Scanning

Powiązane techniki (praktyczne mapowanie łańcucha zdarzeń)

  • T1190 Exploit Public-Facing Application (główne; wejście przez podatną instancję n8n).
  • T1078 Valid Accounts (wymóg uwierzytelnienia w CVE sugeruje nadużycie kont/poświadczeń jako warunek).
  • T1059 Command and Scripting Interpreter (częsty etap po RCE: uruchamianie poleceń/interpreterów).
  • Dalsze (zależne od scenariusza): credential access, lateral movement, collection — zależnie od tego, jakie integracje i sekrety przechowuje n8n.

Źródła / dalsza literatura

  • MITRE ATT&CK: T1190 Exploit Public-Facing Application (ATT&CK v18; Last Modified 24 Oct 2025). (MITRE ATT&CK)
  • NVD: CVE-2025-68613 (opis, CVSS z CNA/GitHub, wektor). (NVD)
  • GitHub Security Advisory (n8n): GHSA-v98v-ff95-f3cp (affected/patched, workarounds, CWE-913). (GitHub)
  • Censys advisory: ekspozycja i status exploitacji (stan na 22 Dec 2025). (Censys)
  • n8n Docs: Logging oraz zmienne środowiskowe logów (N8N_LOG_FORMAT, N8N_LOG_LEVEL, itp.). (n8n Docs)
  • n8n Docs: Security audit (n8n audit, /audit). (n8n Docs)

Checklisty dla SOC / CISO

SOC (operacyjnie)

  • Zidentyfikuj instancje n8n wystawione na Internet (ASM/CMDB) i sprawdź wersje vs zakres podatności.
  • Włącz/utwardź logowanie n8n (JSON + centralizacja do SIEM).
  • Wdróż reguły na process spawning (node→shell) + korelacje request→error→post-exploit.
  • Przejrzyj uprawnienia użytkowników: kto może tworzyć/edytować workflow; ogranicz do zaufanych ról.
  • Po patchu: retrospektywnie przeszukaj logi od 2025-12-19 (data disclosure) pod kątem anomalii.

CISO (zarządczo)

  • Egzekwuj patch management dla internet-facing apps (SLA dla CRITICAL).
  • Wymuś segmentację i ograniczenie egress dla usług automatyzacji (n8n jako high-risk).
  • Zdefiniuj standard: workflow automation nie działa jako root i nie ma szerokich uprawnień do chmury bez potrzeby.
  • Włącz okresowy security audit instancji (w tym “risky nodes”/webhook exposure).

WebRAT na GitHubie: fałszywe „exploity” na CVE jako przynęta na malware

Wprowadzenie do problemu / definicja luki

W końcówce grudnia 2025 r. WebRAT (backdoor z funkcjami infostealera i spyware) zaczął być dystrybuowany przez GitHub w formie repozytoriów podszywających się pod proof-of-concept (PoC) exploitów na świeżo nagłaśniane podatności. Mechanizm jest prosty: ofiara szuka „działającego exploita”, trafia na repo z atrakcyjnym README i sekcją „Download”, a w praktyce pobiera hasłowany ZIP z ładunkiem malware.

To nie jest „luka” w GitHub jako platformie, tylko klasyczny atak socjotechniczny wykorzystujący zaufanie do publicznych repozytoriów, presję czasu („CVE jest gorące”) i chęć szybkiego uruchomienia PoC bez weryfikacji.


W skrócie

  • WebRAT był wcześniej znany głównie z dystrybucji jako cheaty do gier i pirackie/crackowane oprogramowanie, ale od co najmniej września 2025 r. (wg analiz) operatorzy zaczęli masowo „opakowywać” go w fałszywe PoC na GitHub.
  • Kaspersky opisał repozytoria z ustandaryzowanymi, bardzo „raportowymi” opisami podatności (podejrzenie treści generowanych przez AI) oraz wspólnym schematem pobrania hasłowanego archiwum.
  • W paczce „exploita” pojawia się m.in. plik BAT uruchamiający droppera (np. rasmanesc.exe), wabik-DLL oraz plik, którego nazwa zawiera hasło do ZIP. Dropper eskaluje uprawnienia, próbuje wyłączyć Defendera i pobiera właściwego WebRAT z twardo zaszytego URL.

Kontekst / historia / powiązania

WebRAT: od „gamingowego” stealer/spyware do polowania na juniorów

Solar 4RAYS opisywał WebRAT już w maju 2025 r. jako złośliwe oprogramowanie kradnące dane z przeglądarek, portfeli kryptowalutowych oraz kont m.in. Steam/Discord/Telegram, a także zdolne do podglądu ekranu i obserwacji przez webcam. Wątek dystrybucji obejmował m.in. cheaty, pirackie strony i nawet linki w komentarzach (np. pod filmami instruktażowymi).

Kaspersky zauważa, że w nowej odsłonie przynęta jest wyraźnie przesunięta w stronę studentów i mniej doświadczonych osób w infosec, które szukają PoC do nauki/testów i uruchamiają je na „normalnej” stacji roboczej zamiast w izolacji.

Dlaczego GitHub działa jako przynęta?

To wpisuje się w szerszy trend: atakujący budują wiarygodność fałszywych repozytoriów (dopieszczone README, tagi, commit-spam, instrukcje w wielu językach), a potem podstawiają komponent kradnący dane lub backdoora. Kaspersky opisał podobny wzorzec w kampanii GitVenom (setki repozytoriów z „projektami-wydmuszkami” i złośliwymi komponentami).


Analiza techniczna / szczegóły „PoC” (łańcuch infekcji)

Przynęta: CVE o wysokim „hype” i wysokich ocenach

W kampanii WebRAT repozytoria podszywały się m.in. pod exploity dla podatności nagłaśnianych w mediach, w tym (przykłady z opisów kampanii):

  • CVE-2025-59295 (Windows MSHTML/Internet Explorer – przepełnienie sterty),
  • CVE-2025-10294 (OwnID Passwordless Login dla WordPress – obejście uwierzytelnienia),
  • CVE-2025-59230 (Windows RasMan – EoP).

Repozytorium wygląda „profesjonalnie” (czasem aż za bardzo)

Kaspersky zwraca uwagę na powtarzalny, „raportowy” układ opisów: przegląd podatności, warunki podatności, instrukcje pobrania i użycia, a nawet zalecenia mitygacji – z drobnymi różnicami w słownictwie, co pasuje do treści generowanych maszynowo.

Payload: hasłowany ZIP + prosta egzekucja

W opisywanym wariancie archiwum zawierało cztery elementy (nazwy mogą się różnić, ale schemat się powtarza):

  1. plik-wydmuszkę, którego nazwa zawiera hasło do archiwum (np. pass – 8511),
  2. „zepsuty” wabik payload.dll (korupcja PE, bez funkcji),
  3. właściwy dropper (np. rasmanesc.exe) oraz
  4. start_exp.bat, który sprowadza się do uruchomienia droppera (zwiększa szansę, że użytkownik kliknie „to co trzeba”).

Zachowanie droppera (wysoki sygnał dla EDR)

Według Kaspersky’ego rasmanesc.exe m.in.:

  • podnosi uprawnienia (mapowalne do TTP typu privilege escalation),
  • podejmuje próby osłabienia ochrony (np. wyłączenie/obejście Windows Defender),
  • pobiera właściwego WebRAT z twardo zaszytego adresu i uruchamia go.

BleepingComputer doprecyzowuje, że WebRAT ma też kilka metod persystencji (m.in. modyfikacje rejestru, harmonogram zadań, „rozsiew” w katalogach systemowych).

IOCs (minimum do polowania)

W Securelist opublikowano m.in. przykładowe IOCs dla tej kampanii: listę złośliwych repozytoriów, domeny C2 oraz hashe (MD5) próbek, w tym MD5 dla rasmanesc.exe wskazywany w analizie.

Uwaga operacyjna: traktuj IOCs jako punkt startu (campaign-specific), a nie „pełną listę” — lepiej budować detekcje po zachowaniu (Defender tampering, BAT→EXE→download→execute, nietypowy ruch HTTP do nowych domen).


Praktyczne konsekwencje / ryzyko

Jeśli użytkownik uruchomi taki „PoC”, ryzyko nie kończy się na jednorazowym incydencie. W opisach WebRAT pojawiają się m.in.:

  • kradzież danych logowania i sesji (Steam/Telegram/Discord),
  • kradzież danych z portfeli kryptowalutowych,
  • funkcje spyware: keylogging, nagrywanie ekranu, użycie kamery/mikrofonu, screenshoty,
  • pełniejsza kontrola stacji jako backdoor.

W praktyce oznacza to kompromitację kont prywatnych i służbowych (SSO w przeglądarce, tokeny, menedżery haseł), a przy pracy na laptopie firmowym — realny wektor wejścia do organizacji.


Rekomendacje operacyjne / co zrobić teraz

Dla SOC / IR / blue team

  • Hunt po zachowaniu: alertuj na próby wyłączania/ingerencji w Microsoft Defender oraz nietypowe tworzenie zadań w Harmonogramie tuż po uruchomieniu plików z katalogów pobrań/rozpakowanych ZIP.
  • Detekcja łańcucha: start_exp.batrasmanesc.exe → połączenie HTTP(S) do świeżych/egzotycznych domen → zapis/uruchomienie kolejnego binarium.
  • Blokady prewencyjne:
    • blokuj uruchamianie plików BAT/PS1 z %Downloads% i katalogów tymczasowych (ASR/WDAC/AppLocker zależnie od środowiska),
    • ogranicz uprawnienia lokalnego admina tam, gdzie nie jest to konieczne,
    • egress filtering dla stacji roboczych + DNS logging (łatwiej wyłapać nowe C2).
  • IOC-based triage: użyj listy repo/C2/hashy z raportu jako szybki screening, ale nie opieraj całej strategii na IOCs.

Dla badaczy i studentów (najczęstsza grupa ryzyka w tej kampanii)

  • Nigdy nie uruchamiaj PoC z internetu na „gołym” hoście. VM/sandbox, brak dostępu do prywatnych danych, odłączone urządzenia audio/wideo, brak realnych sesji w przeglądarce. (Kaspersky wprost wskazuje, że dojrzały workflow badawczy zakłada izolację).
  • Sygnały ostrzegawcze repo: hasłowany ZIP, „kliknij Download”, plik z hasłem w nazwie, instrukcje jak z poradnika, a w środku EXE/BAT zamiast kodu exploita — traktuj to jako czerwoną flagę.

Różnice / porównania z innymi przypadkami

To, co wyróżnia WebRAT w tej odsłonie, to „opakowanie” ataku: zamiast typowego „cracka” mamy narrację stricte bezpieczeństwową (CVE, CVSS, mitigacje), co zwiększa skuteczność na osobach, które chcą wyglądać profesjonalnie („testuję podatność”), ale nie mają jeszcze twardej higieny operacyjnej.

Trend jest udokumentowany nie tylko w raportach vendorów, ale i w literaturze: analiza PoC na GitHub dla CVE z lat 2017–2021 wykazała, że da się znaleźć setki repozytoriów z oznakami złośliwości; autorzy raportują 899 takich repo na 47 285 badanych (~1,9%).


Podsumowanie / kluczowe wnioski

  • Kampania z grudnia 2025 r. pokazuje, że „GitHub jako źródło PoC” bez weryfikacji to ryzyko, zwłaszcza gdy temat dotyczy modnych CVE.
  • WebRAT jest groźny nie dlatego, że jest „nowy”, ale dlatego, że jest skutecznie dystrybuowany i nastawiony na kradzież kont + szpiegowanie.
  • Najlepsza obrona to połączenie: izolacja analiz (VM/sandbox), kontrola uruchamiania skryptów/binariów z katalogów użytkownika, oraz detekcje behawioralne na tampering i nietypowe łańcuchy procesów.

Źródła / bibliografia

  1. BleepingComputer — „WebRAT malware spread via fake vulnerability exploits on GitHub” (23.12.2025). (BleepingComputer)
  2. Kaspersky Securelist — „From cheats to exploits: Webrat spreading via GitHub” (23.12.2025). (Securelist)
  3. Solar 4RAYS / RT-Solar — komunikat o Webrat (27.05.2025). (RT Solar)
  4. Kaspersky (blog) — „Malicious code on GitHub: How hackers target programmers” (25.02.2025). (Kaspersky)
  5. El Yadmani, The, Gadyatskaya — „Beyond the Surface: Investigating Malicious CVE Proof of Concept Exploits on GitHub” (arXiv:2210.08374, v2: 07.06.2023). (arXiv)