
Co znajdziesz w tym artykule?
- 1 TL;DR
- 2 Krótka definicja techniczna
- 3 Gdzie występuje / przykładowe platformy
- 4 Szczegółowy opis techniki (jak działa, cele, dlaczego skuteczna)
- 5 Artefakty i logi (SOC „punkty zaczepienia”)
- 6 Detekcja (praktyczne reguły)
- 7 Heurystyki / korelacje (co łączyć)
- 8 False positives / tuning
- 9 Playbook reagowania (IR) — kroki & komendy
- 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
Krytyczna luka w Atlassian Crowd i Crowd Data Center umożliwiała (bez uwierzytelnienia) przesłanie i zainstalowanie arbitralnego pluginu przez endpoint administracyjny — w efekcie zdalne wykonanie kodu (RCE). Wpływ: pełne przejęcie hosta aplikacyjnego/Tomcata, często zakończone doinstalowaniem webshella i dalszą penetracją sieci. Naprawa: aktualizacja do wersji 3.0.5/3.1.6/3.2.8/3.3.5/3.4.4 lub nowszej; doraźnie usunięcie paczki pdkinstall-plugin. Detekcja: szukaj żądań do /crowd/admin/uploadplugin.action oraz anomalii „java → sh/cmd” na hoście.
Krótka definicja techniczna
CVE‑2019‑11580 wynika z błędnie pozostawionego w buildach produkcyjnych pluginu developerskiego pdkinstall, który pozwalał (także bez autoryzacji) na upload i instalację komponentów OSGi/JAR. Umożliwia to instalację złośliwego pluginu i wykonanie kodu w kontekście procesu aplikacyjnego (Tomcat/Java), co skutkuje RCE.
Gdzie występuje / przykładowe platformy
- Systemy: Linux/Unix (typowo), Windows (usługa Crowd/Tomcat).
- Środowiska: bare metal, VM (ESXi/Hyper‑V), kontenery/K8s (Crowd w kontenerze lub jako Helm chart), reverse proxy (NGINX/Apache), WAF.
- Chmury: AWS (EC2 + ALB/WAF), Azure (VM + App Gateway/WAF), GCP (Compute Engine + HTTP(S) LB).
- Tożsamość: Crowd integruje się z AD/LDAP/Azure AD/M365, ale sama luka dotyczy Crowd, nie tych usług.
Szczegółowy opis techniki (jak działa, cele, dlaczego skuteczna)
- Przyczyna: w buildach Crowd błędnie włączono pdkinstall development plugin. Pozwalał on na instalację pluginów również na instancjach produkcyjnych.
- Wektor: żądanie HTTP do endpointu administracyjnego odpowiedzialnego za upload pluginów (np. ścieżka zawierająca
/crowd/admin/uploadplugin.action). Po stronie serwera plugin jest ładowany i wykonywany w kontekście aplikacji. - Skutki: wykonanie dowolnego kodu (Java/serwlety), możliwość dropu webshella, ruchu bocznego, kradzieży poświadczeń i pivotu. W praktyce technika była powszechnie wykorzystywana do instalacji webshelli.
- Zasięg wersji: dotyczy wersji 2.1.0 ≤ v < 3.0.5, 3.1.0 ≤ v < 3.1.6, 3.2.0 ≤ v < 3.2.8, 3.3.0 ≤ v < 3.3.5, 3.4.0 ≤ v < 3.4.4; naprawione w 3.0.5 / 3.1.6 / 3.2.8 / 3.3.5 / 3.4.4. CVSS v3.1: 9.8 (CRITICAL).
Artefakty i logi (SOC „punkty zaczepienia”)
| Źródło | EID / typ | Co obserwować | Przykłady / uwagi |
|---|---|---|---|
| Web access (NGINX/Apache/ALB/WAF) | HTTP access | Żądania do /crowd/admin/uploadplugin.action, metody POST/PUT, wzrost 4xx/5xx przed sukcesem | Endpoint potwierdzony w analizach; logi WAF/ALB/AGW zawierają URI/metodę. |
Aplikacja Crowd (atlassian-crowd.log) | log4j | Wpisy dot. instalacji/ładowania pluginów, błędów UPM, wyjątków OSGi | Lokalizacja/konfiguracja logów Crowd. |
Tomcat (catalina.out) | log | Niespodziewane błędy serwletów/przeładowanie klas tuż po podejrzanym żądaniu | Crowd loguje zarówno do własnego logu, jak i Tomcata. |
| Windows | 4688 (Process Create), 7045 (Service Install), Sysmon 1/3/11 | ParentImage=java.exe uruchamia cmd.exe/powershell.exe, sieć wychodząca, tworzenie JAR w katalogach pluginów | Korelować z czasem żądań HTTP |
| Linux | auditd EXECVE / EDR | PPID=java uruchamia /bin/sh, curl/wget, „reverse shell” artefakty | |
| K8s (jeśli Crowd w K8s) | Ingress/Nginx access | URI jak wyżej; wzrost 5xx; nietypowe źródła | |
| AWS | WAF/ALB logs (CloudWatch/S3) | httpRequest.uri zawiera ścieżkę; metoda POST | CloudWatch Logs Insights/Athena do analizy |
| Azure | App Gateway/WAF | requestUri_s zawiera ścieżkę; httpMethod_s = POST | Dane w AzureDiagnostics |
| M365 | — | nie dotyczy bezpośrednio | Crowd integruje się z M365/IdP, ale luka jest po stronie Crowd |
| CloudTrail | — | nie dotyczy (aplikacyjny HTTP, nie API AWS) | Traktuj CloudTrail pobocznie (zmiany infra) |
Detekcja (praktyczne reguły)
Sigma (webserver → próby uploadu pluginu)
title: Atlassian Crowd CVE-2019-11580 - Podejrzany upload pluginu
id: 4c8f5ee1-7f6a-4a7c-9b8e-cc9a2cfe9e9a
status: experimental
description: Wykrywa żądania do endpointu uploadu pluginów Crowd często nadużywanego w CVE-2019-11580.
references:
- https://confluence.atlassian.com/crowd/crowd-security-advisory-2019-05-22-970260700.html
- https://nvd.nist.gov/vuln/detail/CVE-2019-11580
- https://www.rapid7.com/db/modules/exploit/multi/http/atlassian_crowd_pdkinstall_plugin_upload_rce/
logsource:
category: webserver
detection:
sel_path:
url|contains: '/crowd/admin/uploadplugin.action'
cs-uri-stem|contains: '/crowd/admin/uploadplugin.action'
sel_method:
http_method|contains:
- POST
- PUT
cs-method|contains:
- POST
- PUT
condition: sel_path and sel_method
fields:
- src_ip
- url
- http_user_agent
- http_referer
- status
falsepositives:
- Legalna instalacja/aktualizacja pluginu przez admina (okno serwisowe)
level: high
tags:
- attack.T1190
- cve.2019-11580
(endpoint/metoda potwierdzone w źródłach)
Splunk (SPL) — logi www
index=web (sourcetype=access_combined OR sourcetype=aws:alb:accesslogs OR sourcetype=nginx:ingress)
| eval uri=coalesce(cs_uri_stem, uri_path, request, uri)
| eval method=coalesce(cs_method, method, http_method)
| search uri="/crowd/admin/uploadplugin.action" method IN ("POST","PUT")
| stats count min(_time) as first max(_time) as last values(status) as http_status by src_ip, uri, method, useragent
| where count>=1
KQL (Azure) — App Gateway/WAF
AzureDiagnostics
| where Category in ("ApplicationGatewayAccessLog","ApplicationGatewayFirewallLog")
| where requestUri_s has "/crowd/admin/uploadplugin.action"
| where httpMethod_s in ("POST","PUT")
| project TimeGenerated, clientIP_s, requestUri_s, httpMethod_s, httpStatus_d, userAgent_s
AWS — CloudWatch Logs Insights (WAF/ALB)
fields @timestamp, httpRequest.clientIp, httpRequest.uri, httpRequest.httpMethod, terminatingRuleId
| filter httpRequest.uri like '/crowd/admin/uploadplugin.action'
| filter httpRequest.httpMethod in ['POST','PUT']
| sort @timestamp desc
Elastic / EQL — post‑exploitation na hoście (Java → shell)
process where event.type == "start" and
process.parent.name : ("java","java.exe","tomcat","catalina.sh","catalina.bat") and
process.name : ("bash","sh","cmd.exe","powershell.exe","curl","wget","nc","socat")
Heurystyki / korelacje (co łączyć)
- Łańcuch czasowy: (1) żądanie do
/crowd/admin/uploadplugin.action→ (2) nagły 200/302 lub 5xx→200 → (3) na hościejavauruchamiash/cmd→ (4) połączenie wychodzące na nietypowe IP/port. - Integracja z WAF: wysoki odsetek 4xx/5xx na tej ścieżce + próby multipart POST od pojedynczego źródła.
- FIM/baseline: nowe
.jarw katalogach pluginów Crowd; nagłe zmiany watlassian-bundled-plugins.zip.
False positives / tuning
- Legalne okna administracyjne (instalacja/aktualizacja pluginów) — stosuj allowlist IP/adminów oraz korelację z change window.
- Skanery podatności/Nuclei — zwykle GET/HEAD i brak dalszych artefaktów hostowych.
- Reverse proxy health checks — nie używają POST/PUT na admin‑endpointach.
Tuning: ogranicz alerty do POST/PUT + 2xx/3xx i wyklucz znane sieci adminów; koreluj z host‑EDR (Java→shell).
Playbook reagowania (IR) — kroki & komendy
Kontekst tylko defensywny. Wykonuj wyłącznie w środowisku, którego jesteś administratorem.
- Triage & potwierdzenie
- Sprawdź wersję Crowd (podatne pasma); jeżeli poniżej 3.4.4 (lub odpowiedni fix dla linii), traktuj jako incydent krytyczny.
- Przejrzyj WAF/ALB/NGINX: żądania do
/crowd/admin/uploadplugin.action.
- Izolacja
- Tymczasowo zablokuj dostęp do ścieżki na WAF/reverse proxy (rule deny URI).
- Rozważ odłączenie hosta od Internetu (zachowując dostęp IR).
- Zachowanie dowodów
- Zrzut logów: web,
atlassian-crowd.log,catalina.out; snapshot VM. - Hash/backup katalogów pluginów.
- Zrzut logów: web,
- Łowiectwo zagrożeń (host)
- Linux:
grep -E "uploadplugin|multipart|pdkinstall" /var/log/nginx/access.log* grep -i "plugin" $CROWD_HOME/logs/atlassian-crowd.log find $CROWD_HOME -type f -name "*.jar" -mmin -4320 - Windows (PowerShell/Sysmon): filtruj EventID 1 (ParentImage=java.exe) →
cmd.exe/powershell.exe.
- Linux:
- Eradykacja
- Patch do wersji z poprawką (3.0.5/3.1.6/3.2.8/3.3.5/3.4.4 lub nowszej).
- Jeżeli patch odroczony: usuń
pdkinstall-pluginz instalacji i bundla (instrukcja vendor). - Usuń nieznane pluginy, przywróć baseline, zrestartuj usługę (kontrolując logi po starcie).
- Odzyskiwanie i weryfikacja
- Testy funkcjonalne, monitorowanie podwyższone przez 7–14 dni, rotacja haseł/kluczy używanych przez Crowd (integracje AD/LDAP).
- Lekcje / hardening
- WAF rule per‑URI, segmentacja DMZ, wymuszenie SSO/AdminVPN, FIM katalogów pluginów.
Przykłady z kampanii / case studies
- CISA (AA21‑209A): luka była rutynowo wykorzystywana do instalacji webshelli na serwerach ofiar.
- KEV: CVE‑2019‑11580 ujęty w CISA Known Exploited Vulnerabilities — zalecana pilna aktualizacja.
- Detekcje rynkowe: dostawcy NDR/IDS publikowali sygnatury/artefakty dla tego CVE (m.in. opis ryzyka i łańcucha eksploatacji).
Lab (bezpieczne testy) — przykładowe komendy
Uwaga: Poniższe testy nie eksploatują luki. Służą do walidacji detekcji w kontrolowanym labie.
- Generowanie śladu www (WAF/NGINX/ALB)
# symulacja niegroźnego ruchu do admin-URI (powinno zwrócić 401/403/404/405)
curl -I -X POST https://lab.example.com/crowd/admin/uploadplugin.action
- Walidacja korelacji hostowej (Linux)
# kontrolowany start i szybkie zakończenie powłoki, do sprawdzenia korelacji "java -> sh"
sudo -u crowd bash -c 'true' # wygeneruj bezpieczny event exec
- FIM (plik JAR w katalogu pluginów — lab only)
# NIE w produkcji: sprawdź, czy FIM łapie nowe JAR-y
touch $CROWD_HOME/shared/plugins/test-fim.jar
Mapowania (Mitigations, powiązane techniki)
Mitigations (ATT&CK Enterprise):
- M1051 — Update Software: szybka aktualizacja Crowd do wersji zawierającej fix.
- M1042 — Disable or Remove Feature or Program: usunięcie
pdkinstall-plugini zbędnych komponentów. - M1030 — Network Segmentation: odseparowanie Crowd w DMZ/segmencie publikacyjnym.
- M1047 — Audit: stały przegląd logów aplikacyjnych i kontroli integrity komponentów.
Powiązane techniki ATT&CK:
- T1190,
- T1505.003,
- T1105,
- T1059 .
Źródła / dalsza literatura
- Atlassian: Crowd Security Advisory 2019‑05‑22 — wersje podatne, wersje naprawcze, mitigacja. (Atlassian Documentation)
- NVD: opis i CVSS dla CVE‑2019‑11580. (NVD)
- Rapid7 (opis modułu wykrywającego endpoint uploadu pluginu). (Rapid7)
- CISA: Top Routinely Exploited Vulnerabilities — użycie do instalacji webshelli; KEV. (CISA)
- Atlassian: lokalizacja i konfiguracja logów Crowd/Tomcat. (Atlassian Documentation)
- ATT&CK: T1190, T1505.003, T1105, T1059 (wersje i zakres). (MITRE ATT&CK)
Checklisty dla SOC / CISO
SOC (operacyjna):
- Monitoruj POST/PUT na
/crowd/admin/uploadplugin.action(www/WAF/ALB). - Koreluj z hostem:
java→sh/cmd, nowe *.jar w katalogach pluginów. - Wdróż reguły Sigma/SPL/KQL z §7 i testy z §12.
- Ustal allowlist IP adminów Crowd i okna serwisowe.
- Myślistwo: poszukaj webshelli/serwletów nietypowych (hash/baseline).
CISO/Architekt (strategiczna):
- Patch policy: Crowd ≥ naprawione wersje (3.0.5/3.1.6/3.2.8/3.3.5/3.4.4) lub nowsze.
- Segmentacja DMZ i WAF z regułą blokującą wrażliwy URI.
- FIM katalogów pluginów i podpisywanie komponentów (jeśli możliwe).
- Przeglądy audit logów UPM i retencja logów aplikacyjnych.
- Procedury IR: izolacja, backup artefaktów, rotacja sekretów systemów zintegrowanych (AD/LDAP/M365).
Status vendor: aktualizacja opublikowana 22 maja 2019; patche dostępne dla linii 3.0.x–3.4.x; problem jest ujęty w KEV.