CVE-2019-18935 — Progress Telerik UI for ASP.NET AJAX RCE (RadAsyncUpload / .NET deserialization)

securitybeztabu.pl 4 godzin temu

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, iż ruch do ...WebResource.axd?type=rau jest wart analizy.
Windows SecurityProcesy potomne w3wp.exe → cmd.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 przez cały czas 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, iż 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.
Idź do oryginalnego materiału