CVE-2019-2725 — Oracle WebLogic Server deserialization RCE

securitybeztabu.pl 12 godzin temu

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" - "<objectwp-block-heading">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ę java → cmd/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ę iż 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.
Idź do oryginalnego materiału