Archiwa: Podatności - 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