
Co znajdziesz w tym artykule?
- 1 TL;DR
- 2 Krótka definicja techniczna
- 3 Gdzie występuje / przykłady platform
- 4 Szczegółowy opis techniki (jak działa, cele, dlaczego skuteczna)
- 5 Artefakty i logi
- 6 Detekcja (praktyczne reguły)
- 7 Heurystyki / korelacje
- 8 False positives / tuning
- 9 Playbook reagowania
- 10 Przykłady z kampanii / case studies
- 11 Lab (bezpieczne testy) — przykładowe komendy
- 12 Mapowania (Mitigations, powiązane techniki)
- 13 Źródła / dalsza literatura
- 14 Checklisty dla SOC / CISO
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ło | Pole/artefakt | Wskaźnik | Komentarz |
|---|---|---|---|
| Pulse Secure syslog (Events/User/Admin) | log message / URI | nietypowe żądania do endpointów HTML5 + sekwencje traversal | Upewnij się, że eksportujesz syslog (WELF/Custom). |
| Reverse proxy / WAF | URI, query, status, UA, src IP | obecność wzorców path traversal, słowa‑klucze związane z HTML5 gateway | Dobre miejsce do korelacji i rate‑limitu. |
| AWS WAF (CloudWatch Logs) | httpRequest.uri, action, terminatingRuleId | żądania z ../ i słowami kluczowymi; akcja ALLOW/BLOCK | Pola wg dokumentacji AWS WAF. |
| ALB Access Logs (S3) | request, elb_status_code, target_status_code | 200/206 dla nietypowych żądań | W połączeniu z WAF daje pełny obraz. |
| SIEM parsers (Chronicle/QRadar/itd.) | Normalizowane pola URL | dopasowania na tokenach ścieżki i traversal | Przykłady konfiguracji dla PCS. |
| ICT (Integrity Checker Tool) | wynik skanu | nowe/zmodyfikowane pliki na urządzeniu | Do potwierdzenia kompromitacji obrazu urządzenia. |
| EID / K8s audit / M365 | — | n/d | Podatność 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%2ejest 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
- 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.
- Weryfikacja stanu PCS: uruchom Ivanti Integrity Checker Tool (ICT) (wbudowany lub zewnętrzny) i zarchiwizuj wynik.
- Forensyka: zgraj logi (Events/User/Admin), eksport syslog z SIEM, logi WAF/ALB. (Dokumentacja logowania PCS.)
- 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.
- Reset/rotacja: wymuś reset haseł VPN/AD, rotuj certyfikaty/klucze używane przez PCS, unieważnij aktywne sesje. (Powiązanie z T1552.*).
- Hunting post‑exploitation: szukaj logowań z nowych ASN, użycia skradzionych ciasteczek/tokens (T1539), nietypowych mapowań ról.
- Twardnienie: stałe reguły WAF blokujące traversal, MFA wszędzie, segmentacja i ograniczenie dostępu do konsoli administracyjnej PCS.
- 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.
- 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
- Weryfikacja detekcji — załaduj logi
access.logdo SIEM i uruchom reguły z §7. - Test WAF — utwórz regułę blokującą sekwencje traversal i sprawdź, czy zapisy AWS WAF rejestrują akcję
BLOCKorazterminatingRuleId.
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).