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

CVE-2019-11510 → pre‑auth arbitrary file read

TL;DR

CVE‑2019‑11510 to krytyczna podatność typu pre‑auth arbitrary file read w Ivanti/Pulse Connect Secure (PCS). Umożliwia niezalogowanemu napastnikowi odczyt plików z urządzenia VPN poprzez specjalnie przygotowane żądanie HTTP, co w praktyce prowadzi do kradzieży konfiguracji, kluczy i tokenów sesji oraz dalszych włamań z pominięciem MFA. Z punktu widzenia ATT&CK odpowiada to T1190 (Initial Access), a po eksfiltracji sekretów typowo obserwujemy *T1552. (Unsecured Credentials)**, T1539 (Steal Web Session Cookie) i później T1078 (Valid Accounts). Patching do wersji naprawiających (np. 8.2R12.1, 8.3R7.1, 9.0R3.4 i nowsze) jest obowiązkowy, a urządzenia należy weryfikować narzędziem Integrity Checker Tool (ICT) oraz logami WAF/ALB.


Krótka definicja techniczna

CVE‑2019‑11510: w Pulse Connect Secure (PCS) do wersji 8.2<8.2R12.1, 8.3<8.3R7.1 i 9.0<9.0R3.4 błąd w walidacji ścieżek umożliwia nieuwierzytelniony odczyt dowolnych plików poprzez spreparowany URI. CVSS v3.1 = 10.0 (CRITICAL).


Gdzie występuje / przykłady platform

  • Network/Appliance: Ivanti/Pulse Connect Secure (sprzęt/VM) — wektor pierwotny.
  • Windows / AD: po wycieku haseł/kluczy możliwy dalszy dostęp i lateral movement (T1078).
  • AWS: ślady/ochrona w AWS WAF (logi httpRequest.*) i ALB access logs.
  • Azure: Application Gateway WAF / Front Door — telemetryka wbicia i blokad. [brak oficjalnego cytatu — ogólna praktyka]
  • GCP: Cloud Armor / Chronicle parser dla Pulse Secure (syslog).
  • K8s / ESXi / M365: nie dotyczy bezpośrednio (pośredni wpływ poprzez kompromitację tożsamości).

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

Błąd pre‑auth file read umożliwia z poziomu Internetu pobieranie plików z urządzenia PCS. Atakujący używa spreparowanego żądania HTTP (z elementami przechodzenia po katalogach), aby ominąć autoryzację i uzyskać dostęp do zasobów urządzenia. Następnie eksfiltruje m.in. pliki konfiguracyjne, klucze i artefakty sesji, które mogą pozwolić na przejęcie aktywnych sesji, logowanie jak legalni użytkownicy (T1078) lub dalszą penetrację sieci. Podatność była szeroko wykorzystywana (CISA KEV), a technicznie wpisuje się w ATT&CK T1190.


Artefakty i logi

ŹródłoPole/artefaktWskaźnikKomentarz
Pulse Secure syslog (Events/User/Admin)log message / URInietypowe żądania do endpointów HTML5 + sekwencje traversalUpewnij się, że eksportujesz syslog (WELF/Custom).
Reverse proxy / WAFURI, query, status, UA, src IPobecność wzorców path traversal, słowa‑klucze związane z HTML5 gatewayDobre miejsce do korelacji i rate‑limitu.
AWS WAF (CloudWatch Logs)httpRequest.uri, action, terminatingRuleIdżądania z ../ i słowami kluczowymi; akcja ALLOW/BLOCKPola wg dokumentacji AWS WAF.
ALB Access Logs (S3)request, elb_status_code, target_status_code200/206 dla nietypowych żądańW połączeniu z WAF daje pełny obraz.
SIEM parsers (Chronicle/QRadar/itd.)Normalizowane pola URLdopasowania na tokenach ścieżki i traversalPrzykłady konfiguracji dla PCS.
ICT (Integrity Checker Tool)wynik skanunowe/zmodyfikowane pliki na urządzeniuDo potwierdzenia kompromitacji obrazu urządzenia.
EID / K8s audit / M365n/dPodatność dotyczy appliance, nie tych źródeł.

Detekcja (praktyczne reguły)

Sigma (web / reverse proxy / WAF)

title: Pulse Connect Secure — CVE-2019-11510 Attempt (Guacamole + Traversal)
id: 1c6d2c1a-7a4e-4b6c-9f0b-3a2c2f7a9f10
status: experimental
logsource:
  category: webserver
  product: proxy
detection:
  sel_dana:
    request|contains:
      - "/dana"
      - "dana-na"
  sel_guac:
    request|contains: "guacamole"
  sel_trav:
    request|contains:
      - "../"
      - "..%2f"
      - "%2e%2e"
  condition: sel_dana and sel_guac and sel_trav
falsepositives:
  - Ruch HTML5 gateway bez traversal (powinien nie zawierać '../')
level: high
tags:
  - attack.t1190
  - cve.2019-11510

Wzorzec „Guacamole” oraz traversal jest wskazywany w publicznych regułach Sigma dla CVE‑2019‑11510.

Splunk (SPL)

(index=web OR index=proxy OR index=waf OR sourcetype=pulse* OR sourcetype=aws:waf)
| eval uri=coalesce(cs_uri_stem, request, uri_path, url), q=coalesce(cs_uri_query, uri_query, query_string)
| where (like(uri, "%/dana%") OR like(uri, "%dana-na%"))
  AND (like(uri, "%guacamole%") OR like(q, "%guacamole%"))
  AND (like(uri, "%../%") OR like(q, "%../%") OR like(uri, "%..%2F%") OR like(q, "%..%2F%"))
| stats count dc(src) AS src_ips values(user) AS users by uri, q, user_agent, dest
| where count > 0

KQL (Microsoft Sentinel / Log Analytics)

let IOCUri = dynamic(["/dana", "dana-na"]);
let Kw = "guacamole";
(union isfuzzy=true
    CommonSecurityLog
    | extend uri = coalesce(RequestURL, RequestURI, concat(URL, URLQuery)), src = SourceIP, ua = RequestClientApplication
  , AzureDiagnostics
    | where Category has "ApplicationGatewayFirewallLog"
    | extend uri = requestUri_s, src = clientIp_s, ua = userAgent_s
)
| where uri has_any (IOCUri) and uri contains Kw and (uri contains "../" or uri contains "..%2F")
| summarize cnt=count(), make_set(src), make_set(ua) by bin(TimeGenerated, 5m), tostring(uri)

AWS CloudWatch Logs Insights (AWS WAF)

# Log Group: /aws/waf/<twoj-webacl>
fields @timestamp, httpRequest.clientIp, httpRequest.method, httpRequest.uri, action, terminatingRuleId
| filter httpRequest.uri like /dana/ and httpRequest.uri like /\.\./ and httpRequest.uri like /guacamole/
| stats count() as hits by httpRequest.clientIp, action, terminatingRuleId, httpRequest.uri
| sort hits desc

Pola httpRequest.*, action, terminatingRuleId pochodzą z oficjalnego schematu logów AWS WAF.

Elastic (KQL + EQL)

KQL (http logs / ecs):

url.path:/dana* AND url.path:*guacamole* AND (url.path:*../* OR url.query:*..%2F*)

EQL (sieć/HTTP):

network where network.protocol == "http"
  and wildcard(url.path, "/dana*")
  and stringcontains(url.path, "guacamole")
  and (stringcontains(url.path, "../") or stringcontains(url.query, "..%2F"))

Heurystyki / korelacje

  • URI + traversal + słowo‑klucz (HTML5 gateway) + HTTP 200/206 ⇒ wysoka pewność.
  • Seria prób z różnych IP/ASN + wspólny UA (skaner) ⇒ obniż priorytet lub taguj jako „scanner/bot”.
  • Po próbach: nowe sesje VPN z nieznanych ASN, nietypowa geografia (impossible travel), zmiana fingerprintu TLS → koreluj z logowaniem do AD/VPN. (CISA wskazywała takie objawy przy kampaniach na PCS.)

False positives / tuning

  • Legalny ruch HTML5 (Guacamole) bez traversal powinien być akceptowany — warunek na ../ / %2e%2e jest kluczowy.
  • Skany bezpieczeństwa / bug‑bounty generują podobne wzorce — whitelistuj znane zakresy.
  • Deduplikuj zdarzenia na 5–10 min, grupując po srcIP + UA + URI.

Playbook reagowania

  1. Triaż i izolacja: jeśli reguły z §7 wskazują udane trafienia (200/206), natychmiast odetnij dostęp administracyjny do PCS / wstaw przed nim regułę WAF blokującą wzorce traversal.
  2. Weryfikacja stanu PCS: uruchom Ivanti Integrity Checker Tool (ICT) (wbudowany lub zewnętrzny) i zarchiwizuj wynik.
  3. Forensyka: zgraj logi (Events/User/Admin), eksport syslog z SIEM, logi WAF/ALB. (Dokumentacja logowania PCS.)
  4. Patching / remediacja: zaktualizuj PCS do wersji naprawiających CVE‑2019‑11510 (≥8.2R12.1, ≥8.3R7.1, ≥9.0R3.4). Jeśli ICT wykrył modyfikacje — rozważ reinstalację obrazu i rotację kluczy/certyfikatów.
  5. Reset/rotacja: wymuś reset haseł VPN/AD, rotuj certyfikaty/klucze używane przez PCS, unieważnij aktywne sesje. (Powiązanie z T1552.*).
  6. Hunting post‑exploitation: szukaj logowań z nowych ASN, użycia skradzionych ciasteczek/tokens (T1539), nietypowych mapowań ról.
  7. Twardnienie: stałe reguły WAF blokujące traversal, MFA wszędzie, segmentacja i ograniczenie dostępu do konsoli administracyjnej PCS.
  8. Zgłoszenia i KEV: traktuj jako KEV i raportuj zgodnie z procesem (CISA KEV).

Przykłady z kampanii / case studies

  • REvil/Sodinokibi (2019–2020) — raporty łączyły wątki ransomware z wykorzystaniem PCS w wektorze wejścia.
  • „Fox Kitten” (APT z Iranu, 2019–2020) — szeroka eksploatacja VPN (w tym Pulse) jako początkowego dostępu; utrzymywanie backdoorów.
  • CISA alerty (2020+) — ostrzeżenia o kontynuowanej eksploatacji niezałatanych PCS; zalecenia aktualizacji i hardeningu.

Lab (bezpieczne testy) — przykładowe komendy

Tylko w odizolowanym labie. Celem jest wytworzenie logów do weryfikacji reguł, bez uderzania w realny PCS.

  1. Symulacja logów na NGINX (Docker)
docker run -d --name nginx -p 8080:80 nginx:alpine
# Generowanie „szumu” traversal + słowo-klucz (log only):
for p in "/test/guacamole/../../etc/hosts" "/dana-na/../test/guacamole/..%2F..%2Ffile" ; do
  curl -s "http://127.0.0.1:8080${p}?q=check" >/dev/null
done
  1. Weryfikacja detekcji — załaduj logi access.log do SIEM i uruchom reguły z §7.
  2. Test WAF — utwórz regułę blokującą sekwencje traversal i sprawdź, czy zapisy AWS WAF rejestrują akcję BLOCK oraz terminatingRuleId.

Mapowania (Mitigations, powiązane techniki)

Mitigations (ATT&CK Enterprise):

  • M1051 — Update Software (regularne aktualizacje/łaty).
  • M1016 — Vulnerability Scanning (ciągłe skanowanie i priorytetyzacja).
  • M1036 — Account Use Policies (zasady użycia kont, blokady, sesje).
  • M1031/M1037 — Network Intrusion Prevention / Filter Network Traffic (WAF/IPS przed PCS).

Powiązane techniki:

  • T1552.001 — Credentials in Files (wyciek haseł z plików).
  • T1552.004 — Private Keys (eksfiltracja kluczy).
  • T1539 — Steal Web Session Cookie (przejęcie sesji).
  • T1078 — Valid Accounts (logowanie prawdziwymi poświadczeniami).

Źródła / dalsza literatura

  • NVD: szczegóły CVE‑2019‑11510, wersje naprawiające, CVSS, wpis KEV. (NVD)
  • CISA Alert AA20‑010A/AA20‑107A: kontynuowana eksploatacja PCS. (CISA)
  • MITRE ATT&CK T1190: Exploit Public‑Facing Application (mapowanie i przykłady użycia przez grupy). (MITRE ATT&CK)
  • SigmaHQ: detekcja „Guacamole” dla CVE‑2019‑11510. (detection.fyi)
  • Ivanti (PCS/ICS) — logowanie i monitoring; syslog/filtry. (Ivanti Help)
  • AWS WAF — pola logów (httpRequest.*, action, terminatingRuleId). (AWS Documentation)
  • JPCERT/CC: podsumowanie kampanii na Pulse Connect Secure. (JPCERT/CC Eyes)
  • IBM X‑Force / Sophos: REvil/Sodinokibi a wektory VPN. (IBM)
  • Ivanti/CISA — Integrity Checker Tool (ICT) i użycie w dochodzeniach. (CISA)

Checklisty dla SOC / CISO

SOC (operacyjne):

  • Włączony eksport logów PCS (Events/User/Admin) do SIEM.
  • Reguły detekcji z §7 aktywne w web/WAF/ALB.
  • Korelacje: traversal + 200/206 + „Guacamole” + nowe logowania VPN.
  • Lista zaufanych skanerów/ASN w allowlist (redukcja FP).
  • Dashboard „PCS Exploit Attempts” (źródła, URI, status, ASN).

CISO (strategiczne):

  • Potwierdzony patch level PCS ≥ wersje naprawiające.
  • Procedura ICT po każdym incydencie/aktualizacji.
  • Polityka rotacji kluczy/certyfikatów i tokenów SSO przy incydencie (T1552.*).
  • WAF/IPS z regułami traversal przed PCS; dostęp admin tylko z sieci uprzywilejowanej.
  • Regularny VA/PT urządzeń brzegowych (M1016).

CVE-2019-19781 — Citrix ADC/NetScaler Gateway Directory Traversal → RCE

TL;DR

Krytyczna podatność Directory Traversal w Citrix ADC/NetScaler Gateway umożliwiała pre‑auth RCE na urządzeniu brzegowym. Typowy łańcuch: żądanie zapisujące plik XML w katalogu szablonów + odwołanie renderujące go jako szablon → wykonanie kodu (Perl/Unix shell). Priorytety: sprawdź logi /var/log/httpaccess.log i /var/log/ns.log, uruchom oficjalny IoC Scanner (Citrix/Mandiant), załatataj lub przeinstaluj do wersji naprawionej, usuń zakładki/podstawione pliki w /netscaler/portal/templates/, oceń lateral movement.


Krótka definicja techniczna

CVE‑2019‑19781 to błąd walidacji ścieżek (CWE‑22) w Citrix ADC/Gateway (10.5–13.0), który pozwalał na przejście katalogów i zapisywanie plików w lokalizacjach przetwarzanych przez mechanizm szablonów (Template Toolkit). W efekcie niezalogowany napastnik mógł zapisać złośliwy szablon XML i wywołać jego renderowanie, co prowadziło do wykonania kodu i przejęcia urządzenia.


Gdzie występuje / przykłady platform

  • Citrix ADC / NetScaler ADC i Citrix Gateway / NetScaler Gateway (wdrożenia fizyczne/VM, także w chmurach IaaS). Wrażliwe były linie 10.5, 11.1, 12.0, 12.1, 13.0 przed poprawkami.
  • Środowiska hybrydowe (np. ADC za ALB/ELB, Azure Front Door, on‑prem DMZ) — ekspozycja jest publiczna, więc podatność pełni rolę wektora Initial Access (T1190).
  • Oficjalne komunikaty i poradniki aktualizacji/mitigacji dostarczył Citrix.

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

Mechanizm obsługi żądań do ścieżek /vpns/portal/ w ADC przekazywał je do modułu Perl renderującego pliki jako szablony. Błąd path traversal pozwalał sterować nazwą/położeniem pliku (np. poprzez funkcję csd/filewrite w łańcuchu wywołań), co umożliwiało zapis przygotowanego XML w katalogu szablonów oraz jego wyrenderowanie kolejnym żądaniem (lub w niektórych wariantach jednym żądaniem). Po renderyzacji Template Toolkit umożliwiał wykonanie akcji prowadzących do RCE.

Dlaczego technika była skuteczna:

  • Pre‑auth oraz publiczna ekspozycja urządzeń (brzeg/DMZ).
  • Logi i inspekcja sieci często omijane (urządzenia przed IDS/NDR albo ruch TLS).
  • Szybka weaponizacja (publiczne PoC i masowe skanowanie).
  • Pojawiły się przypadki „vigilante patching” (NOTROBIN), które maskowały rzeczywisty poziom kompromitacji.

Artefakty i logi (co zbierać)

Źródło / komponentCo szukać (wzorzec)Przykład / uwagiEID / CloudTrail / K8s / M365
ADC /var/log/httpaccess.logSekwencja: POST do skryptu Perl w /vpns/portal/ + GET/HEAD .xml w /vpns/portal/ (200/304)Polecenia grep używane przez IR: grep -iE 'POST.*\\.pl.* 200' /var/log/httpaccess.log oraz `grep -iE 'GET.\.xml. (200304)’ /var/log/httpaccess.log`
ADC filesystemNowe/zaskakujące pliki *.xml i skompilowane *.ttc2 w /netscaler/portal/templates/Artefakt po udanym zapisie oraz renderowaniu szablonu
ProcesyProcesy uruchamiane przez użytkownika nobody (poza typowym httpd)`ps auxgrep nobody` – wskazówka Mandiant dla triage
CrontabNieautoryzowane wpisy (cykliczne pobieranie/uruchamianie binariów)M.in. linie z curl i uruchamianiem plików w /tmp/.init/
ADC /var/log/ns.log (AAA/syslog)Nietypowe logowania/porzucone sesje, wzmianki LOGIN_FAILED/Client_ipSłuży też do korelacji czasu ataku z sesjami użytkowników
WAF/ALB/Front DoorURI zawierające /vpn/../vpns/portal oraz odwołania do *.xmlAnaliza AWS WAF/ALB, Azure WAF, appliance WAFCloudTrail: n/d (zamiast tego CloudWatch Logs Insights / AzureDiagnostics)

Uwaga: zakres kolumn CloudTrail/M365/K8s zwykle nie dotyczy natywnej analityki ADC; zbieraj logi sieciowe (WAF/ALB) i syslog z ADC.


Detekcja (praktyczne reguły)

Sigma (HTTP access logs – pre‑auth traversal do skryptu Perl)

title: Citrix ADC CVE-2019-19781 Pre-Auth Traversal to Perl Script
id: 0d7d8b3a-3c2f-4c2e-a2b0-citrix-19781-a
status: stable
description: Wykrywa żądania POST z traversalem do /vpns/portal/*.pl (np. newbm.pl)
references:
  - https://cloud.google.com/blog/topics/threat-intelligence/rough-patch-promise-it-will-be-200-ok
logsource:
  category: webserver
detection:
  sel_uri:
    request:
      - '*\/vpn/*../*/vpns/portal/*'
    url|contains:
      - '/vpn/../vpns/portal/'
  sel_pl:
    url|endswith: '.pl'
  sel_method:
    http_method: POST
  condition: sel_uri and sel_pl and sel_method
falsepositives:
  - Skanery podatności / testy pentestowe
level: high
tags:
  - attack.T1190

Sigma (HTTP access logs – renderowanie szablonu XML)

title: Citrix ADC CVE-2019-19781 XML Template Render
id: 7f0a6e60-9fda-4a7f-b3f9-citrix-19781-b
status: stable
description: Żądania GET/HEAD do /vpns/portal/*.xml (200/304) po wcześniejszym POST
logsource:
  category: webserver
detection:
  sel_xml:
    url|contains: '/vpns/portal/'
    url|endswith: '.xml'
  sel_code:
    http_status:
      - 200
      - 304
  condition: sel_xml and sel_code
level: high
tags:
  - attack.T1190

(W regułach SIEM zalecana korelacja POST→GET w krótkim oknie czasu i z tym samym src_ip/user_agent).

Splunk (SPL)

(index=weblogs OR index=proxy OR index=adc)
| eval uri=coalesce(cs_uri_stem, uri_path, request)
| eval method=coalesce(cs_method, http_method, method)
| search (uri="/vpn/*../*/vpns/portal/*" method=POST) OR (uri="/vpns/portal/*.xml" (status=200 OR status=304))
| stats earliest(_time) as first_seen, latest(_time) as last_seen, values(status) as http_status by src, uri, user_agent, method
| sort - last_seen

KQL (Azure – WAF/App Gateway/Front Door)

let T1 = (
  AzureDiagnostics
  | where Category in ("ApplicationGatewayFirewallLog","FrontDoorWebApplicationFirewallLog")
  | where requestUri_s has "/vpn/../vpns/portal" and httpMethod_s == "POST"
);
let T2 = (
  AzureDiagnostics
  | where Category in ("ApplicationGatewayAccessLog","ApplicationGatewayFirewallLog","FrontDoorAccessLog","FrontDoorWebApplicationFirewallLog")
  | where requestUri_s has "/vpns/portal/" and requestUri_s endswith ".xml" and toint(substatus_s) in (200,304)
);
T1
| join kind=innerunique T2 on ClientIP_s, userAgent_s
| project TimeGenerated, ClientIP_s, userAgent_s, requestUri_s, Resource

(Łańcuch POST→GET z tym samym IP/UA).

AWS (CloudWatch Logs Insights – WAF/ALB)

fields @timestamp, httpRequest.clientIp, httpRequest.httpMethod, httpRequest.uri
| filter httpRequest.uri like /\/vpn\/\.\.\/vpns\/portal\// or httpRequest.uri like /\/vpns\/portal\/.*\.xml$/
| sort @timestamp desc

(Uwaga: CloudTrail nie rejestruje ruchu HTTP do ADC; używaj logów WAF/ALB/ELB).

Elastic (EQL – korelacja sekwencji)

sequence by source.ip with maxspan=3m
  [ network where url.path like "*\/vpn/*../*/vpns/portal/*" and http.request.method == "POST" ]
  [ network where url.path like "/vpns/portal/*.xml" and http.response.status_code in (200,304) ]

Źródła: opis łańcucha Mandiant.


Heurystyki / korelacje

  • Koreluj POST → GET/HEAD do /vpns/portal/*.xml w oknie 1–3 min z tym samym src_ip/User-Agent.
  • Po udanym renderze spodziewaj się pojawienia plików *.xml + *.ttc2 w /netscaler/portal/templates/.
  • Sprawdź procesy nobody wykraczające poza httpd oraz nowe wpisy crontab.
  • IOC typu „vigilante” (NOTROBIN) też wskazuje kompromitację (modyfikuje/domyka wektor, ale zostawia tylną furtkę).

False positives / tuning

  • Skanery podatności, testy pentestowe i health‑checki mogą generować żądania z ... Ogranicz alerty do konkretnych ścieżek (/vpns/portal/) i kodów 200/304 dla .xml.
  • Agreguj po /24 i User‑Agent — masowe skany będą miały wiele hostów/UA; eksploatacja zwykle ma spójny UA w krótkim czasie.
  • Włącz allow‑list znanych skanerów (np. IP Twojej usługi ASM/WAF).

Playbook reagowania (IR)

  1. Izolacja & widoczność
    • Tymczasowo ogranicz dostęp do ADC (geo/IP allow‑list lub VPN admins only).
    • Włącz pełny syslog do SIEM + eksport logów WAF/ALB/Front Door.
  2. Triaging artefaktów (na ADC)
    • Logi HTTP: grep -iE 'POST.*\.pl.* 200' /var/log/httpaccess.log -A1 grep -iE 'GET|HEAD.*\.xml.* (200|304)' /var/log/httpaccess.log -B1
    • Pliki: find /netscaler/portal/templates -type f \( -name '*.xml' -o -name '*.ttc2' \) -mtime -30 -ls
    • Procesy/utrwalenie: ps aux | grep nobody | grep -v httpd crontab -l
  3. Skan IoC (oficjalny)
    • Uruchom Citrix/Mandiant IoC Scanner na urządzeniu (tryb live). Zapisz wynik, zabezpiecz artefakty.
  4. Eradykacja
    • Zastosuj fixed buildy / przeinstaluj do wersji poprawionej; usuń pliki z /netscaler/portal/templates/; wyczyść crontab; sprawdź modyfikacje ns.conf.
  5. Odzyskanie i twardnienie
    • Rotacja haseł/kluczy, re‑issue certyfikatów (wyciek ns.conf bywał obserwowany).
    • WAF: reguły blokujące /vpn/../vpns/portal/ i dostęp do *.xml w /vpns/portal/.
    • Monitoring ciągły według reguł z sekcji 7.

Bezpieczeństwo: wszelkie działania wykonuj wyłącznie na własnym, testowym lub firmowym sprzęcie i w celu obrony.


Przykłady z kampanii / case studies

  • Masowe skanowanie i exploitation od 10–14 stycznia 2020; szybka weaponizacja PoC i infekcje (m.in. koparki, web‑shelle).
  • NOTROBIN (vigilante) – aktor wykorzystywał podatność do „łatania” innych backdoorów i blokowania kolejnych ataków, jednocześnie utrzymując własny dostęp. Wykrywano cykliczne czyszczenie plików .xml w katalogu szablonów.
  • Analizy IR (Fox‑IT/NCC Group) – szczegółowa rekonstrukcja łańcucha: zapis XML poprzez csd/filewrite, render i obejścia (w tym jednorazowe żądanie).

Lab (bezpieczne testy)

Cel: sprawdzić, czy detekcje/WAF reagują na wzorzec, bez eksploatacji.

  • Generowanie bezpiecznego zdarzenia (Twoje labowe ADC lub serwer testowy): curl -k -I --path-as-is "https://lab.adc.example/vpn/../vpns/portal/test.xml" Spodziewany 404; zdarzenie powinno trafić do WAF/ALB/NGINX/IIS i zadziałać reguła wykrywająca wzorzec URI.
  • Weryfikacja w Splunk/KQL – odpal zapytania z pkt 7 i potwierdź, że testowe zdarzenie podniosło alert.
  • Symulacja artefaktów – utwórz puste pliki .xml w ścieżce testowej poza ADC i sprawdź, czy reguły FIM (jeśli masz) łapią zdarzenia tworzenia plików.

Nie testuj na systemach produkcyjnych i nie używaj exploitów – to ćwiczenie detekcyjne.


Mapowania (Mitigations, powiązane techniki)

Mitigations (ATT&CK)

  • M1051 – Update Software: aktualizacje/łatki firmware ADC.
  • M1050 – Exploit Protection: reguły WAF/IPS dla ścieżek z traversalem.
  • M1031 – Network Intrusion Prevention: sygnatury IDS/IPS dla /vpn/../vpns/portal/ i .xml.
  • M1030 – Network Segmentation: ogranicz zasięg ADC (DMZ, mikrosegmentacja, tylko niezbędne serwisy).

Powiązane techniki (ATT&CK)

  • T1190 – Exploit Public-Facing Application (wejście).
  • T1505.003 – Web Shell (utrwalenie na urządzeniu).
  • T1059.004 – Unix Shell (wykonanie komend).
  • T1105 – Ingress Tool Transfer (dociąganie narzędzi).
  • T1053.003 – Cron (utrwalenie).

Źródła / dalsza lektura

  • Citrix — ogłoszenie podatności / blogi i mitgacje. (Citrix.com)
  • NVD – opis CVE i listy wersji: CVE‑2019‑19781. (NVD)
  • Mandiant (Google Cloud) – „Rough Patch: I Promise It’ll Be 200 OK” (artefakty, wzorce logów, detekcje). (Google Cloud)
  • Mandiant/Citrix – IoC Scanner (repo). (GitHub)
  • Fox‑IT/NCC Group – „A Second Look at CVE‑2019‑19781” (wewnętrzna mechanika, obejścia). (Fox-IT International blog)
  • CISA – Alert AA20‑031A (detekcja, kontekst zagrożeń). (CISA)
  • Unit 42 – analiza i dane o skanach/eksploatacjach. (Unit 42)
  • NCSC‑UK – ostrzeżenie o aktywnej eksploatacji. (NCSC)
  • ATT&CK T1190 – strona techniki. Wersja frameworku: v18. (MITRE ATT&CK)

Checklisty dla SOC / CISO

SOC (operacyjna):

  • Reguły detekcji: Sigma/SPL/KQL/EQL wdrożone i przetestowane.
  • Ingest: syslog z ADC (httpaccess.log, ns.log) + WAF/ALB/Front Door.
  • Korelacja POST→GET .xml (200/304) + alert wysokiego priorytetu.
  • Playbook IR: zbieranie artefaktów, IoC Scanner, triage procesów nobody, crontab.
  • Dashboard/Trend: skany vs. udane odwzorowania.

CISO (strategiczna):

  • Polityka patch management dla urządzeń brzegowych (M1051).
  • WAF/IPS – sygnatury traversal dla /vpn/../vpns/portal/ (M1031/M1050).
  • Segmentacja ADC (DMZ, least access) + mikrosegmentacja (M1030).
  • Regularny threat hunt po artefaktach /netscaler/portal/templates/*.xml i .ttc2.
  • Testy detekcji (purple team) i przeglądy konfiguracji WAF przed oknami świątecznymi.

Uwaga o zgodności z ATT&CK: CVE‑2019‑19781 mapuje się przede wszystkim do T1190 (Initial Access). Dalsze TTP (web‑shell, cron, transfer narzędzi) reprezentują etapy po‑eksploatacyjne obserwowane w incydentach opisanych przez Mandiant/Fox‑IT i powinny być objęte monitorowaniem.

CVE-2019-18935 — Progress Telerik UI for ASP.NET AJAX RCE (RadAsyncUpload / .NET deserialization)

TL;DR

Krytyczna podatność w Telerik UI for ASP.NET AJAX (do 2019.3.1023) pozwala na zdalne wykonanie kodu poprzez niezabezpieczoną deserializację JSON w komponencie RadAsyncUpload, zwykle w kontekście procesu w3wp.exe. Często wymaga znajomości kluczy szyfrujących (np. MachineKey) — możliwych do pozyskania m.in. przez starsze luki CVE‑2017‑11317/11357 — i jest powszechnie wykorzystywana w łańcuchach ataku (CISA KEV). Zalecenie: aktualizacja co najmniej do R1 2020 (2020.1.114), rotacja kluczy, włączenie WAF oraz proaktywna detekcja ruchu do Telerik.Web.UI.WebResource.axd?type=rau i procesów potomnych w3wp.exe.


Krótka definicja techniczna

CVE‑2019‑18935 to luka typu .NET deserialization w RadAsyncUpload (Telerik UI for ASP.NET AJAX), prowadząca do RCE po dostarczeniu specjalnie przygotowanych danych do endpointu m.in. Telerik.Web.UI.WebResource.axd?type=rau. Od wersji 2020.1.114 domyślne ustawienie łagodzi błąd; w 2019.3.1023 istnieje ustawienie niefabryczne ograniczające wektor. Często wykorzystywana łącznie z CVE‑2017‑11317/11357, które ułatwiają pozyskanie kluczy szyfrujących uploadera.


Gdzie występuje / przykłady platform

  • Windows / IIS – typowe środowisko dla aplikacji ASP.NET korzystających z Telerik UI (komponenty front‑end na serwerze).
  • Aplikacje firm trzecich (np. platformy CMS/CRM, jak Sitecore w starszych buildach, które pakowały Telerik UI) – ryzyko pośrednie, gdy komponent jest zależnością.
  • Chmura (IaaS/PaaS) – instancje IIS za ALB/WAF (AWS) lub Application Gateway/WAF (Azure); sama luka jest aplikacyjna, ale ślady widać w dziennikach WAF/ALB.

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

  • Wektor: żądanie HTTP (zwykle POST) do /Telerik.Web.UI.WebResource.axd?type=rau z ładunkiem, który po stronie serwera trafia do deserializacji przez JavaScriptSerializer, umożliwiając wstrzyknięcie obiektu prowadzące do RCE.
  • Warunek sprzyjający: atak jest trivialny, gdy napastnik zna/odzyska klucze szyfrowania uploadera (MachineKey, parametry RadAsyncUpload) — często poprzez wcześniejsze błędy CVE‑2017‑11317/11357 (słaba kryptografia RAU) lub wyciek web.config.
  • Efekt: wykonanie kodu w kontekście IIS Worker Process (w3wp.exe), często skutkujące uruchomieniem cmd.exe/powershell.exe, zrzutem webshella lub ściągnięciem narzędzi.
  • Dlaczego skuteczna:
    1. komponent szeroko rozpowszechniony (często “ukryty” jako zależność),
    2. endpoint RAU bywa rzadko monitorowany,
    3. łatwo ukryć się w normalnym ruchu HTTP(S),
    4. luka jest w KEV, więc aktywnie skanowana/wykorzystywana przez wiele grup.
  • Remediacja producenta: w R1 2020 (2020.1.114) dodano bezpieczne domyślne ustawienia, starsze łatki nie wystarczają — zalecana aktualizacja do ≥ 2020.1.114.

Artefakty i logi

ŹródłoCo szukaćPrzykłady pól / EIDUwaga
IIS W3CŻądania do Telerik.Web.UI.WebResource.axd?type=rau, nietypowe POST z dużym cs-bytes, 4xx/5xx przy próbachcs-uri-stem, cs-uri-query, cs-method, sc-status, time-taken, c-ipACSC wskazuje, że ruch do ...WebResource.axd?type=rau jest wart analizy.
Windows SecurityProcesy potomne w3wp.execmd.exe/powershell.exeEID 4688 (Process Creation)Koreluj z kontem serwisowym aplikacji.
SysmonUtworzenie podejrzanych plików w webroot (np. *.aspx, *.ashx), potomne procesy w3wp.exeEID 1 (ProcessCreate), EID 11 (FileCreate)Szukaj plików w C:\inetpub\wwwroot\ lub App_Data\RadUploadTemp\.
WAF/ALB (AWS)HTTP do ...WebResource.axd z type=rauWAF logs (httpRequest.uri,httpRequest.args)CloudTrail nie loguje treści HTTP — analizuj WAF/ALB.
Azure WAF / AppGWJak wyżejrequestUri_s, requestQuery_s, httpMethod_sWłącz diagnostykę do Log Analytics.
EDR (MDE/Elastic/…)w3wp.exe spawnuje interpreterynazwy procesów, dow. rodz.Wysoka wartość korelacyjna.
K8s audit / M365 UAL / ESXi[nie dotyczy]Aplikacyjna luka .NET na IIS.

Detekcja (praktyczne reguły)

Sigma (IIS – próby RAU)

title: Telerik RAU Endpoint POST Indicative of CVE-2019-18935
id: 7f2a3e27-2e2c-4b8a-9c9f-rau-iis
status: experimental
description: Wykrywa POST na Telerik.Web.UI.WebResource.axd?type=rau (RadAsyncUpload)
references:
  - https://www.cyber.gov.au/.../advisory-2020-004-remote-code-execution...  # ACSC
logsource:
  category: webserver
  product: iis
detection:
  sel_uri:
    cs-uri-stem|contains: 'Telerik.Web.UI.WebResource.axd'
  sel_query:
    cs-uri-query|contains: 'type=rau'
  sel_method:
    cs-method: 'POST'
  condition: sel_uri and sel_query and sel_method
fields:
  - c-ip
  - cs-method
  - cs-uri-stem
  - cs-uri-query
  - sc-status
  - time-taken
falsepositives:
  - Legalny RadAsyncUpload w aplikacjach używających Telerik (zwłaszcza stare wersje)
level: high

Sigma (Windows – potomne procesy w3wp.exe)

title: Suspicious Interpreter Spawned by w3wp.exe
id: e6b6b494-8c6e-4c22-9e63-w3wp-spawn
status: stable
logsource:
  product: windows
  category: process_creation
detection:
  parent:
    ParentImage|endswith: '\w3wp.exe'
  child:
    Image|endswith:
      - '\cmd.exe'
      - '\powershell.exe'
      - '\mshta.exe'
      - '\rundll32.exe'
      - '\cscript.exe'
      - '\wscript.exe'
  condition: parent and child
fields:
  - UtcTime
  - User
  - CommandLine
  - ParentCommandLine
  - Image
  - ParentImage
level: high

Splunk (SPL)

IIS / WAF – próby RAU:

(index=web OR sourcetype=iis* OR sourcetype="aws:waf" OR sourcetype="azure:appgw")
| eval method=coalesce(cs_method, httpMethod_s, httpRequest.httpMethod, method)
| eval uri_stem=coalesce(cs_uri_stem, uri, requestUri_s, httpRequest.uri)
| eval uri_query=coalesce(cs_uri_query, query, requestQuery_s, httpRequest.args)
| search uri_stem="*Telerik.Web.UI.WebResource.axd*" (uri_query="*type=rau*" OR uri_stem="*DialogHandler.aspx*") method=POST
| stats count min(_time) as first max(_time) as last by method uri_stem uri_query src c_ip httpRequest.clientIp sc_status

Windows Security (4688) – potomne interpretery:

source="WinEventLog:Security" EventCode=4688
ParentProcessName="*\\w3wp.exe"
(NewProcessName="*\\cmd.exe" OR NewProcessName="*\\powershell.exe" OR NewProcessName="*\\mshta.exe" OR NewProcessName="*\\rundll32.exe" OR NewProcessName="*\\cscript.exe" OR NewProcessName="*\\wscript.exe")
| stats count by ComputerName, SubjectUserName, ParentProcessName, NewProcessName, CommandLine, ParentCommandLine

KQL (Defender for Endpoint / Azure)

MDE – procesy potomne:

DeviceProcessEvents
| where InitiatingProcessFileName =~ "w3wp.exe"
| where FileName in~ ("cmd.exe","powershell.exe","mshta.exe","rundll32.exe","cscript.exe","wscript.exe")
| project Timestamp, DeviceName, InitiatingProcessAccountName, FileName, ProcessCommandLine, InitiatingProcessCommandLine

Azure WAF / AppGW (Log Analytics):

AzureDiagnostics
| where ResourceType == "APPLICATIONGATEWAYS"
| where requestUri_s has "Telerik.Web.UI.WebResource.axd"
| where requestQuery_s has "type=rau" and httpMethod_s == "POST"
| project TimeGenerated, clientIp_s, httpMethod_s, requestUri_s, requestQuery_s, ruleSetType_s, action_s

CloudTrail / CloudWatch (AWS)

Uwaga: CloudTrail nie rejestruje treści HTTP aplikacji. Do detekcji użyj AWS WAF logs (CloudWatch Logs) lub ALB access logs.
CloudWatch Logs Insights (WAF):

fields @timestamp, httpRequest.clientIp, httpRequest.uri, httpRequest.args, httpRequest.httpMethod, action
| filter httpRequest.uri like /Telerik\.Web\.UI\.WebResource\.axd/ 
  and httpRequest.args like /type=rau/ 
  and httpRequest.httpMethod = "POST"
| sort @timestamp desc
| limit 200

Elastic (KQL/EQL)

HTTP (Elastic APM / ingest):

url.path:"/Telerik.Web.UI.WebResource.axd" and url.query:*type\=rau* and http.request.method:POST

EQL – potomne procesy:

process where process.parent.name == "w3wp.exe" and
        process.name in ("cmd.exe","powershell.exe","mshta.exe","rundll32.exe","cscript.exe","wscript.exe")

Heurystyki / korelacje

  • Korelacja 1: IIS RAU POST(±5 min)w3wp.exe -> cmd.exe/powershell.exe(±5 min) ➜ nowe pliki .aspx/.ashx w webroot.
  • Korelacja 2: Ten sam IP źródłowy generuje wiele 4xx/5xx na RAU i inne ścieżki eksploracyjne.
  • Korelacja 3: Nowe połączenia wychodzące z serwera WWW (który normalnie nie inicjuje ruchu) po RAU‑POST.
  • Korelacja 4: RAU‑POST + znany User‑Agent skanera + rzadkie geolokalizacje.
  • Korelacja 5: W środowiskach z WAF – zdarzenia “allowed but matched rule” dla WebResource.axd + POST.

ACSC i CISA opisują użycie CVE‑2019‑18935 w kampaniach, gdzie po eksploatacji dochodziło do dalszych etapów (webshelle, narzędzia).


False positives / tuning

  • FP: legalne użycie RadAsyncUpload w Twojej aplikacji (stary Telerik), testy QA.
  • Tuning:
    • Ogranicz do method=POST + type=rau.
    • Biała lista znanych klientów (adresy IP, CIDR) lub kont użytkowników aplikacji.
    • Podnieś priorytet, gdy sc-status ∈ {500, 400, 404} lub time‑taken & cs-bytes nienaturalnie duże.
    • W procesach – alertuj tylko, gdy rodzicem jest w3wp.exe i dzieckiem interpreter/skryptor.

Playbook reagowania (IR)

  1. Triage i izolacja: odizoluj host IIS z ruchu wychodzącego (segmentacja/egress filter).
  2. Zabezpieczenie dowodów:
    • zrzut pamięci w3wp.exe i kopia logów IIS/WAF/EDR,
    • kopia webroot (hashy) i web.config.
  3. Szybka analiza:
    • wyszukaj artefakty wg sekcji 6 (procesy potomne, nowe pliki w webroot),
    • przejrzyj żądania ...WebResource.axd?type=rau (czas, źródła).
  4. Eradykacja: usuń webshelle, backdoory, zaplanuj aktualizację Telerik ≥ 2020.1.114, rotację MachineKey, wymuś redeploy.
  5. Hunting w domenie: sprawdź lateral movement od konta serwisowego aplikacji.
  6. Hardening:
    • WAF reguły na RAU, blokada publicznego dostępu do uploadów,
    • minimalne uprawnienia konta aplikacyjnego, App_Data bez exec,
    • monitoring w3wp.exe ➜ interpretery.
  7. Zgłoszenie i lessons learned: KEV/CSIRT, aktualizacja runbooków.

Przydatne polecenia (PowerShell, bezpieczne):

# Nowe pliki skryptowe w webroot z ostatnich 7 dni
Get-ChildItem -Recurse "C:\inetpub\wwwroot" -Include *.aspx,*.ashx,*.asmx -ErrorAction SilentlyContinue |
  Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-7) } | Select FullName,Length,LastWriteTime

# Procesy potomne w3wp.exe (MDE lub lokalnie)
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4688} -MaxEvents 5000 |
  Where-Object { $_.Properties[1].Value -like '*\w3wp.exe' } |
  Select TimeCreated, @{n='NewProcess';e={$_.Properties[5].Value}}, @{n='Cmd';e={$_.Properties[8].Value}}

Przykłady z kampanii / case studies

  • CISA AA23‑074A: aktorzy APT eksploatowali CVE‑2019‑18935 w środowisku rządowym USA (IIS), często łącząc z CVE‑2017‑11317/11357.
  • Blue Mockingbird (Red Canary): w logach IIS widoczny RAU; po eksploatacji uruchamiano cmd.exe/powershell.exe, kończąc na kopaniu kryptowalut.
  • Raporty 2025 (eSentire): luka nadal popularnym wektorem wejścia do dostarczenia reverse shelli i eskalacji uprawnień.
  • ACSC (2020): wskazówki detekcyjne i dowody aktywnej eksploatacji — analiza ruchu do ...WebResource.axd?type=rau.

Lab (bezpieczne testy)

Tylko w odizolowanym środowisku testowym i na załatanych instancjach:

  1. Symulacja hałasu detekcyjnego (IIS/WAF): curl -X POST "https://twoj-serwer.test/Telerik.Web.UI.WebResource.axd?type=rau" \ -H "Content-Type: application/x-www-form-urlencoded" \ --data "probe=1" Sprawdź, czy pipeline logów/warnów (IIS/WAF/SIEM) wyłapuje zdarzenie (bez żadnej próby eksploatacji).
  2. Symulacja anomalii procesów:
    Uruchom prosty skrypt deployu aplikacji, który nie powinien generować w3wp.exe -> cmd.exe. Zweryfikuj, że reguła z 7.2 nie alarmuje (kalibracja FP).
  3. Testy WAF: utwórz regułę blokującą WebResource.axd + type=rau, potwierdź zadziałanie w logach.

Mapowania (Mitigations, Powiązane techniki)

Technika główna: T1190 Exploit Public‑Facing Application (Initial Access).

Powiązane techniki po eksploatacji:

  • T1505.003 – Web Shell (utrwalenie/remote admin przez .aspx).
  • T1059.001 – PowerShell.
  • T1059.003 – Windows Command Shell.
  • T1105 – Ingress Tool Transfer.

Mitigations (ATT&CK):

  • M1051 – Update Software (patchowanie komponentu do ≥ 2020.1.114).
  • M1050 – Exploit Protection (OS mitigation, hardening, DEP/CFG, itd.).
  • M1037 – Filter Network Traffic (WAF; filtrowanie warstwy 7).
  • M1047 – Audit (systematyczny przegląd konfiguracji i logów).

Źródła / dalsza literatura

  • NVD CVE‑2019‑18935 – opis, wersje, noty o ustawieniach w 2019.3.1023/2020.1.114. (NVD)
  • Telerik KBAllows JavaScriptSerializer Deserialization; Unrestricted File Upload (RAU); rekomendacja upgrade do R1 2020. (Telerik.com)
  • CISA AA23‑074A – kampanie wykorzystujące CVE‑2019‑18935 (IIS w agencji FCEB). (CISA)
  • ACSC 2020‑004 – wskazówki detekcyjne dla ...WebResource.axd?type=rau. (Cyber.gov.au)
  • Red Canary (Blue Mockingbird) – wskazówki huntingowe (IIS + potomne procesy). (Red Canary)
  • Bishop Fox – przegląd techniczny deserializacji w Telerik UI. (Bishop Fox)
  • CISA Top Routinely Exploited Vulns / KEV – kontekst operacyjny i priorytetyzacja. (CISA)
  • MITRE ATT&CK v18 – wersjonowanie i matryca Enterprise. (MITRE ATT&CK)

Checklisty dla SOC / CISO

SOC:

  • Reguły na WebResource.axd?type=rau + POST w IIS/WAF/ALB.
  • Korelacja: w3wp.exe → interpretery (cmd/PowerShell/mshta/rundll32).
  • Monitoring nowych plików w webroot (rozszerzenia .aspx/.ashx).
  • Blokady WAF + alerty “match but allow” dla RAU.
  • Threat hunting na źródła z KEV i znane UA skanerów.

CISO / właściciel usługi:

  • Upgrade Telerik ≥ 2020.1.114, weryfikacja zależności pośrednich.
  • Rotacja MachineKey i tajemnic aplikacji po incydencie.
  • WAF w trybie blokującym dla uploadów; brak exec w katalogach upload.
  • Minimalne uprawnienia konta aplikacji IIS.
  • Testy regresyjne i skany zewnętrzne po patchu.

CVE-2019-2725 — Oracle WebLogic Server deserialization RCE

TL;DR

Krytyczna luka RCE w Oracle WebLogic (CVE‑2019‑2725) umożliwia zdalne, nieautoryzowane wykonanie kodu przez podatne endpointy SOAP/WS‑AT (/_async/AsyncResponseService, /wls-wsat/CoordinatorPortType). Atak bazuje na niebezpiecznej deserializacji (java.beans.XMLDecoder). Najczęstsze skutki: instalacja webshelli (JSP), kryptokoparki (XMRig) lub ransomware (REvil/Sodinokibi). Główne detekcje: nietypowe żądania POST do ww. ścieżek + procesy powłokowe z rodzicem java/java.exe na serwerze aplikacyjnym. Natychmiastowe działania: izolacja hosta, wyszukanie webshelli w katalogach WebLogic, aktualizacja do wersji naprawczej i segmentacja sieci.


Krótka definicja techniczna

CVE‑2019‑2725 to błąd deserializacji w komponencie Web Services Oracle WebLogic Server, który pozwala zdalnemu napastnikowi (bez uwierzytelnienia) wysłać spreparowany SOAP/XML i uruchomić dowolny kod po stronie serwera. Podatne są instalacje z włączonymi archiwami wls9_async_response.war i/lub wls-wsat.war, a typowe wektory to żądania POST do endpointów asynchronicznych i WS‑AtomicTransaction.


Gdzie występuje / przykłady platform

  • Windows / Linux (on‑prem): klasyczne wdrożenia WebLogic (AdminServer/ManagedServer).
  • AD: integracje SSO/LDAP po kompromitacji mogą posłużyć do lateral movement.
  • AWS: EC2/Autoscaling; często za ALB/WAF (logi CloudWatch/ALB).
  • Azure / GCP: VM Scale Sets/Compute Engine; analogicznie za load balancerami.
  • Kubernetes: WebLogic Operator (konteneryzacja); ruch przychodzi przez Ingress/Service.
  • ESXi: WebLogic jako VM-y; artefakty systemowe na datastore.
  • M365: brak bezpośredniego wpływu — istotne tylko pod kątem tożsamości/poczty w dalszych fazach.

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

  • Mechanizm ataku: napastnik wysyła żądanie SOAP/XML zawierające obiekt do przetworzenia przez XMLDecoder, co prowadzi do wykonania łańcucha gadżetów Javy i uruchomienia poleceń systemowych w kontekście procesu JVM WebLogic. Najczęściej wykorzystywane endpointy: /_async/AsyncResponseService (wls9‑async) oraz /wls-wsat/* (WS‑AT).
  • Skutki: pełne przejęcie serwera (pre‑auth RCE). Następnie typowe TTP: pobranie ładunku (T1105), uruchomienie interpreterów (T1059), zainstalowanie webshella JSP dla stałego dostępu (T1505.003).
  • Dlaczego skuteczna: brak uwierzytelniania, łatwość masowego skanowania/wykorzystania, popularność WebLogic w środowiskach krytycznych. Ataki obserwowano m.in. w kampanii ransomware REvil/Sodinokibi oraz w botnecie Muhstik kopiącym Monero.
  • Status i poprawki: Oracle wydał poza-cykliczny alert 26.04.2019 z poprawkami; luka figuruje w katalogu CISA KEV.

Artefakty i logi

ŹródłoArtefakt/LogEID / PoleCo obserwowaćUwagi
Web/proxy/WAFAccess logs (Nginx/IIS/WebLogic HTTP Server)cs-uri-stem, cs-method, status, request_bodyPOST na /_async/AsyncResponseService, `/wls-wsat/(CoordinatorPortTypeRegistrationService
Windows SecurityProcess Creation4688Rodzic java.exe uruchamia cmd.exe/powershell.exeKorelować z logami aplikacji.
SysmonProcess Create, Network, File Create1, 3, 11, (13)ParentImage=*\java.exe i dziecko cmd.exe/powershell.exe/wget/curl ; nowe JSP w katalogach aplikacji
Linux (auditd)SYSCALL=execveexe = /usr/bin/bash, /bin/sh z PPID java
WebLogicSerwerowe logi (access.log, AdminServer.log)SOAP Faults/500 na ww. endpointach, wyjątki deserializacji
AWS (ALB/WAF)CloudWatch/ALB access logsrequest_uriTe same ścieżki i metoda POST, wysoka liczba 400/500CloudTrail nie rejestruje ruchu HTTP do aplikacji — używaj ALB/WAF/Flow Logs.
K8s auditAPI Server audit logverb=create, resource=podsGdy WebLogic w K8s: nieoczekiwane pody/zmiany ConfigMap po RCE[Zależne od architektury]
M365[brak danych / nie dotyczy bezpośrednio]

Detekcja (praktyczne reguły)

Sigma — sonda na żądania do podatnych endpointów

title: Oracle WebLogic CVE-2019-2725 Probe
id: 9c5c0f93-1b76-4a8f-9b7c-fb4a2db1c2725
status: experimental
description: Detects HTTP POST to WebLogic async/WS-AT endpoints and XMLDecoder markers
logsource:
  category: webserver
  product: apache
detection:
  sel_uri:
    cs-method: POST
    cs-uri-stem|contains:
      - "/_async/AsyncResponseService"
      - "/wls-wsat/CoordinatorPortType"
      - "/wls-wsat/RegistrationService"
      - "/wls-wsat/ParticipantPortType"
  sel_body:
    request_body|contains:
      - "java.beans.XMLDecoder"
      - "<object class="
  condition: sel_uri or (sel_uri and sel_body)
fields:
  - src_ip
  - cs-host
  - cs-uri-stem
  - user_agent
falsepositives:
  - Legitymne WS-AT (rzadkie)
level: high
tags:
  - attack.T1190

(Ścieżki i kontekst ataku potwierdzone w opisach Tenable/Oracle).

Sigma — potomne powłoki z procesu Java

title: Java Spawns Shell (WebLogic RCE aftermath)
id: 0a0a7f5a-0e7a-4d1a-bb1e-2cfa7c2725ab
status: stable
logsource:
  product: windows
  category: process_creation
detection:
  parent:
    ParentImage|endswith: '\java.exe'
  child:
    Image|endswith:
      - '\cmd.exe'
      - '\powershell.exe'
  condition: parent and child
fields:
  - CommandLine
  - ParentCommandLine
falsepositives:
  - Rzadkie skrypty administracyjne
level: high
tags:
  - attack.T1059
  - attack.T1190

Splunk (SPL)

Web/proxy:

index=web (sourcetype=access_combined OR sourcetype=iis)
method=POST uri_path IN ("/_async/AsyncResponseService",
"/wls-wsat/CoordinatorPortType","/wls-wsat/RegistrationService","/wls-wsat/ParticipantPortType")
| stats count by src, uri_path, status, useragent

Procesy Windows/Sysmon:

(index=wineventlog EventCode=4688 OR (index=sysmon EventCode=1))
ParentImage="*\\java.exe"
(Image="*\\cmd.exe" OR Image="*\\powershell.exe" OR Image="*\\bash.exe")
| table _time host ParentImage Image CommandLine ParentCommandLine

KQL (Microsoft Defender XDR)

// Potomna powłoka po WebLogic (Windows)
DeviceProcessEvents
| where Timestamp > ago(7d)
| where InitiatingProcessFileName =~ "java.exe"
| where FileName in~ ("cmd.exe","powershell.exe")
| project Timestamp, DeviceName, FileName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine

CloudWatch Logs Insights (ALB/WAF)

-- ALB access logs: podejrzane ścieżki WebLogic
fields @timestamp, elb, client_ip, request_uri, target_status_code, user_agent
| filter request_uri like /_async\\/AsyncResponseService|wls-wsat\\/(CoordinatorPortType|RegistrationService|ParticipantPortType)/
| sort @timestamp desc

Elastic / EQL

// Java -> shell
process where event.type == "start"
  and process.parent.name : "java*"
  and process.name in ("cmd.exe","powershell.exe","bash","sh","wget","curl")

Heurystyki / korelacje

  • Korelacja warstwowa: (1) POST do /_async/... lub /wls-wsat/... i (2) w ≤2 min pojawia się javacmd/powershell/bash i/lub (3) nowy plik .jsp w webroot.
  • Artefakty utrwalenia: webshell w katalogach tymczasowych/aplikacyjnych WebLogic (często podkatalogi _WL_internal lub bea_wls_internal).
  • Anomalie sieciowe: niespodziewane wyjścia z serwera aplikacyjnego do Internetu (pobranie ładunku/XMRig).
  • Ransomware chain: wektor T1190 → T1059 → T1105/T1505.003 → szyfrowanie (T1486), widoczne w kampaniach REvil.

False positives / tuning

  • Legalne implementacje WS‑AT/async SOAP (rzadkie) — filtruj po metodzie POST, wzorcach URI i treści body (XMLDecoder).
  • Skrypty administracyjne uruchamiające powłokę z Javy — whitelisting po ścieżkach i podpisach JAR/serwisu.
  • Testy skanerów VA — rozpoznawalne po user‑agentach i niskiej częstotliwości.

Playbook reagowania (IR)

  1. Identyfikacja: potwierdź trafienia z §7; wylistuj ostatnie POST na podatne ścieżki i błędy 500/SOAP Fault.
  2. Izolacja: odłącz host (lub usługę) od sieci produkcyjnej/Internetu.
  3. Triada forensyczna:
    • Zrzut procesów JVM, timeline plików aplikacji (szukaj nowych *.jsp), rejestry/konfiguracje usług.
    • Artefakty Sysmon (1/3/11) i 4688.
  4. Szukaj webshelli/JSP: w katalogach aplikacji i tymczasowych WebLogic (_WL_internal, bea_wls_internal).
  5. Zabij i usuń: wstrzymaj procesy podrzędne (cmd/powershell/bash), usuń webshell, wyczyść harmonogramy/usługi utworzone przez napastnika.
  6. Patch & harden: zastosuj poprawki Oracle i konfiguracje „secured production mode”, upewnij się że serwer nie jest bezpośrednio wystawiony do Internetu; wymuś WAF/IPS.
  7. Hunting wsteczny (30–90 dni): IOC‑driven search po ścieżkach/UA/źródłach IP; sprawdź transfery do domen hostingowych koparek/ransomware.
  8. Lessons learned: segmentacja i zasada „deny by default” dla ruchu do AdminServer.

Przykłady z kampanii / case studies

  • REvil/Sodinokibi (kwiecień–maj 2019): wykorzystanie nowo ujawnionej luki WebLogic jako wektora początkowego; Oracle opublikował patch 26.04.2019.
  • Muhstik botnet (kwiecień 2019): w ciągu dni od ujawnienia — masowe infekcje kryptokoparką i DDoS przez CVE‑2019‑2725.
  • Kryptokoparki (czerwiec 2019): Trend Micro: łańcuch z wykorzystaniem certyfikatów X.509 do zaciemniania, finalnie XMRig.
  • KEV/CISA: CVE pozostaje w katalogu znanych, wykorzystywanych podatności (KEV) — traktuj priorytetowo.

Lab (bezpieczne testy)

Uwaga: poniższe testy nie zawierają payloadów eksploatujących i służą wyłącznie do weryfikacji detekcji.

  1. Generowanie ruchu HTTP do podatnych ścieżek (bez RCE):
# symulacja sondowania endpointów (status 404/405/SOAP Fault)
curl -s -o /dev/null -w "%{http_code}\n" -X POST http://<weblogic>/wls-wsat/CoordinatorPortType
curl -s -o /dev/null -w "%{http_code}\n" -X POST http://<weblogic>/_async/AsyncResponseService
  1. Symulacja „Java → powłoka” (dla EDR/Sysmon):
# Linux: uruchom prosty program Java, który odpala /bin/sh -c 'echo test' (benign)
# Windows: analogicznie uruchom "java" jako rodzic prostego procesu cmd /c echo
# (wygeneruje zdarzenia: Sysmon 1, Windows 4688)
  1. ALB/WAF logi (CloudWatch): odpal curl jak wyżej przez publiczny endpoint testowy; uruchom zapytanie §7.5 i sprawdź, czy wykrywa ścieżki.

Mapowania (Mitigations, Powiązane techniki)

Mitigations (ATT&CK)

  • M1051 — Update Software: wdrażaj poprawki Oracle CPU i utrzymuj łańcuch zależności Javy/serwera aktualny.
  • M1031 — Network Intrusion Prevention: WAF/IPS z sygnaturami na CVE‑2019‑2725.
  • M1030 — Network Segmentation: izolacja serwerów aplikacyjnych i kanałów administracyjnych.

Powiązane techniki ATT&CK

T1190 — Exploit Public‑Facing Application

Wektor początkowy (Initial Access) — żądania POST do endpointów SOAP/WS‑AT WebLogic.

T1059.003 — Windows Command Shell

Uruchomienie cmd.exe przez java.exe po udanym RCE.

T1059.004 — Unix Shell

/bin/sh/bash inicjowane przez JVM na Linux/Unix.

T1505.003 — Web Shell

Umieszczenie JSP w webroot dla utrwalenia.

T1105 — Ingress Tool Transfer

Pobranie XMRig/ransomware po RCE. (odniesienia ogólne do techniki)


Źródła / dalsza literatura

  • Oracle Security Alert — CVE‑2019‑2725 (opis, ryzyko, wersje) (Oracle)
  • NVD — CVE‑2019‑2725 (CVSS, wersje dotknięte) (NVD)
  • Tenable (opisy endpointów i deserializacji) (Tenable®)
  • Cisco Talos — Sodinokibi via WebLogic (timeline) (Cisco Talos Blog)
  • Unit 42 — Muhstik wykorzystuje CVE‑2019‑2725 (kryptokoparka/DDoS) (Unit 42)
  • Trend Micro — cryptomining po CVE‑2019‑2725 (www.trendmicro.com)
  • CISA — KEV Catalog (występowanie CVE) (CISA)
  • MITRE ATT&CK — T1190/T1059/T1505.003 (definicje, wersja v18) (MITRE ATT&CK)
  • Oracle — zabezpieczanie środowiska (secured production mode) (Oracle Documentation)
  • ZDI — analiza webshelli i ścieżek _WL_internal/bea_wls_internal (kontekst utrwalenia) (Zero Day Initiative)

Checklisty dla SOC / CISO

SOC (operacyjne)

  • Alerting na POST do /_async/* i /wls-wsat/* + korelacja z java → shell.
  • WAF/IPS sygnatury aktywne dla CVE‑2019‑2725.
  • Hunting webshelli JSP w katalogach aplikacji/tymczasowych.
  • Blokada egress z serwerów aplikacyjnych do Internetu (allow‑list).
  • Telemetria Sysmon (1/3/11/13) i pełny 4688 na hostach WebLogic.

CISO (strategiczne)

  • Priorytety patchowania (M1051) — potwierdzony KEV.
  • Segmentacja (M1030) i oddzielne strefy dla AdminServer.
  • Wymóg WAF/IPS dla wszystkich usług publicznych (M1031).
  • Zakaz bezpośredniego wystawiania WebLogic do Internetu (proxy/WAF).
  • Regularne testy IR pod kątem webshelli i koparek.

CVE-2025-0111 — PAN‑OS: Authenticated File Read w interfejsie zarządzania (web)

TL;DR

Luka CVE‑2025‑0111 pozwala uwierzytelnionemu napastnikowi z dostępem sieciowym do interfejsu zarządzania PAN‑OS odczytywać pliki systemowe czytelne przez użytkownika nobody. Ryzyko rośnie przy wystawieniu interfejsu na Internet (np. port 4443 na interfejsie dataplane z profilem management). Producent udostępnił wydania naprawcze oraz sygnatury Threat ID 510000/510001 (pakiet Apps&Threats ≥ 8943). W praktyce: załataj, ogranicz źródła IP do zaufanych, sprawdź, czy nie doszło do łańcuchowej eksploatacji z CVE‑2025‑0108/CVE‑2024‑9474, i zrotuj sekrety, jeśli masz podejrzenie naruszenia.


Krótka definicja techniczna

Authenticated File Read w portalu zarządzania PAN‑OS: błąd kontroli ścieżki (CWE‑73), który umożliwia po zalogowaniu oraz z dostępem sieciowym do UI odczyt plików z systemu plików urządzenia, o ile są one czytelne przez konto systemowe nobody. To naruszenie poufności bez bezpośredniego wpływu na integralność/ dostępność.


Gdzie występuje / przykłady platform

  • Fizyczne NGFW (PA‑Series) oraz VM‑Series (on‑prem/ESXi, AWS/Azure/GCP) — jeśli interfejs zarządzania dostępny z niezaufanej sieci.
  • CN‑Series (Kubernetes) — gdy profil management nadany interfejsowi dataplane/Service LB i port mgmt (typ. 4443) dostępny publicznie.
  • Nie dotyczy: Cloud NGFW i Prisma Access.

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

Wadliwa walidacja/normalizacja ścieżek w webowym interfejsie zarządzania PAN‑OS pozwala po pomyślnym uwierzytelnieniu wykonywać zapytania skutkujące odczytem plików (zakres: pliki czytelne przez nobody). Skuteczność ataku rośnie, gdy:

  1. Interfejs mgmt jest osiągalny z Internetu (bez filtrów źródeł); 2) napastnik dysponuje ważnymi poświadczeniami (np. uzyskanymi inną techniką); 3) podatność jest łączona w łańcuch z innymi błędami (np. CVE‑2025‑0108 i CVE‑2024‑9474), co obserwowano w praktyce. Ujawnione pliki mogą zawierać metadane/konfiguracje ułatwiające eskalację i dalsze działania (rekonesans, wyciek).

Status i ocena producenta: CVSS‑BT 7.1 (HIGH), Exploitation: ATTACKED. Producent wydał poprawki dla gałęzi 10.1, 10.2, 11.1, 11.2 oraz wskazał, że starsze EoL (9.x/10.0/11.0) uznaje się za podatne i nie będą łatane.


Artefakty i logi

Źródło/warstwaTyp/plik/logWskaźniki/kluczeUwagi
PAN‑OS Threat logSygnatury Threat ID 510000/510001threatid, action, src, dst, app, ruleWydane w Apps&Threats ≥ 8943 — blokada/alert prób eksploatacji.
PAN‑OS System logZdarzenia logowania/administracjianomalne logowania do UI, zmiany w profilu mgmtDo korelacji z dostępem z zewnętrznych ASN.
PAN‑OS web‑server access (mp‑log)Dostępy do /php/* / UINietypowe źródła, wzorce żądańW praktyce forwardowane przez syslog lub inspekcja na urządzeniu.
PAN‑OS Traffic logRuch do portów 443/4443 na IP zarządzaniadst_port in (443,4443), action=allow, źródła spoza RFC1918Służy do wykrywania ekspozycji/nieautoryzowanych źródeł.
AWS CloudTrailAuthorizeSecurityGroupIngress, CreateLoadBalancerListenersOtworzenie 443/4443 na 0.0.0.0/0Wczesny sygnał błędnej ekspozycji UI w chmurze.
K8s auditcreate/patch Service/IngressService typu LoadBalancer/NodePort eksponujący 4443Dot. CN‑Series/środowisk PoC.
M365/Entra[brak danych]Nie dotyczy tej luki.
Windows (EID)[brak danych]Nie dotyczy — luka po stronie urządzenia PAN‑OS.

Detekcja (praktyczne reguły)

Sigma — wykrycie sygnatur producenta (Threat log)

title: PAN-OS CVE-2025-0111 — Threat ID detection
id: 0d6b9c2a-5d0e-4e77-98a7-24d0a1c9a111
status: experimental
logsource:
  product: pan-os
  service: threat
detection:
  sel_ids:
    threatid|endswith:
      - '510000'
      - '510001'
  sel_text:
    threatname|contains: 'CVE-2025-0111'
  condition: sel_ids or sel_text
fields:
  - src
  - dst
  - app
  - rule
  - action
  - threatid
level: high
tags:
  - cve.CVE-2025-0111
  - attack.T1190

Sigma — dostęp do UI zarządzania z Internetu (Traffic log)

title: PAN-OS Management UI from External IPs (443/4443)
id: 3b1aaf9e-1f76-4e4d-9b86-b3c59a4d4443
status: experimental
logsource:
  product: pan-os
  service: traffic
detection:
  sel:
    action: 'allow'
    dst_port|in:
      - 443
      - 4443
  not_internal_src:
    src_ip|cidr:
      - '10.0.0.0/8'
      - '172.16.0.0/12'
      - '192.168.0.0/16'
  condition: sel and not not_internal_src
fields:
  - src_ip
  - dst_ip
  - rule
  - app
  - vsys
level: medium
tags:
  - hardening.exposure

Splunk (SPL)

Wykrycie Threat ID / prób eksploatacji:

(index=pan* sourcetype=pan:threat)
| eval threatid_str=tostring(threatid)
| where threatid_str IN ("510000","510001") OR like(threat_name, "%CVE-2025-0111%")
| stats count min(_time) as first_seen max(_time) as last_seen by src dst app rule action threatid threat_name vsys

Dostęp do UI mgmt z Internetu:

(index=pan* sourcetype=pan:traffic action=allowed)
  (dest_port IN (443,4443))
  NOT (cidrmatch("10.0.0.0/8", src_ip) OR cidrmatch("172.16.0.0/12", src_ip) OR cidrmatch("192.168.0.0/16", src_ip))
| lookup firewall_mgmt_ips ip as dest_ip OUTPUTNEW device role
| search role="mgmt"
| stats dc(src_ip) as uniq_sources values(src_ip) as sources count by dest_ip rule app vsys

KQL (Microsoft Sentinel / AMA + CEF)

// Threat IDs 510000/510001 (CEF -> DeviceEventClassID)
CommonSecurityLog
| where DeviceVendor =~ "Palo Alto Networks"
| where DeviceEventClassID in ("510000","510001") or AdditionalExtensions contains "CVE-2025-0111"
| summarize count(), min(TimeGenerated), max(TimeGenerated) by SourceIP, DestinationIP, DeviceEventClassID, Activity, DeviceAction
// Ruch do UI mgmt z Internetu (443/4443) -> wymaga listy IP mgmt w watchliście
let MgmtIPs = dynamic(["198.51.100.10","203.0.113.5"]); // przykład
CommonSecurityLog
| where DeviceVendor =~ "Palo Alto Networks" and Activity has_cs "TRAFFIC"
| where DestinationPort in ("443","4443") and DestinationIP in (MgmtIPs)
| where ipv4_is_private(SourceIP) == false
| summarize by TimeGenerated, SourceIP, DestinationIP, DestinationPort, DeviceAction

AWS CloudTrail Lake (SQL) — ekspozycja mgmt przez SG/ELB

-- Zmiany otwierające 443/4443 na 0.0.0.0/0
SELECT eventTime, eventSource, eventName,
       userIdentity.sessionContext.sessionIssuer.arn AS actor,
       requestParameters
FROM aws_cloudtrail_events
WHERE eventName IN ('AuthorizeSecurityGroupIngress','CreateSecurityGroup','CreateLoadBalancerListeners','ModifyLoadBalancerAttributes')
  AND (requestParameters LIKE '%0.0.0.0/0%')
  AND (requestParameters LIKE '%443%' OR requestParameters LIKE '%4443%')
ORDER BY eventTime DESC;

Elastic / EQL

any where event.dataset == "panw.threat" and
         (panw.threat.id in ("510000","510001") or message =~ "CVE-2025-0111")

Heurystyki / korelacje

  • Dostęp do UI z zewnętrznych ASNlogowanie adminaodczyt/zmiany konfiguracji (System log).
  • Wyzwolenie Threat ID 510000/510001ciągłe próby z jednego źródłabrak wcześniejszej aktywności tego IP.
  • Nagłe upublicznienie portu 4443/443 (CloudTrail/K8s audit) ⟺ nowe alerty Threatzmiany haseł/kluczy w krótkim oknie czasu.

False positives / tuning

  • Ruch z monitoringu/NAC/VPN podszywający się pod „zewnętrzny” (np. testy dostępności).
  • Maintenance (serwis dostawcy) — jednorazowy dostęp spoza korp.
  • Dla sygnatur — testowe skanery i pentesty w labie.
    Tuning: listy zaufanych źródeł, mapowanie IP mgmt w SIEM, korelacja z oknami serwisowymi.

Playbook reagowania (IR)

  1. Triage/izolacja ekspozycji
    • Zidentyfikuj, czy UI mgmt jest publicznie dostępny; jeśli tak, zablokuj/ogranicz źródła (ACL, SG, WAF) do zaufanych IP.
  2. Patching
    • Zaktualizuj do wersji naprawczej: 10.1.14‑h9+, 10.2.x‑h21/h24/h14/h12/h6/… (wg tabeli), 11.1.6‑h1+/11.1.4‑h13+/11.1.2‑h18+, 11.2.4‑h4+ lub 11.2.5+. Starsze EoL — migracja/wymiana.
  3. Zabezpieczenia prewencyjne
    • Włącz/zweryfikuj subskrypcję Threat Prevention i sygnatury Threat ID 510000/510001 (Apps&Threats ≥ 8943).
  4. Hunting
    • Przejrzyj logi Threat/System/Traffic pod kątem prób/udanych dostępów.
    • Oceń korelację z CVE‑2025‑0108/CVE‑2024‑9474 (możliwe łańcuchy).
  5. Remediacja sekrety (gdy podejrzenie nadużycia):
    • Zmień master key (AES‑256‑GCM), hasła/PSK/secrety, unieważnij i wydaj ponownie certyfikaty z kluczami prywatnymi na urządzeniu.
  6. Edukacja i kontrola zmian
    • Wymuś politykę „jump‑box only” do UI mgmt; przegląd SG/ACL/Ingress.

Przykłady z kampanii / case studies

  • Eksploatacja łańcuchowa: producent i niezależne raporty wskazały próby łączenia CVE‑2025‑0108 + CVE‑2024‑9474 + CVE‑2025‑0111 na niezałatanych i źle zabezpieczonych interfejsach mgmt.
  • Advisory/monitoring: Armis i HKCERT klasyfikują ryzyko jako wysokie; zalecają priorytetowy patching i ograniczenie ekspozycji.
  • Bazy podatności: NVD/CVE.org/Tenable/Rapid7 dokumentują charakter luki, wektor i brak wpływu na Cloud NGFW/Prisma Access.

Lab (bezpieczne testy) — przykładowe kroki/komendy

Tylko w odizolowanym labie. Nie wykonuj testów wobec cudzych systemów. Scenariusz ma zweryfikować detekcje i hardening, nie eksploatować luki.

  1. Weryfikacja wersji i contentu (CLI PAN‑OS):
    • show system info → sprawdź sw-version.
    • request content upgrade check / request content upgrade download latest / request content upgrade install version <>=8943 (upewnij się, że Threat ID 510000/510001 są obecne).
  2. Tymczasowe logowanie dostępu do UI
    • Skonfiguruj forwarding System/Threat/Traffic do SIEM.
    • Z dozwolonego hosta wewnętrznego wygeneruj benign ruch do UI: curl -k https://<fw-mgmt>:4443/ (sprawdź, czy powstają zapisy w Traffic/System).
  3. Testy detekcji w SIEM
    • Uruchom podane zapytania Splunk/KQL/Elastic; w razie braku rzeczywistych zdarzeń skorzystaj z generatorów logów testowych (np. sample CEF) z symbolicznym threatid=510000 (bez faktycznej próby eksploatacji).
  4. Hardening
    • Zaimplementuj listę zaufanych źródeł (ACL/SG) i regułę „jump‑box only”; potwierdź, że ruch spoza listy nie dociera do UI.

Mapowania (Mitigations, powiązane techniki)

Mitigations (ATT&CK)

  • M1051 — Update Software (aktualizacje PAN‑OS do wersji naprawczych).
  • M1037 — Filter Network Traffic (restrykcja źródeł do UI, tylko zaufane IP).
  • M1030 — Network Segmentation (dostęp przez jump‑host/VPN).
  • M1042 — Disable or Remove Feature or Program (wyłączenie profilu mgmt na interfejsach dataplane, jeśli zbędny).
  • M1027 — Password Policies / M1026 — Privileged Account Management (rotacja sekretów/mk, least privilege).

Techniki (ATT&CK)

T1190 — Exploit Public‑Facing Application

Dotyczy nadużycia błędu w aplikacji web wystawionej publicznie (UI mgmt). Tu: wymaga PR:L (zalogowanego aktora), ale wektor nadal AV:N i kanał webowy.

T1078 — Valid Accounts

Warunek konieczny: ważne konto z dostępem do UI mgmt (np. po phishingu/wycieku). Korelować logowania z nietypowych ASN.

T1005 — Data from Local System

Odczyt plików z systemu plików urządzenia w celu pozyskania informacji pomocnych do dalszych faz ataku.


Źródła / dalsza lektura

  • Palo Alto Networks — Advisory (CVE‑2025‑0111): opis, wersje naprawcze, Threat ID 510000/510001, zalecenia dot. master key/rotacji sekretów. (Palo Alto Networks Security)
  • NVD (nist.gov) — karta CVE. (NVD)
  • CVE.org — rekord producenta. (CVE)
  • Tenable / Rapid7 — podsumowania ryzyka i przypomnienie o ograniczeniu dostępu do UI. (Tenable®)
  • FortiGuard / H‑ISAC / HKCERT / Armis — doniesienia o łańcuchach eksploatacyjnych i „in‑the‑wild”. (FortiGuard)
  • MITRE ATT&CK — Version history (v18.1). (MITRE ATT&CK)

Checklisty dla SOC / CISO

SOC (operacyjne):

  • Czy posiadamy watchlistę IP mgmt i aktywne reguły dla portów 443/4443?
  • Czy SIEM odbiera Threat/System/Traffic z NGFW i wzbogaca o ASN/CIDR?
  • Czy alertujemy na Threat ID 510000/510001 (wysoki priorytet)?
  • Czy działają korelacje: zdalny dostęp do UIlogowanie adminazmiana config?
  • Czy przeprowadzono hunt pod kątem prób łańcuchowych (CVE‑2025‑0108/2024‑9474/2025‑0111)?

CISO / właściciel ryzyka:

  • Czy interfejs mgmt nie jest dostępny z Internetu (architektura „jump‑box only”)?
  • Czy wszystkie instancje mają wersje naprawcze (wg tabeli producenta)?
  • Czy mamy proces rotacji sekretów/master key/certyfikatów po incydencie?
  • Czy SLA na Apps&Threats content gwarantuje ≥ 8943 i autoupdate?
  • Czy polityki least privilege dotyczą również kont administracyjnych NGFW?

CVE-2025-0108 — PAN‑OS Authentication Bypass

TL;DR

  • Błąd w WebUI PAN‑OS pozwala bez uwierzytelnienia wywołać określone skrypty PHP, jeśli atakujący ma sieciowy dostęp do portu zarządzania (typowo 443/4443). Nie daje sam w sobie RCE, ale narusza poufność/integralność i bywa łańcuszkowany z innymi lukami (np. CVE‑2024‑9474, CVE‑2025‑0111) do pełnego przejęcia.
  • Największe ryzyko: publicznie dostępny interfejs zarządzania lub profil zarządzania na interfejsie dataplane. GlobalProtect portale/bramy nie są podatne (chyba że ma profil zarządzania).
  • Naprawa: aktualizacje do wersji hotfix wymienionych niżej + ograniczenie dostępu IP/segmentacja. Dodatkowo abonenci Threat Prevention mogą blokować próby sygnaturami Threat ID 510000/510001.
  • ATT&CK: T1190 (Exploitation of public‑facing admin UI). Priorytet: krytyczny, jeśli WebUI jest osiągalne z Internetu.

Krótka definicja techniczna

CVE‑2025‑0108 to obejście uwierzytelniania w WebUI PAN‑OS, umożliwiające niezalogowanemu napastnikowi z dostępem sieciowym do WebUI wywołanie wybranych skryptów PHP. Samo wywołanie nie daje RCE, ale może ujawniać/zmieniać informacje, a w praktycznych łańcuchach z CVE‑2024‑9474 (PE/CI) i CVE‑2025‑0111 (file read) prowadzi do eskalacji.


Gdzie występuje / platformy

  • Palo Alto Networks: PA‑Series, VM‑Series, CN‑Series, Panorama — wersje PAN‑OS wymienione jako podatne; Cloud NGFW i Prisma Accessniepodatne.
  • Środowiska uruchomieniowe: sprzęt on‑prem, ESXi/KVM/Hyper‑V (VM‑Series), chmury AWS/Azure/GCP (VM‑Series).
  • Usługi powiązane: GlobalProtect portale/gateways nie są podatne, ale profil zarządzania na takim interfejsie naraża urządzenie (często port 4443).

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

Atakujący wysyła specjalnie ułożone żądania HTTP/S do publicznie osiągalnego WebUI PAN‑OS. Błąd w ścieżce uwierzytelniania pozwala ominąć kontrolę logowania i wołać część skryptów PHP zaplecza WebUI. Choć producent podkreśla, że samo to nie daje RCE, realnie umożliwia pozyskanie wrażliwych informacji lub zmianę stanu (konf./sesje), co w połączeniu z innymi błędami (np. CVE‑2024‑9474, CVE‑2025‑0111) bywa wykorzystywane do pełnego przejęcia administracyjnego. Lukę uznano za atakowaną (observed exploit attempts) i wpisano do CISA KEV. Skuteczność wynika z: (1) powszechności błędnych ekspozycji WebUI, (2) niska złożoność i brak wymagań uprawnień/UI, (3) możliwość łańcuchowania.

Wersje/fixy (skrót):

  • 10.1: podatne < 10.1.14‑h9; naprawa ≥ 10.1.14‑h9
  • 10.2: podatne niższe niż 10.2.7‑h24 / 10.2.8‑h21 / 10.2.9‑h21 / 10.2.10‑h14 / 10.2.11‑h12 / 10.2.12‑h6 / 10.2.13‑h3; naprawy ≥ tych wersji
  • 11.1: podatne < 11.1.2‑h18 / < 11.1.4‑h13 / < 11.1.6‑h1; naprawy ≥ tych wersji
  • 11.2: podatne < 11.2.4‑h4 / < 11.2.5; naprawy ≥ 11.2.4‑h4 / 11.2.5
  • EoL (11.0/10.0/9.x): domyślnie uważane za podatne, bez planu poprawek.

Artefakty i logi

ŹródłoTyp/ZdarzenieNajważniejsze polaWskazówki / przykład
PAN‑OS Threat logsBlokady sygnatur Threat ID 510000/510001threat_id/threatid, threat_name, action, src, dst, urlDetekcja prób CVE‑2025‑0108 (wymaga subskrypcji Threat Prevention).
PAN‑OS Traffic logsPołączenia do WebUI (443/4443)dst_port, app (ssl/web-browsing), rule, src, dstRuch z niezaufanych ASN/IP do IP zarządzania; brak reguły NAT/SNAT dla mgmt.
PAN‑OS System/Config logsNieoczekiwane zmiany/akcje w WebUItype=SYSTEM/CONFIG, admin, client, cmd, resultZmiany konfiguracyjne z nietypowych adresów źródłowych po ruchu na 4443.
Cortex Data Lake / CEFZnormalizowane pola CEF (CommonSecurityLog)DeviceVendor="Palo Alto Networks", DeviceProduct="PAN-OS", DeviceEventClassIDW Sentinel KQL filtrujemy DeviceProduct has 'PAN-OS'.
CloudTrail (meta‑kontrola)Zmiany SG/VPC odsłaniające 443/4443AuthorizeSecurityGroupIngress, RevokeSecurityGroupIngressWykrywanie ekspozycji WebUI dla VM‑Series w AWS.
K8s audit / M365 / Windows EIDNie dotyczy tej luki (brak lokalnych EID/M365/K8s).

Detekcja (praktyczne reguły)

Sigma — próby CVE‑2025‑0108 (Threat Prevention lub ślady WebUI)

title: PAN-OS WebUI Auth Bypass Attempt (CVE-2025-0108)
id: 0a0d2c8b-3c7a-4d0e-9a7e-0d9b5b7f0108
status: experimental
description: Wykrywa próby obejścia uwierzytelniania WebUI PAN-OS (CVE-2025-0108) na podstawie sygnatur TP lub nietypowych wywołań WebUI.
references:
  - https://security.paloaltonetworks.com/CVE-2025-0108
logsource:
  category: firewall
  product: paloalto
detection:
  tp_ids:
    threat_id|contains:
      - '510000'
      - '510001'
    action|contains:
      - 'block'
      - 'reset'
  webui_suspicious:
    dst_port|in: [443, 4443]
    app|contains:
      - 'ssl'
      - 'web-browsing'
    url|endswith: '.php'
    user|isempty: true
  condition: tp_ids OR webui_suspicious
falsepositives:
  - Skanery podatności/monitoring pochodzące z dozwolonych adresów
level: high
tags:
  - attack.t1190
  - cve.2025-0108

Uwaga: dopasuj nazwy pól do Twojego parsera (np. threatid/threat_id, url, dstport). Sygnatury 510000/510001 wg advisora producenta.

Splunk (SPL)

A) Trafienia sygnatur 510000/510001 (pan:threat)

index=pan_logs sourcetype=pan:threat
| search threatid IN (510000, 510001)
| stats count min(_time) as firstSeen max(_time) as lastSeen values(src_ip) values(dst_ip) by threatid, threat, action

(„threatid”/„threat” mogą się różnić w zależności od Add‑on; sprawdź normalizację pól).

B) Dostępy do WebUI z Internetu (pan:traffic)

index=pan_logs sourcetype=pan:traffic (dest_port=443 OR dest_port=4443)
| eval isPublic=if(cidrmatch("0.0.0.0/0", src_ip) AND NOT
    (cidrmatch("10.0.0.0/8", src_ip) OR cidrmatch("172.16.0.0/12", src_ip) OR cidrmatch("192.168.0.0/16", src_ip)), 1, 0)
| where isPublic=1
| stats dc(src_ip) as uniqIPs values(app) values(rule) by dest_ip, dest_port

C) Korelacja: po ruchu na WebUI następuje Config change

(index=pan_logs sourcetype=pan:traffic (dest_port=443 OR dest_port=4443) src_ip!=10.0.0.0/8)
| bin _time span=5m
| stats values(src_ip) as srcs values(dest_ip) as mgmtIPs by _time
| join _time [ search index=pan_logs sourcetype=pan:config result="Succeeded"
              | stats values(admin) as admins values(client) as clients by _time ]
| table _time mgmtIPs srcs admins clients

Microsoft Sentinel / KQL (CommonSecurityLog)

A) Sygnatury TP (CEF)

CommonSecurityLog
| where DeviceVendor =~ "Palo Alto Networks" and DeviceProduct has "PAN-OS"
| where DeviceEventClassID =~ "threat"
| extend kv = parse_kv(AdditionalExtensions, ";", "=")
| where tostring(kv.threatid) in ("510000","510001") or tostring(kv.ThreatID) in ("510000","510001")
| summarize count(), FirstSeen=min(TimeGenerated), LastSeen=max(TimeGenerated) by SourceIP, DestinationIP, tostring(kv.threat_name)

B) Dostęp do WebUI z niezaufanych adresów

CommonSecurityLog
| where DeviceVendor =~ "Palo Alto Networks" and DeviceProduct has "PAN-OS"
| where DestinationPort in ("443","4443") and ApplicationProtocol in ("ssl","http","https")
| where not(ipv4_is_private(SourceIP))
| summarize dcount(SourceIP), make_set(SourceIP, 5) by DestinationIP, DestinationPort

AWS (CloudTrail/CLI/Flow Logs)

A) Zmiany SG otwierające WebUI na świat (CloudTrail)

AWSCloudTrail
| where EventName in ("AuthorizeSecurityGroupIngress","ModifyNetworkInterfaceAttribute")
| extend open443 = tostring(parse_json(RequestParameters).ipPermissions) has "fromPort\":443"
| extend open4443 = tostring(parse_json(RequestParameters).ipPermissions) has "fromPort\":4443"
| where open443 or open4443
| where tostring(parse_json(RequestParameters).ipPermissions) has "0.0.0.0/0"

B) Szybki audyt CLI (EC2 SG)

aws ec2 describe-security-groups \
  --query "SecurityGroups[?IpPermissions[?((FromPort==443||FromPort==4443)&&contains(IpRanges[].CidrIp, '0.0.0.0/0'))]].{GroupId:GroupId,Name:GroupName}" \
  --output table

C) VPC Flow Logs (CloudWatch Logs Insights) – ruch do 4443

fields @timestamp, srcAddr, dstAddr, dstPort, action
| filter dstPort in [443,4443] and action="ACCEPT"
| sort @timestamp desc
| limit 100

Elastic (EQL / KQL)

EQL – ruch do WebUI z Internetu + ślady PHP w URL

any where observer.vendor == "Palo Alto Networks" and
          event.dataset in ("panw.traffic","panw.threat") and
          destination.port in (443, 4443) and
          (url.path regex ".*\\.php(\\?|$)") and
          not cidrmatch(source.ip, "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16")

Heurystyki / korelacje

  • Łańcuch czasowy (T1190 → konfiguracja): (1) wzrost 4xx/5xx/nieudanych prób na WebUI → (2) trafienia sygnatur 510000/510001 → (3) Config/System z nietypowych IP → (4) nowe sesje admina/zmiany polityk.
  • Ekspozycja → atak: zdarzenia CloudTrail/SG otwierające 443/4443 dla 0.0.0.0/0 w VPC z VM‑Series + ruch do WebUI + zmiany w PAN‑OS.
  • Łańcuch z innymi CVE: obserwuj następujące wzorce po nieudanym logowaniu: wywołania prowadzące do PE/CI (CVE‑2024‑9474) i file read (CVE‑2025‑0111).

False positives / tuning

  • Skanery podatności / monitoring (np. z adresów skanerów wewnętrznych).
  • Automaty / API do kopii konfiguracji działające z uprzywilejowanych podsieci.
  • CDN/Proxy: pole XFF może maskować źródło — uwzględnij parsowanie XFF.
    Tuning: biała lista skanerów; zawężenie do dest_ip = znane IP zarządzania; korelacja z action != allow lub z sygnaturami TP.

Playbook reagowania (IR)

  1. Izoluj ekspozycję: natychmiast zablokuj dostęp do WebUI z Internetu (ACL/SG/WAF), ogranicz do jump‑boxa/VPN i adresów zaufanych.
  2. Zastosuj poprawki: podnieś PAN‑OS do wersji:
    • 10.1 ≥ 10.1.14‑h9; 10.2 : 10.2.7‑h24 / 10.2.8‑h21 / 10.2.9‑h21 / 10.2.10‑h14 / 10.2.11‑h12 / 10.2.12‑h6 / 10.2.13‑h3; 11.1 : 11.1.2‑h18 / 11.1.4‑h13 / 11.1.6‑h1; 11.2 ≥ 11.2.4‑h4/11.2.5.
  3. Włącz sygnatury: Threat Prevention 510000/510001 (Apps & Threats ≥ 8943). Zweryfikuj trafienia.
  4. Przegląd logów:
    • Threat/Traffic: próby na 443/4443, hosty źródłowe, geolokacja.
    • System/Config: nietypowe admin / client, zmiany reguł, importy konfiguracji.
  5. Hunting łańcucha: wyszukaj wskaźniki wykorzystania CVE‑2024‑9474/CVE‑2025‑0111 po czasie prób CVE‑2025‑0108.
  6. Twarde utwardzanie: odseparuj zarządzanie (VLAN/VRF/DMZ), wymuś MFA dla adminów, wyłącz HTTP, zostaw tylko HTTPS z certyfikatem i restrykcjami IP.
  7. Rotacja poświadczeń / przegląd kont: zmień hasła lokalnych adminów, sprawdź nieznane konta.
  8. Lessons learned: dodaj kontrolę CI/CD zmian SG, testy ekspozycji mgmt (IaC policy), dashboardy SOC.

Wybrane komendy PAN‑OS (CLI) – diagnostyka/bezpieczne

Uruchamiaj w oknie serwisowym, po kopii configu.

show system info
show admins
show config running | match management
show session all filter dst port 4443
show log system direction equal backward query '( subtype eq general )'
show log config direction equal backward

Przykłady z kampanii / case studies

  • Producent: „Palo Alto Networks zaobserwował próby łańcuchowania CVE‑2025‑0108 z CVE‑2024‑9474 i CVE‑2025‑0111 na niezałatanych i źle zabezpieczonych WebUI.”
  • KEV: wpis CISA KEV z datą dodania 2025‑02‑18 potwierdza eksploatację w praktyce.
  • Niezależne analizy: raporty Armis/FortiGuard omawiają aktywne wykorzystanie i łańcuszkowanie.

Lab (bezpieczne testy)

Cel: zweryfikować detekcję i twarde zasady bez ujawniania szczegółów exploitu. Wykonuj w odseparowanym labie.

  1. Topologia: VM‑Series (lab), jump‑host (allowlist), maszyna „Internet” (deny).
  2. Ekspozycja kontrolowana: tymczasowo otwórz 4443 tylko dla jump‑host; potwierdź, że „Internet” jest blokowany.
  3. Generacja ruchu: z „Internet” wyślij neutralne żądania HTTPS do WebUI (np. curl -k https://FW:4443/) i obserwuj logi Traffic/Threat.
  4. Sygnatury: zaktualizuj Applications and Threats do wersji ≥ 8943 i zweryfikuj, że blokady 510000/510001 pojawiają się przy próbach wzorcowych (narzędzie skanujące w labie).
  5. Kwerendy: uruchom reguły SPL/KQL/EQL z pkt 7 i sprawdź alarmy.

(Nie wykonujemy czynności ukierunkowanych na obejście zabezpieczeń ani odtwarzania łańcucha exploitu.)


Mapowania (Mitigations, powiązane techniki)

  • ATT&CK Technika: T1190 Exploit Public‑Facing Application (Initial Access).
  • Mitigations (ATT&CK):
    • M1030 Network Segmentation – izoluj płaszczyznę zarządzania; dostęp tylko z jump‑boxa.
    • M1031 Network Intrusion Prevention – stosuj IPS/WAF do ruchu do WebUI; sygnatury TP 510000/510001.
    • M1050 Exploit Protection – „virtual patching”, blokady behawioralne; polityki hardeningu.
  • Powiązane CVE/techniki do korelacji: CVE‑2024‑9474 (eskalacja/CI), CVE‑2025‑0111 (file read) — korelować jako etap po T1190.

Źródła / dalsza literatura

  • Palo Alto Networks — oficjalny advisory CVE‑2025‑0108 (wersje, sygnatury, status exploitation, mitigation). (Palo Alto Networks Security)
  • NVD CVE‑2025‑0108 — CVSS v3.1=9.1, wpis KEV (data/due date). (NVD)
  • MITRE ATT&CK T1190 (wersja 2.8; modyfikacja 2025‑10‑24). (MITRE ATT&CK)
  • ATT&CK Version History — aktualna wersja v18.1 (od 2025‑10‑28). (MITRE ATT&CK)
  • Armis — łańcuch wykorzystania 0108+9474+0111. (Armis)
  • FortiGuard Labs — aktywna eksploatacja. (FortiGuard)
  • Microsoft — CommonSecurityLog / KQL dla Palo Alto (CEF). (Microsoft Learn)
  • PAN‑OS log fields (Traffic/Threat/System) — dokumentacja. (docs.paloaltonetworks.com)

Checklisty dla SOC / CISO

SOC – dziś

  • Czy żaden WebUI PAN‑OS nie jest dostępny z Internetu? (skan + SG/ACL)
  • Czy mamy aktualizację do naprawionych wersji (patrz lista)?
  • Czy Threat Prevention włączony + sygnatury 510000/510001 działają?
  • Czy działają alerty T1190: ruch na 443/4443 do IP zarządzania, zdarzenia Threat/Config?
  • Korelacja z CVE‑2024‑9474 / CVE‑2025‑0111 po czasie prób.

CISO – w tym kwartale

  • Segmentacja płaszczyzny zarządzania (M1030) i MFA dla adminów.
  • Policy as Code: bloker IaC zmian SG/VPC otwierających 443/4443.
  • Przegląd EoL PAN‑OS (9.x/10.0/11.0) i plan migracji.
  • Testy scenariuszy T1190 w purple‑team (bez exploitu produkcyjnego).

CVE-2023-27997 – Krytyczna podatność typu heap‑based buffer overflow w FortiOS/FortiProxy (SSL‑VPN, FortiGate)

TL;DR

  • Co: Pre‑auth RCE w FortiOS/FortiProxy SSL‑VPN (FortiGate) — CVE‑2023‑27997 („XORtigate”).
  • Jak: nadpisanie bufora (heap) poprzez parametr enc w endpointzie /remote/hostcheck_validate, co umożliwia wykonanie kodu bez logowania.
  • Ryzyko: krytyczne, aktywnie wykorzystywane, w KEV (CISA).
  • Naprawa: aktualizacja co najmniej do FortiOS 6.0.17 / 6.2.15 / 6.4.13 / 7.0.12 / 7.2.5 oraz odpowiednie wersje FortiProxy; w razie potrzeby tymczasowo wyłączyć SSL‑VPN.
  • ATT&CK: T1190 (Initial Access). Wskazane korelacje z T1133 (External Remote Services) oraz T1210 (Exploitation of Remote Services) dla ruchu/powykorzystaniowych zachowań.

Krótka definicja techniczna

CVE‑2023‑27997 to błąd heap‑based buffer overflow (CWE‑122/CWE‑787) w komponencie SSL‑VPN FortiOS/FortiProxy umożliwiający zdalne wykonanie kodu na urządzeniu bez uwierzytelnienia poprzez „specjalnie spreparowane” żądania HTTP/HTTPS do publicznego interfejsu VPN.


Gdzie występuje / przykłady platform

  • Network Devices (FortiGate/FortiProxy) — urządzenia brzegowe z włączonym SSL‑VPN. (Matryca ATT&CK obejmuje „Network Devices”).
  • Chmura/edge: gdy FortiGate stoi za ALB/WAF (AWS/Azure/GCP), ślady ataków w logach ALB/WAF/Load Balancer. [Mimo że sama podatność dotyczy urządzenia, telemetria może być w logach chmurowych.]
  • Windows/AD/Azure/M365/K8s/ESXi: pośrednio — jako dalsze cele po początkowym włamaniu (lateral movement), nie jako wektor podatności.

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

Atakujący składa pre‑auth żądania HTTP(S) do portalu SSL‑VPN FortiGate. Kluczową rolę odgrywa endpoint /remote/hostcheck_validate i parametr enc, którego długość i dekodowanie są błędnie weryfikowane. Błąd pozwala na nadpisanie pamięci sterty i w konsekwencji wykonanie kodu. Badanie LEXFO opisuje też zależności od /remote/info (do pobrania „salt”) oraz charakter „XOR‑overflow” wykorzystywany do manipulacji pamięcią. W praktyce umożliwia to początkowy dostęp (Initial Access) i często ominięcie MFA, ponieważ atak następuje przed uwierzytelnieniem.

Fortinet potwierdził krytyczność problemu (FG‑IR‑23‑097), publikując łatki i zalecając niezwłoczną aktualizację; CISA dodała CVE do KEV (Known Exploited Vulnerabilities).


6) Artefakty i logi (tabela)

Źródło/warstwaKluczowe pola / wzorcePrzykładowe wartości / IOCUwagi
FortiGate system/sslvpn logstype=event, subtype=vpn/daemon, msg, service=sslvpn, logid, eventtimeBłędy invalid enc data length, restarty/„sslvpnd daemon crash/watchdog timeoutCrashe/timeouty sslvpnd są sygnałem ostrzegawczym.
FortiGate HTTP/HTTPS accessurl, http_method, status, user="" (pre‑auth), srcipŻądania do /remote/hostcheck_validate z parametrem enc=; skoki 4xx/5xxNajlepiej zbierać jako syslog/CEF do SIEM.
FortiGate Event (log IDs)logid, action, userZalew SSL‑VPN login fail (np. ...user-ssl-login-fail...) lub niestandardowe wzorcePrzydatne do korelacji szumu skanowania z exploitami.
Crashlogdiag debug crashlog readWpisy o sslvpnd, sygnały, restartyMateriał dowodowy na awarie procesu.
ALB/WAF/Reverse Proxyrequest_uri, user_agent, status, bytes/remote/hostcheck_validate, enc=; piki z pojedynczych IPGdy urządzenie stoi za LB/WAF.
Windows EID[nie dotyczy]Bezpośrednio brak artefaktów Windows.
AWS CloudTrail[nie dotyczy]CloudTrail nie rejestruje treści HTTP; szukaj w ALB/WAF (CloudWatch Logs).
K8s audit[nie dotyczy]
M365 audit[nie dotyczy]

Detekcja (praktyczne reguły)

Sigma (FortiGate / proxy logs)

title: FortiGate SSL-VPN hostcheck_validate enc Anomaly (CVE-2023-27997)
id: 4d6f70b0-6b8a-4a3a-9be1-enc-hostcheck
status: experimental
description: Wykrywa żądania do /remote/hostcheck_validate z parametrem enc= (pre-auth) – możliwe wykorzystanie CVE-2023-27997.
references:
  - https://nvd.nist.gov/vuln/detail/cve-2023-27997
  - https://blog.lexfo.fr/xortigate-cve-2023-27997.html
  - https://www.cisa.gov/news-events/alerts/2023/06/13/cisa-adds-one-known-exploited-vulnerability-catalog
tags:
  - attack.t1190
  - cve.2023-27997
logsource:
  category: firewall
  product: fortinet
detection:
  sel_path:
    url|contains: "/remote/hostcheck_validate"
  sel_param:
    url|contains: "enc="
  # alternatywne pola spotykane w CEF/LEEF
  sel_alt1:
    cs-uri-stem|contains: "/remote/hostcheck_validate"
  sel_alt2:
    cs-uri-query|contains: "enc="
  condition: (sel_path and sel_param) or (sel_alt1 and sel_alt2)
fields:
  - src_ip
  - dst_ip
  - url
  - http_method
  - http_status
falsepositives:
  - Starsze klienty FortiClient wykonujące host-check (rzadkie)
level: high

Splunk (SPL)

Wyszukaj podejrzane żądania i skoki błędów:

index=network (sourcetype=fortigate* OR sourcetype=proxy*)
("|/remote/hostcheck_validate" OR cs_uri_stem="/remote/hostcheck_validate")
("enc=" OR cs_uri_query="*enc=*")
| bin _time span=5m
| stats count count(eval(http_status>=400 AND http_status<600)) AS errs
        values(http_method) AS methods
        values(http_status) AS statuses
        by _time, src_ip, dest_ip, uri, user
| where count>=5 OR errs>=3

Crashes sslvpnd (system events):

index=network sourcetype=fortigate:syslog ("sslvpnd" OR "SSL VPN Watchdog" OR "daemon crash")
| stats count latest(msg) AS any_message by _time, host

KQL (Microsoft Sentinel — CommonSecurityLog lub CEF z FortiGate)

let t = 5m;
CommonSecurityLog
| where DeviceVendor =~ "Fortinet"
| where RequestURL has "/remote/hostcheck_validate" and RequestURL has "enc="
| summarize cnt = count(), statuses = make_set(FlexString1) by bin(TimeGenerated, t), SourceIP, DestinationIP, RequestURL
| where cnt >= 5

AWS — CloudWatch Logs Insights (ALB/WAF access logs; nie CloudTrail)

fields @timestamp, @message, httpRequest.clientIp as src
| filter requestURI like /\/remote\/hostcheck_validate/ and @message like /enc=/
| stats count() as hits, countif(elb_status_code like /5\d\d|4\d\d/) as errs by bin(5m), src, requestURI
| filter hits >= 5 or errs >= 3

Elastic (Kibana KQL + EQL)

KQL (HTTP/Proxy index):

url.path : "/remote/hostcheck_validate" and url.query : "*enc=*"

EQL (jeśli parsowane do pól http/url):

sequence by source.ip with maxspan=5m
  [ network where url.path == "/remote/hostcheck_validate" and url.query : "*enc=*" ]
  [ any where process.name == "sslvpnd" and event.action in ("crash","restart") ]

Heurystyki / korelacje

  • Wzorzec żądań: burst żądań do /remote/hostcheck_validate z enc= z pojedynczego IP + wysoki udział 4xx/5xx → koreluj z restartem/crashem sslvpnd w ±5 min.
  • Pre‑auth charakter: brak user w logu, brak sesji, nietypowy User‑Agent (skanery/custom).
  • Post‑exploitation: nagłe utworzenie/zmiana konta admina (np. fortigate-tech-support) lub odczyt konfiguracji — sygnał znany z incydentów wokół CVE‑2023‑27997.
  • Trwałość na urządzeniu: modyfikacje w przestrzeni plików SSL‑VPN (np. katalog językowy) i techniki „symlink” opisywane przez Fortinet jako metoda ukrywania artefaktów po wcześniejszych exploitach — warto hunting.

False positives / tuning

  • Prawdziwe host‑checki starych klientów FortiClient mogą dotykać hostcheck_validate, jednak wolumen jest niewielki i statusy HTTP są zazwyczaj 200/302.
  • Skanery bezpieczeństwa/VAS mogą generować pojedyncze hity.
  • Tuning: whitelisty źródeł administracyjnych, progi wolumetryczne (np. ≥5 w 5 min), statusy ≥400, brak user, nietypowe geolokalizacje/GEO‑ASN.

Playbook reagowania (IR)

  1. Identyfikacja ekspozycji
    • Zbierz listę FortiGate/FortiProxy z włączonym SSL‑VPN i sprawdź wersje (get system status).
    • Jeżeli urządzenie podatne i dostępne z Internetu — podnieś priorytet.
  2. Doraźne ograniczenie ryzyka (jeśli patch niedostępny)
    • Wyłącz SSL‑VPN do czasu aktualizacji (Fortinet wskazuje to jako obejście).
  3. Patch & Verify
    • Zaktualizuj co najmniej do FortiOS 6.0.17 / 6.2.15 / 6.4.13 / 7.0.12 / 7.2.5; FortiProxy do odpowiednich wersji (≥7.2.4 lub ≥7.0.10).
  4. Hunting (±30 dni)
    • Przeszukaj SIEM pod kątem /remote/hostcheck_validate + enc=; wysoki wolumen/4xx/5xx.
    • Sprawdź crashlog/system events (sslvpnd crash/watchdog).
    • Zweryfikuj kontrolę administracyjną: nieautoryzowane konta admin (np. fortigate-tech-support), anomalie w konfiguracji.
  5. Forensyka na urządzeniu
    • Sprawdź katalogi językowe SSL‑VPN pod kątem podejrzanych plików/symlinków (wątek post‑exploitation opisany przez Fortinet).
  6. Remediacja haseł/kluczy
    • Po kompromitacji: rotacja poświadczeń, kluczy VPN, certyfikatów; sprawdź integracje LDAP/Radius.
  7. Hardening
    • Ogranicz ekspozycję panelu/portu VPN do zaufanych adresów; włącz WAF/geo‑IP rate‑limit/DoS‑policy.
  8. Zgłoszenie i lessons learned
    • Odnotuj w rejestrze incydentów; zaktualizuj reguły, dashboardy, runbooki.

Przykłady z kampanii / case studies

  • CISA KEV: CVE‑2023‑27997 dodane 13 czerwca 2023 do katalogu KEV — wymóg szybkiej remediacji.
  • Fortinet PSIRT (06.2023): ograniczone przypadki wykorzystania „in the wild”; zalecenie natychmiastowego upgrade, brak powiązania z Volt Typhoon w dacie publikacji.
  • Raporty branżowe (2024–2025): CVE pojawia się w zestawieniach „routinely exploited”; organy rządowe ostrzegały przed utrzymaną obecnością na FortiOS po patchach (konieczny threat hunting).

Lab (bezpieczne testy)

Tylko w kontrolowanym labie (izolowane FortiGate/FortiProxy). Celem jest detekcja, nie eksploatacja.

  1. Przygotowanie:
    • Urządzenie testowe FortiGate z włączonym SSL‑VPN, wersja podatna (offline, bez Internetu).
    • SIEM (np. Splunk/Elastic/Sentinel) z odbiorem syslog/CEF.
  2. Generowanie normalnego ruchu:
    • Z klienta FortiClient zestaw połączenie → powstaną logi tunnel-up / tunnel-down (do porównania).
  3. Generowanie podejrzanych wzorców (bez exploitów):
    • Wyślij wielokrotne żądania GET do /remote/hostcheck_validate?enc=AA z różnych IP źródłowych (np. z testowych kontenerów) — celem jest wygenerowanie charakterystycznego wzorca URI i 4xx w logach (nie dostarczać Keystream/PoC).
    • Zweryfikuj, czy reguły z pkt 7 aktywują alerty, a dashboardy pokazują piki 4xx/5xx.
  4. Symulacja awarii procesu:
    • (Opcjonalnie) ręcznie zrestartuj usługę SSL‑VPN, aby przetestować korelację z logami „daemon restart/crash” bez wymuszania błędu w pamięci.
  5. Walidacja:
    • Przejrzyj korelacje: burst /remote/hostcheck_validate + restart sslvpnd + brak user + 4xx.

Mapowania (Mitigations, powiązane techniki)

Technika główna: T1190 – Exploit Public‑Facing Application (Initial Access).

Techniki powiązane:

  • T1133 – External Remote Services (VPN jako brama zdalna; logika detekcji dostępowej).
  • T1210 – Exploitation of Remote Services (ew. późniejsze ruchy boczne).

Mitigations (ATT&CK):

  • M1030 — Network Segmentation (DMZ dla usług publicznych).
  • M1035 — Limit Access to Resource Over Network (allow‑list do portalu VPN).
  • M1042 — Disable or Remove Feature or Program (wyłącz SSL‑VPN, jeśli nieużywany).
  • M1050 — Exploit Protection (ochrony przed exploitami, w tym IPS/WAF).
  • M1016 — Vulnerability Scanning (ciągła walidacja wersji).

Źródła / dalsza literatura

  • NVD: opis, wersje dotknięte, CVSS 9.8. (NVD)
  • CISA KEV: dodanie CVE‑2023‑27997 do katalogu (2023‑06‑13). (CISA)
  • Fortinet PSIRT (blog, 12.06.2023): kontekst, zalecenia, brak bezpośredniego powiązania z Volt Typhoon w dacie publikacji. (Fortinet)
  • FortiGuard CVRF FG‑IR‑23‑097: opis, workaround „disable SSL‑VPN”. (FortiGuard)
  • LEXFO (XORtigate): szczegóły techniczne błędu (/remote/hostcheck_validate, enc). (blog.lexfo.fr)
  • Rapid7: wersje naprawcze (6.0.17/6.2.15/6.4.13/7.0.12/7.2.5), IOCs (np. fortigate-tech-support). (Rapid7)
  • Fortinet (04.10.2025): technika symlink post‑exploitation na FortiOS. (Fortinet)
  • Fortinet community: watchdog/crash sslvpnd — jak rozpoznać w logach. (Fortinet Community)

Checklisty dla SOC / CISO

SOC (operacyjna):

  • Alert na /remote/hostcheck_validate + enc= (pre‑auth) z progami wolumetrycznymi.
  • Korelacja z sslvpnd crash/restart i pikami 4xx/5xx.
  • Hunting kont admina (np. fortigate-tech-support) i zmian konfiguracji.
  • Dashboard narażonych wersji (parsing get system status).
  • Logi z ALB/WAF, jeśli FortiGate za load balancerem.

CISO (strategiczna):

  • Patch policy: SLA dla urządzeń brzegowych (≤7 dni dla CVE krytycznych, w KEV).
  • Segmentacja/DMZ dla serwisów publicznych (M1030).
  • Dostęp warunkowy do paneli VPN (M1035/M1042) + geofencing.
  • Testy kontrolne: cykliczne skany podatności (M1016) i symulacje IR.