
TL;DR
CVE‑2021‑26829 to stored XSS w ScadaBR pozwalający zapisać złośliwy JavaScript w ustawieniach systemu (system_settings.shtm). W praktyce bywa wykorzystywany do deface’u HMI, manipulacji widokiem oraz wyłączania logów/alertów – CISA dodała go do KEV z dowodami aktywnej eksploatacji. Monitoruj żądania do /ScadaBR/system_settings.shtm z podejrzanymi ładunkami (<script, onerror=, javascript:), alarmuj zmiany konfiguracji/alarms, egzekwuj WAF/IPS i ogranicz ekspozycję HMI.
Krótka definicja techniczna
Stored XSS w ScadaBR polega na zapisaniu złośliwego kodu JS (np. w polu opisu/ustawień), który uruchamia się w przeglądarce operatora przy otwarciu strony. Wektor według NVD: AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N, co oznacza atak z sieci, niski nakład, wymagane niskie uprawnienia i interakcja użytkownika; wpływ dotyczy gł. poufności i integralności.
Gdzie występuje / przykłady platform
- Windows / Linux: ScadaBR (HMI/SCADA) uruchamiane zwykle na Apache Tomcat (aplikacja Java/JSP).
- Środowiska OT/ICS: panele HMI, wizualizacja procesu, często błędnie wystawiane do Internetu lub z dostępem zdalnym. (Mapowanie ATT&CK ICS poniżej).
- Ślady/logi: logi Tomcata (localhost_access_log*.txt, catalina.out) oraz logi WAF/IPS/proxy.
Szczegółowy opis techniki (jak działa, cele, skuteczność)
Atakujący z niskimi uprawnieniami loguje się do ScadaBR (często z domyślnymi danymi) i wprowadza payload JS w polach renderowanych później w interfejsie (np. opis na stronie ustawień systemu). Gdy operator otwiera stronę (system_settings.shtm), przeglądarka wykonuje złośliwy skrypt, co pozwala m.in. na deface, manipulację widokiem, kradzież sesji (jeśli brak HttpOnly), czy uruchamianie akcji w imieniu operatora (CSRF‑like). W prawdziwym incydencie 2025 r. (honeypot OT) operatorzy Forescout obserwowali: deface loginu („Hacked by …”), usuwanie źródeł PLC, zmianę setpointów i wyłączenie logów/alarmów – część działań zrealizowano właśnie przez możliwość uruchomienia skryptu w HMI.
Artefakty i logi (co i gdzie szukać)
| Tomcat AccessLog | Żądania do */ScadaBR/system_settings.shtm* z ładunkami "<script", "%3Cscript", onerror=, javascript: | localhost_access_log.YYYY-MM-DD.txt (AccessLogValve) | Warto monitorować status/bytes oraz Referer/User‑Agent. |
| Tomcat catalina.out | Błędy JSP/stacktrace po wpisaniu HTML/JS (walidacja), restart kontekstu | Linux: /var/log/tomcat*/catalina.out; Windows: ...\Tomcat\logs\ | Ścieżki zależne od OS/pakietu. |
| Log aplikacji ScadaBR | Zmiany ustawień/konfiguracji, operacje na HMI (np. System Settings updated) | typowo w katalogu aplikacji (np. mango.log) | Nazwy różne; w projektach ScadaBR/Mango spotyka się mango.log. |
| WAF/IPS/Proxy | Reguły XSS, signatures na <script>, svg/onload, javascript: | AWS WAF, Azure WAF, ModSecurity | Dobre do szybkiej blokady (virtual patching). |
| Windows EID (host HMI) | 5156 (WFP – dopuszczenie HTTP/8080), 4624 (logon serwisu), 4688 (nietypowe procesy od Tomcata) | Dzienniki zabezpieczeń | Pośrednie – nie wykryją XSS, ale korelują późniejsze skutki. |
| CloudTrail | N/D (brak bezpośrednich zdarzeń) – zamiast tego: AWS WAF / ALB/CloudFront logi | CloudWatch Logs / S3 | Użyj Insights/Athena do zapytań (patrz sekcja 7). |
| K8s Audit | Zmiany Ingress/ConfigMap/Secret dot. publicznej ekspozycji HMI | kube-apiserver-audit.log | Pośrednio – redukcja ekspozycji na T1190. |
| M365 | N/D | — | Brak związku funkcjonalnego. |
Detekcja (praktyczne reguły)
Sigma (webserver)
title: ScadaBR system_settings.shtm Stored XSS Attempt id: 7b7a1a6b-0d7a-4c1b-9a78-7a8d9b7f4f21 status: experimental description: Wykrywa próby XSS na stronie /ScadaBR/system_settings.shtm logsource: category: webserver detection: target: cs-uri-stem|contains: "/ScadaBR/system_settings.shtm" payload_query: cs-uri-query|contains: - "<script" - "%3Cscript" - "onerror=" - "onload=" - "javascript:" payload_body: request_body|contains: - "<script" - "%3Csvg%20onload" condition: target and (payload_query or payload_body) fields: - src_ip - http_method - status - cs-useragent - cs-referrer falsepositives: - testy administratorów/HMI z dozwolonym HTML (rzadkie) level: high tags: - attack.T1491.001 - attack.T1190 - ics.T0838Splunk (SPL)
index=web sourcetype IN ("tomcat:access","apache:access","nginx:access") uri_path="/ScadaBR/system_settings.shtm" | eval q=coalesce(uri_query,request_body) | where like(q,"%<script%") OR like(q,"%onerror=%") OR like(q,"%javascript:%") OR like(q,"%<svg%onload%") OR like(q,"%25%33%43script%") /* %3Cscript */ | stats count min(_time) max(_time) by src_ip, http_method, status, useragent, uri_query, request_bodyKQL (Azure / CEF w Sentinel)
CommonSecurityLog | where RequestURL has "/ScadaBR/system_settings.shtm" | where RequestURL contains "<script" or RequestURL contains "%3Cscript" or RequestURL contains "onerror=" or RequestURL contains "javascript:" | summarize cnt=count() by SourceIP, RequestMethod, RequestURL, DeviceVendor, bin(TimeGenerated, 5m)AWS — CloudWatch Logs Insights (AWS WAF)
fields @timestamp, httpRequest.clientIp as src_ip, httpRequest.uri, httpRequest.args, httpRequest.httpMethod as method, action, terminatingRuleId | filter httpRequest.uri like /\/ScadaBR\/system_settings\.shtm/ | filter httpRequest.args like /(<script|%3[cC]script|onerror=|javascript:)/ | stats count() by src_ip, method, httpRequest.uri, action, terminatingRuleId, bin(@timestamp, 5m)Elastic (Kibana KQL)
(event.dataset:"tomcat.access" OR event.dataset:"apache.access" OR event.dataset:"nginx.access") AND url.path:"/ScadaBR/system_settings.shtm" AND (url.query:*"<script"* OR url.query:"*%3Cscript*" OR http.request.body.content:*"onerror="* OR url.full:*"javascript:"*)Heurystyki / korelacje
- Korelacja łańcucha: logowanie na HMI (często domyślne hasła) → zapis HTML/JS → nagłe wyłączenie alarmów/logów → deface/modyfikacje setpointów. (Mapuj: T1078 → T1491.001 → T0838/T0831).
- User‑Agent / automaty: python-requests/nietypowe UA w krótkich odstępach vs sesje interaktywne operatorów. (por. obserwacje honeypota).
- Źródła IP: hostingi/VPS (np. wzorce z raportu o TwoNet) + brak historycznego ruchu do HMI.
- Anomalie konfiguracji: alerty na nagłe serie zmian ustawień HMI (alarmy, źródła PLC, opisy).
False positives / tuning
- Administracyjne testy UI (rzadkie) – białe listy źródeł admina i godzin zmian; dopuszczalne są proste tagi HTML (np. <b>), ale nie script/onerror/javascript: – filtruj regexem.
- Skrypty monitoringu generujące 4xx na ścieżce – odfiltrować status ≠ 200/302 dla attempt vs success.
- Proxy zdrowia – wykluczyć User-Agent health‑checks.
Playbook reagowania (IR)
- Triage & containment
- Odłącz publiczną ekspozycję HMI / ogranicz do VPN/allowlist (NGFW/WAF block reguły XSS).
- Wymuś log‑out wszystkich sesji ScadaBR; reset haseł i wyłącz konta nieznane (T1078).
- Analiza
- Przejrzyj AccessLogValve i catalina.out pod kątem żądań do /ScadaBR/system_settings.shtm z ładunkami XSS.
- Zrzut bazy ScadaBR i skan na <script (przykład MySQL — lab only): SELECT table_schema, table_name, column_name FROM information_schema.columns WHERE data_type IN ('text','varchar') AND table_schema LIKE 'scadabr%'; -- Dla każdej tabeli/kolumny tekstowej: SELECT * FROM <tbl> WHERE <col> LIKE '%<script%';
- Zweryfikuj zmiany alarmów/setpointów (T0838/T0831) i kont z ostatnich 24–72 h.
- Eradykacja & naprawa
- Usuń payloady z pól UI, przywróć konfigurację alarmów i źródeł PLC z backupu.
- Ustaw CSP, HttpOnly/Secure dla sesji, walidację/encoding pól (Server‑side).
- Zaktualizuj ScadaBR/Tomcat/JDK, włącz WAF reguły XSS (virtual patch).
- Lessons learned
- Zmiana architektury dostępu (Zero Trust, segmentacja OT/DMZ).
Przykłady z kampanii / case studies
- Honeypot OT (2025): napastnik (grupa TwoNet) zalogował się (m.in. domyślne poświadczenia), następnie wykorzystał CVE‑2021‑26829 do deface’u strony logowania (alert JS), usunął źródła PLC, zmienił parametry i wyłączył logi/alerty. Brak prób eskalacji na hosta – nacisk na warstwę HMI.
- KEV: CISA formalnie dodała podatność do katalogu 11/28/2025 z wymaganiem zastosowania mitigacji/wycofania produktu do 12/19/2025.
Lab (bezpieczne testy)
Wyłącznie w odizolowanym środowisku testowym. Celem jest sprawdzenie detekcji/logowania, nie eksploatacja środowisk produkcyjnych.
- Szybki generator logów Tomcata (bez prawdziwego ScadaBR):
- Weryfikacja logów: sprawdź localhost_access_log*.txt/catalina.out i uruchom reguły z sekcji 7.
- WAF: o ile masz AWS WAF w labie, prześlij ruch przez ALB/CloudFront i uruchom Insights zapytanie (sekcja 7).
Mapowania (Mitigations, powiązane techniki)
Mitigations (ATT&CK Enterprise):
- M1050 – Exploit Protection (IPS/WAF, wirtualne łatanie XSS; OS exploit guard).
- M1048 – Application Isolation and Sandboxing (utwardzenie przeglądarek/odseparowanie stacji HMI).
- M1030 – Network Segmentation (DMZ/Jump Host dla HMI/OT).
- M1054 – Software Configuration (wyłączenie niepotrzebnych funkcji, poprawne encoding/validate).
- M1042 – Disable or Remove Feature or Program (usunięcie nieużywanych modułów/komponentów web).
Powiązane techniki:
- T1491.001 – Internal Defacement (efekt XSS w HMI).
- T0838 – Modify Alarm Settings (wyciszanie alarmów po wejściu do HMI).
- T0831 – Manipulation of Control (zmiany setpointów).
- T1190 – Exploit Public‑Facing Application (gdy HMI jest dostępne publicznie).
- T1078 – Valid Accounts (domyślne hasła).
Źródła / dalsza lektura
- NVD – CVE‑2021‑26829 (opis, CVSS 3.1, KEV meta). (NVD)
- CVE.org – rekord CVE (skrót opisu). (CVE)
- CISA – KEV Catalog (wpis CVE‑2021‑26829). (CISA)
- MITRE ATT&CK – T1491.001; T0838; T0831; T1190; aktualizacja v18. (MITRE ATT&CK)
- Tomcat – AccessLogValve / logi (konfiguracja/ścieżki). (tomcat.apache.org)
Checklisty dla SOC / CISO
SOC
- Alerty na /ScadaBR/system_settings.shtm + wzorce XSS (<script, %3Cscript, onerror=, javascript:).
- Korelacja: zmiany ustawień HMI + wyciszenie alarmów (T0838) + deface (T1491.001).
- Blokada w WAF/IPS, reguły virtual patch dla XSS. (M1050)
- Telemetria z Tomcata (AccessLogValve) do SIEM; parsowanie pól zapytań/ciała.
- Hunt: nietypowe UA, źródła VPS/hosting, krótkie sesje z wieloma POST/GET.
CISO / OT Lead
- Eliminacja publicznej ekspozycji HMI (VPN/ZTNA, segmentacja OT). (M1030)
- Domyślne hasła → wyłączone, MFA gdzie możliwe. (T1078)
- Polityka aktualizacji ScadaBR/Tomcat/JDK; hardening CSP/HttpOnly/SameSite. (M1054)
- Testy kontrolne: tabletop + lab z logami (sekcja 12).
- Zgodność z CISA KEV – potwierdź wdrożenie mitigacji do 2025‑12‑19.
