CVE-2019-11580 — Atlassian Crowd/Crowd Data Center RCE przez pdkinstall - Security Bez Tabu

CVE-2019-11580 — Atlassian Crowd/Crowd Data Center RCE przez pdkinstall

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łoEID / typCo 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 sukcesemEndpoint potwierdzony w analizach; logi WAF/ALB/AGW zawierają URI/metodę.
Aplikacja Crowd (atlassian-crowd.log)log4jWpisy dot. instalacji/ładowania pluginów, błędów UPM, wyjątków OSGiLokalizacja/konfiguracja logów Crowd.
Tomcat (catalina.out)logNiespodziewane błędy serwletów/przeładowanie klas tuż po podejrzanym żądaniuCrowd loguje zarówno do własnego logu, jak i Tomcata.
Windows4688 (Process Create), 7045 (Service Install), Sysmon 1/3/11ParentImage=java.exe uruchamia cmd.exe/powershell.exe, sieć wychodząca, tworzenie JAR w katalogach pluginówKorelować z czasem żądań HTTP
Linuxauditd EXECVE / EDRPPID=java uruchamia /bin/sh, curl/wget, „reverse shell” artefakty
K8s (jeśli Crowd w K8s)Ingress/Nginx accessURI jak wyżej; wzrost 5xx; nietypowe źródła
AWSWAF/ALB logs (CloudWatch/S3)httpRequest.uri zawiera ścieżkę; metoda POSTCloudWatch Logs Insights/Athena do analizy
AzureApp Gateway/WAFrequestUri_s zawiera ścieżkę; httpMethod_s = POSTDane w AzureDiagnostics
M365nie dotyczy bezpośrednioCrowd integruje się z M365/IdP, ale luka jest po stronie Crowd
CloudTrailnie 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ście java uruchamia sh/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 .jar w katalogach pluginów Crowd; nagłe zmiany w atlassian-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.

  1. 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.
  2. 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).
  3. Zachowanie dowodów
    • Zrzut logów: web, atlassian-crowd.log, catalina.out; snapshot VM.
    • Hash/backup katalogów pluginów.
  4. Ł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.
  5. 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-plugin z instalacji i bundla (instrukcja vendor).
    • Usuń nieznane pluginy, przywróć baseline, zrestartuj usługę (kontrolując logi po starcie).
  6. Odzyskiwanie i weryfikacja
    • Testy funkcjonalne, monitorowanie podwyższone przez 7–14 dni, rotacja haseł/kluczy używanych przez Crowd (integracje AD/LDAP).
  7. 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.

  1. 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
  1. 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
  1. 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-plugin i 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: javash/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.