Archiwa: NIST - Strona 28 z 38 - Security Bez Tabu

CVE-2025-7775: CISA dodaje krytyczną lukę Citrix NetScaler do katalogu KEV — co to oznacza i jak się zabezpieczyć

Wprowadzenie do problemu / definicja luki

CVE-2025-7775 to krytyczna podatność typu memory overflow w urządzeniach Citrix NetScaler ADC i NetScaler Gateway, która może prowadzić do zdalnego wykonania kodu (RCE) i/lub odmowy usługi (DoS). Podatność została uznana za aktywnie wykorzystywaną w atakach, co było podstawą do dodania jej do katalogu Known Exploited Vulnerabilities (KEV).

W praktyce oznacza to, że temat nie jest „teoretyczny” — organizacje utrzymujące NetScaler na brzegu sieci (VPN/AAA/Gateway) powinny traktować tę lukę jako pilną.


W skrócie

  • Co: CVE-2025-7775 (memory overflow → RCE/DoS) w Citrix NetScaler ADC/Gateway.
  • Dlaczego ważne: Citrix potwierdził obserwacje exploitacji na niezałatanych urządzeniach.
  • Kiedy: wpis w KEV ma „date added” 2025-08-26, a w metadanych KEV pojawia się termin wymaganych działań dla agencji federalnych 2025-08-28 (to dobry wskaźnik pilności także dla sektora komercyjnego).
  • Co zrobić: aktualizacja do wskazanych buildów (m.in. 14.1-47.48+, 13.1-59.22+) — Citrix nie podaje obejść/mitigacji jako alternatywy dla patcha.

Kontekst / historia / powiązania

NetScaler (dawniej Citrix ADC/Gateway) jest częstym celem, bo zwykle działa jako element wystawiony na internet: VPN, brama aplikacyjna, AAA, load balancing. W tym przypadku Citrix opublikował biuletyn obejmujący trzy podatności (CVE-2025-7775/7776/8424), ale to CVE-2025-7775 wyróżnia się statusem „exploited in the wild”.

Kanadyjskie Cyber Centre opublikowało alert z zaleceniami aktualizacji i wprost przytacza, że exploitation CVE-2025-7775 była obserwowana przeciwko niezałatanym urządzeniom.


Analiza techniczna / szczegóły luki

Charakter podatności: memory overflow (CWE-119) z możliwym skutkiem RCE i/lub DoS. Wektor CVSS v4.0 po stronie CNA (Citrix) wskazuje ocenę 9.2 (Critical).

Kiedy urządzenie może być podatne (warunki / pre-conditions): według Citrix i NVD, ryzyko dotyczy m.in. konfiguracji:

  • NetScaler jako Gateway (VPN vserver, ICA Proxy, CVPN, RDP Proxy) lub AAA virtual server.
  • Określonych scenariuszy LB z IPv6 (typy vserver: HTTP/SSL/HTTP_QUIC) oraz pewnych konfiguracji DBS IPv6.
  • CR vserver typu HDX.

Wersje dotknięte i poprawione: Citrix wskazuje, że podatne są wspierane linie (m.in. 14.1 i 13.1) przed konkretnymi buildami, a poprawki są w:

  • 14.1 od 14.1-47.48 wzwyż
  • 13.1 od 13.1-59.22 wzwyż
  • oraz odpowiednie wydania FIPS/NDcPP (13.1-37.241+, 12.1-55.330+)

Ważne: Citrix podaje brak obejść/mitigacji („None”) — co w praktyce oznacza, że strategia „tymczasowo coś przestawimy” może nie wystarczyć.


Praktyczne konsekwencje / ryzyko

Najczęstsze scenariusze ryzyka dla NetScaler na brzegu sieci:

  • Przejęcie urządzenia brzegowego (jeśli exploit prowadzi do RCE), co może stać się punktem wejścia do sieci wewnętrznej.
  • DoS wobec krytycznych usług zdalnego dostępu (VPN/ICA/AAA), z realnym wpływem na ciągłość działania.
  • Ryzyko wtórne: kradzież sesji, pivoting, trwała obecność (np. webshell/backdoor) — szczególnie gdy urządzenie jest elementem infrastruktury dostępowej.

W samym wpisie KEV metadane (widoczne przez NVD) podbijają pilność: podatność ma status „known exploited”, z terminem wymaganych działań dla administracji federalnej USA. To zwykle koreluje z szybkim upowszechnianiem skanerów i prób wykorzystania w internecie.


Rekomendacje operacyjne / co zrobić teraz

  1. Zidentyfikuj ekspozycję i konfigurację
    • Sprawdź, czy NetScaler pełni role Gateway/AAA/LB(IPv6)/HDX — Citrix podaje przykładowe frazy/linie konfiguracyjne, po których można to rozpoznać (np. definicje add vpn vserver, add authentication vserver, itd.).
  2. Zaplanuj i wykonaj aktualizację do buildów naprawionych
    • Priorytetowo traktuj urządzenia wystawione na internet oraz te obsługujące zdalny dostęp. Kieruj się listą rekomendowanych wersji z biuletynu Citrix / alertu Cyber Centre.
  3. Usuń dług technologiczny (EOL)
    • Jeżeli masz jeszcze linie uznane za EOL, migracja na wspierane wersje staje się elementem redukcji ryzyka (bez wsparcia nie ma realnej ścieżki patchowania).
  4. Wzmocnij monitoring po aktualizacji
    • Ponieważ exploitacja była obserwowana „in the wild”, podejdź do tego jak do incydentu: przegląd logów, nietypowych procesów/zadań, zmian w konfiguracji, anomalii w ruchu do interfejsów zarządzania i usług bramy. (Same IOC/TTP są zależne od kampanii, ale minimum to „czy ktoś był przede mną?”).

Różnice / porównania z innymi przypadkami

Warto odróżnić CVE-2025-7775 (memory overflow → potencjalnie RCE/DoS) od głośnych klas podatności w NetScaler, które bywały „bardziej pasywne” (np. memory overread prowadzący głównie do ujawnienia danych/sesji). Dla przykładu, CVE-2025-5777 w NVD opisano jako problem walidacji wejścia prowadzący do memory overread w określonych konfiguracjach Gateway/AAA.

Konsekwencja praktyczna: overflowy/RCE zwykle wymagają bardziej zdecydowanej reakcji, bo stawką jest nie tylko wyciek, ale też potencjalne przejęcie kontrolowane przez atakującego.


Podsumowanie / kluczowe wnioski

  • CVE-2025-7775 to krytyczna luka NetScaler z realną exploitacją i potencjalnym skutkiem RCE/DoS.
  • Nie ma obejść wskazanych przez producenta — podstawą jest upgrade do naprawionych buildów.
  • Dodanie do KEV (widoczne w metadanych NVD) to sygnał „patch natychmiast”, szczególnie dla instancji brzegowych.
  • Po aktualizacji potraktuj temat jak „możliwy pre-breach”: wykonaj szybkie działania weryfikujące, czy urządzenie nie zostało już naruszone.

Źródła / bibliografia

  • Citrix / Cloud Software Group — NetScaler ADC and NetScaler Gateway Security Bulletin (CTX694938). (support.citrix.com)
  • NIST NVD — CVE-2025-7775 (opis + metadane KEV: date added, due date, required action). (NVD)
  • Canadian Centre for Cyber Security — alert AL25-011 dot. CVE-2025-7775/7776/8424 i zalecanych wersji. (Canadian Centre for Cyber Security)
  • Rapid7 — wpis „ETR” o CVE-2025-7775 i kontekście exploitacji. (Rapid7)
  • NIST NVD — CVE-2025-5777 (porównanie klasy: memory overread). (NVD)

Zero-day w WatchGuard Firebox: CVE-2025-14733 aktywnie wykorzystywana do ataków na VPN IKEv2

Wprowadzenie do problemu / definicja luki

Pod koniec grudnia 2025 r. WatchGuard potwierdził aktywne próby wykorzystania krytycznej podatności typu out-of-bounds write w procesie iked systemu Fireware OS (urządzenia Firebox). Luka, oznaczona jako CVE-2025-14733, umożliwia zdalne wykonanie kodu (RCE) bez uwierzytelnienia w kontekście usług VPN opartych o IKEv2.

W praktyce oznacza to klasyczny scenariusz „edge device takeover”: atakujący celują w urządzenie brzegowe (firewall/VPN), które często stoi na styku Internetu i sieci wewnętrznej.


W skrócie

  • CVE: CVE-2025-14733
  • Typ: out-of-bounds write → RCE bez uwierzytelnienia
  • Komponent: Fireware OS iked (negocjacje IKE/IPsec)
  • Warunek ekspozycji: konfiguracje Mobile User VPN (IKEv2) lub BOVPN (IKEv2) z dynamic gateway peer
  • Status: obserwowane próby eksploatacji „w naturze” + opis aktywności post-exploit (eksfil konfiguracji/DB użytkowników)
  • Naprawa: aktualizacja do wersji zawierających poprawkę (m.in. 2025.1.4, 12.11.6, 12.5.15, 12.3.1 Update 4)
  • Ryzyko: przejęcie firewalla, kradzież sekretów/tuneli, pivot do sieci LAN

Kontekst / historia / powiązania

Z perspektywy trendów to kolejny przykład nasilonych działań przeciwko urządzeniom brzegowym. Dark Reading wskazuje, że WatchGuard dołącza do listy vendorów atakowanych w ostatnich tygodniach w ramach szerszej fali kampanii wymierzonych w edge networking i „wystawioną” infrastrukturę wielu producentów.

Istotne jest też tempo eskalacji: WatchGuard opublikował informacje i poprawki 18 grudnia 2025, a advisory był następnie aktualizowany (m.in. 23 grudnia 2025) o obserwacje dotyczące aktywności po udanej eksploatacji.


Analiza techniczna / szczegóły luki

Co jest podatne?

CVE-2025-14733 dotyczy błędu out-of-bounds write w procesie iked. Występuje w scenariuszach, gdy urządzenie obsługuje IKEv2 dla:

  • Mobile User VPN z IKEv2, oraz/lub
  • Branch Office VPN (BOVPN) z IKEv2 skonfigurowanym jako dynamic gateway peer.

Uwaga praktyczna: WatchGuard podkreśla, że nawet jeśli konfiguracje IKEv2 „dynamic” zostały usunięte, urządzenie może pozostać podatne w określonych konfiguracjach BOVPN (scenariusz „było kiedyś włączone + zmiany konfiguracji”).

Skala i ocena podatności

NVD pokazuje krytyczną ocenę (m.in. CVSS 3.1: 9.8 CRITICAL).

Co robi atakujący po uzyskaniu dostępu?

W zaktualizowanym advisory WatchGuard opisuje dwa zaobserwowane warianty aktywności post-exploit:

  1. Szyfrowanie i eksfiltracja aktywnej konfiguracji Fireboxa do adresu IP, z którego pochodzi atak.
  2. Utworzenie archiwum gzip zawierającego aktywną konfigurację + lokalną bazę użytkowników zarządzania i eksfiltracja (również do IP źródłowego).

To ważny sygnał: nawet „jednorazowe” przejęcie urządzenia brzegowego ma wartość, bo konfiguracje zawierają klucze, hasła, PSK, certyfikaty, definicje tuneli, adresacje i reguły.

Wskaźniki ataku (IoA/IoC) – co w logach i na urządzeniu

WatchGuard publikuje m.in. listę adresów IP powiązanych z aktywnością oraz wzorce logów/objawów:

  • przykładowe IP (IoC) powiązane z działaniami napastników (NCSC NZ cytuje tę samą listę):
    45.95.19[.]50, 51.15.17[.]89, 172.93.107[.]67, 199.247.7[.]82
  • symptomy na urządzeniu: zawieszenie iked (silny wskaźnik) lub crash iked (słabszy wskaźnik) oraz charakterystyczne komunikaty diagnostyczne IKE.

Praktyczne konsekwencje / ryzyko

Najbardziej realistyczne skutki biznesowe/operacyjne:

  • Pełne przejęcie firewalla/VPN (RCE bez auth) i kontrola nad ruchem brzegowym.
  • Kradzież konfiguracji i sekretów: PSK, hasła, klucze, certyfikaty, konta adminów, definicje tuneli (co ułatwia dalsze włamania).
  • Pivot do sieci wewnętrznej: urządzenie brzegowe bywa „najlepszym” punktem do lateral movement.
  • Trudność detekcji: objawy mogą wyglądać jak „problemy VPN”, a nie kompromitacja (np. hang iked i przerwane renegocjacje).

Dodatkowo NVD odnotowuje, że podatność trafiła do kategorii znanych aktywnie wykorzystywanych (KEV), z terminem działań (dla podmiotów objętych wymaganiami) ustawionym na 26 grudnia 2025 — co jest mocnym sygnałem priorytetu.


Rekomendacje operacyjne / co zrobić teraz

Priorytet 1: Patch management (natychmiast)

Docelowo aktualizuj do wersji zawierających poprawkę:

  • Fireware 2025.1.4
  • Fireware 12.11.6
  • Fireware 12.5.15 (dla modeli T15/T35)
  • Fireware 12.3.1 Update 4 (release FIPS)

11.x jest EOL — jeśli masz ten branch, planuj upgrade (software/hardware) jako działanie „awaryjne”, bo samo „łatam później” nie zadziała.

Priorytet 2: Incident response (jeśli urządzenie było wystawione)

Jeśli podejrzewasz udaną eksploatację lub widzisz IoA/IoC:

  • wykonaj działania naprawcze wg advisory,
  • rotuj wszystkie sekrety przechowywane lokalnie na Fireboxie (PSK, hasła, klucze/certyfikaty użyte w tunelach, konta lokalne, integracje).

Priorytet 3: Twarde ograniczenie ekspozycji IKEv2 (defense-in-depth)

Nawet po aktualizacji warto:

  • ograniczyć ekspozycję IKEv2 do wymaganych źródeł (allowlist IP partnerów/BOVPN),
  • monitorować stabilność procesu iked (crash/hang jako sygnał SOC),
  • wdrożyć alerty na nietypowe logi IKE i ruch wychodzący do IoC.

Workaround (tylko jeśli nie możesz patchować „tu i teraz”)

WatchGuard wskazuje tymczasową ścieżkę dla środowisk, które używają wyłącznie BOVPN do static gateway peers i nie mogą natychmiast wdrożyć poprawki — zgodnie z ich rekomendacjami „Secure Access…” dla IPSec/IKEv2. Traktuj to jako pomost, nie docelowe rozwiązanie.


Różnice / porównania z innymi przypadkami

To zdarzenie ma typowy profil „edge zero-day”, ale wyróżniają je dwie rzeczy:

  1. Powiązanie z IKEv2 i iked – czyli newralgiczny komponent, który z definicji musi przyjmować ruch z Internetu, często zanim dojdzie do jakiejkolwiek „sensownej” autoryzacji na poziomie aplikacyjnym.
  2. Opis post-exploit nastawiony na kradzież konfiguracji i bazy użytkowników – co sugeruje, że dla atakujących wartością jest szybkie pozyskanie sekretów i materiału do dalszych operacji (np. przejęcia tuneli, dostępu do sieci partnerów, kolejnych urządzeń).

W szerszym kontekście grudnia 2025 Dark Reading wiąże te zdarzenia z falą ataków na urządzenia brzegowe wielu producentów — co podnosi ryzyko masowego skanowania i „sprayowania” exploitów w Internet.


Podsumowanie / kluczowe wnioski

  • CVE-2025-14733 to krytyczna podatność RCE bez auth w WatchGuard Firebox / Fireware OS iked, realnie wykorzystywana przez threat actorów.
  • Jeśli Twoja organizacja używa IKEv2 (szczególnie dynamic gateway peer) na brzegu — traktuj temat jako P1.
  • Po patchu nie kończy się praca: ze względu na eksfil konfiguracji trzeba założyć konieczność rotacji sekretów przy podejrzeniu incydentu.
  • Dla środowisk na 11.x (EOL) to sygnał, że „legacy edge” staje się ryzykiem nieakceptowalnym.

Źródła / bibliografia

  1. Dark Reading – „Threat Actors Exploit Zero-Day in WatchGuard Firebox Devices” (22.12.2025). (Dark Reading)
  2. WatchGuard PSIRT – WGSA-2025-00027 (advisory, aktualizacje m.in. 23.12.2025). (watchguard.com)
  3. WatchGuard Blog – „Immediate Action Required – Update Your Firebox Now” (18.12.2025). (watchguard.com)
  4. NVD (NIST) – CVE-2025-14733 (metryki CVSS, status i kontekst KEV). (NVD)
  5. NCSC New Zealand – alert „CVE-2025-14733 affecting Watchguard Fireware OS” (23.12.2025). (NCSC NZ)

Obserwowane nadużycia FG-IR-19-283 (CVE-2020-12812): jak „zmiana wielkości liter” może ominąć 2FA w FortiOS SSL VPN

Wprowadzenie do problemu / definicja luki

Fortinet opublikował 24 grudnia 2025 analizę incydentową, w której potwierdza zaobserwowane nadużycia starszej podatności FG-IR-19-283 / CVE-2020-12812 w środowiskach produkcyjnych — ale tylko tam, gdzie występują określone konfiguracje uwierzytelniania (FortiGate + LDAP + 2FA).

Sedno problemu jest podstępnie proste: FortiGate domyślnie traktuje nazwę użytkownika jako case-sensitive, podczas gdy katalog LDAP/AD często nie. To otwiera drogę do obejścia wymuszenia 2FA przez użycie innej wielkości liter w loginie (np. jsmith vs JSmith).


W skrócie

  • Podatność: CVE-2020-12812 / FG-IR-19-283 (FortiOS SSL VPN; scenariusz obejścia 2FA).
  • Mechanizm nadużycia: zmiana wielkości liter w nazwie użytkownika powoduje, że FortiGate nie dopasowuje konta lokalnego (z 2FA), po czym może „spaść” na uwierzytelnienie LDAP (bez 2FA) przez polityki/grupy.
  • Status: Fortinet wskazuje na aktywnie obserwowane nadużycia w 2025 r. (w konkretnych konfiguracjach).
  • Priorytet działań: jeśli podejrzewasz wykorzystanie — traktuj konfigurację jako skompromitowaną i resetuj poświadczenia (w tym bind do LDAP/AD).

Kontekst / historia / powiązania

CVE-2020-12812 została ujawniona w 2020 r. i dotyczy nieprawidłowego uwierzytelniania w kontekście SSL VPN. Opis podatności i dotknięte wersje FortiOS są ujęte m.in. w NVD.

Co ważne, problem „perymetrowych” luk w FortiOS SSL VPN był już wcześniej elementem kampanii skanowania i eksploatacji: kanadyjskie Cyber Centre (w nawiązaniu do ostrzeżeń CISA/FBI) wskazywało, że aktorzy APT wykorzystywali podatności Fortinet (w tym CVE-2020-12812) do uzyskania dostępu i pozycjonowania się w sieciach wielu sektorów.

Dodatkowo NVD zaznacza, że CVE-2020-12812 znajduje się w katalogu CISA KEV (Known Exploited Vulnerabilities), co jest silnym sygnałem operacyjnym: luka ma historię realnego wykorzystania i powinna być traktowana priorytetowo.


Analiza techniczna / szczegóły luki

Warunki konieczne (najczęściej pomijane w ocenie ryzyka)

Fortinet bardzo wyraźnie zaznacza, że skuteczne nadużycie wymaga konkretnego układu konfiguracji:

  1. Lokalne konta użytkowników na FortiGate z włączonym 2FA, które jednocześnie „odsyłają” do LDAP.
  2. Ci sami użytkownicy są członkami grup na serwerze LDAP/AD.
  3. Co najmniej jedna z tych grup LDAP jest skonfigurowana na FortiGate i użyta w polityce uwierzytelniania (np. admin, SSL VPN lub IPsec VPN).

Jak wygląda obejście 2FA krok po kroku

W uproszczeniu:

  • Użytkownik loguje się jako jsmith → pasuje do lokalnego wpisu → FortiGate wymusza token/2FA.
  • Użytkownik loguje się jako JSmith / jSmith itd. → brak dopasowania do lokalnego wpisu (case-sensitive) → FortiGate sprawdza alternatywne ścieżki uwierzytelnienia (np. przez grupę LDAP używaną w polityce).
  • Jeśli polityka/grupa LDAP „złapie” użytkownika, a hasło jest poprawne, uwierzytelnienie kończy się sukcesem bez 2FA, nawet gdy lokalny profil miał 2FA lub konto było wyłączone (w zależności od scenariusza i polityk).

Wersje i „łatka konfiguracyjna”

Fortinet wskazuje, że mechanizmy ograniczające to zachowanie wprowadzono w ramach poprawek dla linii m.in. 6.0.10 / 6.2.4 / 6.4.1 (i nowszych), a jako kluczową konfigurację podaje wyłączenie wrażliwości na wielkość liter w nazwie użytkownika:

  • starsze: set username-case-sensitivity disable
  • nowsze: set username-sensitivity disable

Praktyczne konsekwencje / ryzyko

Najbardziej krytyczny efekt biznesowy to ominięcie wymuszenia 2FA dla dostępu zdalnego (SSL VPN) lub nawet dla dostępu administracyjnego — jeżeli taka ścieżka istnieje w politykach.

Fortinet ostrzega też wprost: jeśli doszło do takiego scenariusza uwierzytelnienia, należy założyć kompromitację i zresetować poświadczenia, włącznie z danymi używanymi do LDAP/AD binding.

Warto też pamiętać o sygnale z NVD: CVE-2020-12812 ma przypisany CVSS 3.1 9.8 (Critical) w NVD, a jednocześnie w praktyce jej „realna” wykonalność jest silnie zależna od konfiguracji — co często prowadzi do błędnego uspokajania ryzyka w organizacjach („u nas to nie działa”).


Rekomendacje operacyjne / co zrobić teraz

  1. Zweryfikuj warunki podatności w konfiguracji
    • Czy masz lokalne konta z 2FA powiązane z LDAP?
    • Czy masz skonfigurowane grupy LDAP używane w politykach SSL VPN / admin / IPsec?
    • Czy istnieje „secondary/fallback” scenariusz LDAP, który przejmuje autoryzację, gdy lokalny wpis nie pasuje?
  2. Wprowadź ustawienie unifikujące nazwy użytkowników
    • Zastosuj rekomendowane przez Fortinet ustawienie username-…-sensitivity disable adekwatne do wersji FortiOS.
  3. Usuń zbędne grupy LDAP / ścieżki awaryjne
    • Fortinet podkreśla, że istotnym czynnikiem jest „misconfiguration of a secondary LDAP Group” — jeżeli nie jest wymagana, usuń ją.
  4. Higiena po incydencie (jeśli podejrzewasz nadużycie)
    • Reset haseł i sekretów: konta VPN/admin, konta serwisowe, bind do LDAP/AD.
    • Przegląd logów VPN/admin pod kątem logowań z nietypową wielkością liter (np. JSmith zamiast jsmith), anomalii geolokalizacji, nowych sesji, nowych urządzeń, nietypowych godzin.
  5. Ustal priorytet patchowania
    • Traktuj to jako priorytet, bo CVE figuruje jako znana wykorzystywana (KEV wg NVD) oraz ma potwierdzone obserwacje nadużyć w 2025 r.

Różnice / porównania z innymi przypadkami (jeśli dotyczy)

W praktyce incydenty FortiOS SSL VPN rzadko występują „w próżni”. Ostrzeżenia rządowe i branżowe z 2021 r. łączyły CVE-2020-12812 z innymi podatnościami Fortinet wykorzystywanymi do uzyskiwania dostępu i przygotowania kolejnych etapów ataku (np. eksfiltracja lub szyfrowanie). Wymieniano m.in. CVE-2018-13379 oraz CVE-2019-5591 obok CVE-2020-12812.

Różnica jest taka, że:

  • CVE-2020-12812 jest „konfiguracyjno-logiczna” i silnie zależna od tego, jak zbudowano łańcuch uwierzytelniania (lokalne konta + grupy LDAP + polityki).
  • Wiele innych luk SSL VPN historycznie bywało bardziej „bezpośrednich” (np. odczyt plików / traversal), a więc łatwiejszych do masowego skanowania.

Podsumowanie / kluczowe wnioski

  • Nie lekceważ wieku podatności: Fortinet potwierdza obserwowane nadużycia CVE-2020-12812 w 2025 r.
  • To nie jest „magiczny bypass 2FA wszędzie” — ale w określonych konfiguracjach zmiana wielkości liter w loginie może przełączyć ścieżkę uwierzytelnienia z lokalnego 2FA na LDAP bez 2FA.
  • Minimalny hardening: wyłącz wrażliwość na wielkość liter w nazwie użytkownika oraz usuń zbędne „fallback” grupy LDAP.
  • Jeżeli widzisz symptomy nadużycia: traktuj to jak kompromitację i resetuj poświadczenia, włącznie z bindami do LDAP/AD.

Źródła / bibliografia

  1. Fortinet PSIRT Blog: Product Security Advisory and Analysis: Observed Abuse of FG-IR-19-283 (24.12.2025) (Fortinet)
  2. NIST NVD: CVE-2020-12812 Detail (opis, wersje, metryki, informacja o KEV) (NVD)
  3. CVE.org: CVE-2020-12812 (rekord CVE) (cve.org)
  4. Canadian Centre for Cyber Security: Exploitation of Fortinet FortiOS vulnerabilities (CISA, FBI) – update 1 (06.04.2021 / 28.05.2021) (Canadian Centre for Cyber Security)
  5. The Hacker News: relacja o ostrzeżeniu Fortinet i aktywnych atakach (24.12.2025) (The Hacker News)

CVE-2025-14847 (MongoDB Server) — wyciek pamięci heap przez zlib w protokole MongoDB

TL;DR

CVE-2025-14847 to podatność w MongoDB Server związana z obsługą zlib w kompresji sieciowej protokołu MongoDB: niespójne pola długości w nagłówkach skompresowanych wiadomości mogą doprowadzić do zwrócenia fragmentów niezainicjalizowanej pamięci heap do klienta bez uwierzytelnienia.
Dla SOC oznacza to: jeśli instancja MongoDB jest wystawiona na Internet, atakujący może „wyciągać” z odpowiedzi wrażliwe fragmenty pamięci procesu (potencjalnie dane aplikacyjne/sekrety zależnie od tego, co akurat było w RAM). Priorytet: patch do wersji naprawionych lub czasowo usuń zlib z kompresorów.


Krótka definicja techniczna (1 akapit)

CVE-2025-14847 to błąd klasy CWE-130 polegający na niewłaściwej obsłudze niespójnych parametrów długości w zlib-compressed protocol headers MongoDB, co umożliwia zdalnemu, nieautoryzowanemu klientowi odczyt niezainicjalizowanej pamięci heap poprzez odpowiedzi serwera.


Gdzie występuje / przykłady platform (Windows, AD, AWS, Azure, GCP, K8s, ESXi, M365)

Windows (self-hosted):

  • mongod.exe/mongos.exe uruchomione jako usługa (często port 27017) — ryzyko rośnie, gdy bind/listen jest „na świat” i gdy zlib pozostaje włączony (domyślnie jest).

AD (Active Directory):

  • Bezpośrednio „nie dotyczy” (to nie jest podatność AD), ale realnie MongoDB bywa konsumowane przez aplikacje domenowe; wyciek pamięci może pośrednio ujawnić np. tokeny/sekrety aplikacyjne trzymane w RAM.

AWS (EC2 / EKS / self-managed):

  • EC2 z Security Group otwierającą 27017/27018 do 0.0.0.0/0 → klasyczny scenariusz T1190.
  • EKS: MongoDB jako StatefulSet; ekspozycja przez Service type=LoadBalancer/Ingress/NodePort zwiększa ryzyko.

Azure (VM / AKS):

  • VM z publicznym IP + NSG pozwalający na 27017; AKS analogicznie jak EKS.

GCP (Compute Engine / GKE):

  • Publiczny endpoint + reguły FW do 27017; w GKE ekspozycja przez Service LB.

Kubernetes (K8s):

  • Szczególnie ryzykowne: publiczny LoadBalancer dla MongoDB lub brak NetworkPolicy dla namespace z bazą.

ESXi:

  • Pośrednio: gdy MongoDB stoi na VM — liczą się zasady ekspozycji/segmentacji sieci, snapshoty do IR itp.

M365:

  • Zwykle „nie dotyczy” (chyba że logi/alerty spływają do Sentinel/MDE; sama podatność jest po stronie serwera MongoDB).

Ważne operacyjnie: MongoDB informował, że Atlas fleet został spatchowany i „nie ma dowodów” na wykorzystanie ani kompromitację danych klientów; dotyczy to jednak usług zarządzanych — self-hosted musi być zaktualizowany osobno.


Szczegółowy opis techniki (jak działa, cele, dlaczego jest skuteczna)

Negocjacja kompresji i dlaczego zlib ma znaczenie

MongoDB wspiera kompresję ruchu między klientem a serwerem (OP_COMPRESSED). Domyślnie zarówno mongod, jak i mongos mają ustawione kompresory sieciowe na snappy,zstd,zlib (w tej kolejności).
CVE-2025-14847 dotyczy ścieżki obsługi zlib: spreparowane (niepoprawne) nagłówki skompresowanych wiadomości z niespójnymi długościami mogą doprowadzić do sytuacji, w której serwer zwraca w odpowiedzi fragmenty niezainicjalizowanej pamięci heap.

Co realnie wycieka z heap i jak to eskaluje ryzyko

Ponieważ mowa o pamięci procesu, w praktyce „to, co wycieknie”, zależy od:

  • obciążenia bazy (zapytania/odpowiedzi, BSON, bufory),
  • bibliotek i alokacji w danym buildzie,
  • tego, co aplikacje trzymają w pamięci (np. fragmenty dokumentów, metadane sesji, czasem sekrety).

Oficjalny wektor CVSS od CNA wskazuje wysoki wpływ na poufność i brak wpływu na integralność/dostępność (C:H / I:N / A:N).

Dlaczego to pasuje do ATT&CK T1190

Jeżeli MongoDB jest publicznie wystawione (Internet-facing), to atakujący wykorzystuje błąd w usłudze nasłuchującej na gnieździe TCP — to klasyczny model Exploit Public-Facing Application (T1190) w taktyce Initial Access (nawet jeśli „efektem” jest wyciek informacji, a nie RCE).


Artefakty i logi (tabela — EID, CloudTrail events, K8s audit, M365 operations)

Obszar obserwacjiWindows EID (przykłady)CloudTrail (AWS)K8s AuditM365 operationsCo zbierać / na co patrzeć
Ekspozycja portu MongoDB (27017/27018)Sysmon EID 3 (NetworkConnect), Windows Filtering Platform 5156AuthorizeSecurityGroupIngress, ModifySecurityGroupRules, RevokeSecurityGroupIngresspatch/create Service (LoadBalancer/NodePort), Ingress, NetworkPolicyN/ASkoki nowych źródeł łączących się do 27017; ruch z Internetu do DB zamiast z warstwy app
Start procesu MongoDB i parametry ryzykaSysmon EID 1 (ProcessCreate), Security 4688N/Acreate/patch Deployment/StatefulSet (args/env/config)N/ACzy mongod/mongos startuje z --bind_ip_all / 0.0.0.0 oraz czy wymuszasz wyłączenie zlib
Zmiany konfiguracji kompresjiEID 1/4688 + (opcjonalnie) audyt plików mongod.confN/Azmiany ConfigMap/Secret montowanych do podaN/ACzy net.compression.compressors nadal zawiera zlib (domyślnie zawiera)
„Skany” i bursty połączeń do MongoDBSysmon EID 3 + firewall(opcjonalnie) GuardDuty/VPC Flow Logs poza CloudTrailN/AN/AWysoka liczba krótkich połączeń, nietypowe geolokacje/ASN, brak auth events (bo pre-auth)
Działania IR/patchEID 1/4688 (restart usługi), systemd logsStartInstances/StopInstances (jeśli robisz)rollout restart, delete podN/AOkno zmian + walidacja, że wersja/kompresja jest zgodna z polityką

Detekcja (praktyczne reguły)

Sigma (gotowa reguła)

Cel: wykryć hosty, na których MongoDB jest uruchamiane w sposób zwiększający ekspozycję na CVE-2025-14847 (publiczny bind i/lub jawnie włączone zlib).
Uwaga: to jest detekcja „posture / hardening”, nie sygnatura exploit payload.

title: MongoDB Server Risky Startup Options (CVE-2025-14847 / zlib / public bind)
id: 3f7f2c2e-5b5c-4a6c-9b5e-6b7f9e3a8a21
status: experimental
description: >
  Detects mongod/mongos started with zlib network compression enabled and/or bound to all interfaces,
  increasing exposure to CVE-2025-14847 (unauth heap memory read via zlib compressed protocol).
references:
  - https://nvd.nist.gov/vuln/detail/CVE-2025-14847
  - https://jira.mongodb.org/browse/SERVER-115508
  - https://www.mongodb.com/docs/manual/reference/configuration-options/
author: Badacz CVE
date: 2025/12/25
tags:
  - attack.initial_access
  - attack.t1190
logsource:
  category: process_creation
  product: windows
detection:
  selection_image:
    Image|endswith:
      - '\mongod.exe'
      - '\mongos.exe'

  selection_public_bind:
    CommandLine|contains:
      - '--bind_ip_all'
      - '--bind_ip 0.0.0.0'
      - 'bindIpAll'
      - 'bindIp: 0.0.0.0'

  selection_zlib_cli:
    CommandLine|contains|all:
      - 'networkMessageCompressors'
      - 'zlib'

  selection_zlib_cfg_hint:
    CommandLine|contains|all:
      - 'net.compression.compressors'
      - 'zlib'

  condition: selection_image and (selection_public_bind or selection_zlib_cli or selection_zlib_cfg_hint)
fields:
  - Image
  - CommandLine
falsepositives:
  - MongoDB za reverse-proxy / w prywatnej sieci, gdzie bind na 0.0.0.0 jest akceptowalny
  - Środowiska, gdzie zlib jest wymagany (wydajność/kompatybilność), ale port nie jest publiczny
level: medium

Dlaczego to ma sens: zlib jest domyślnie włączony w mongod/mongos (snappy,zstd,zlib), więc realna mitigacja często polega na jego usunięciu/wyłączeniu.


Splunk (SPL)

A) Wykrywanie nieautoryzowanych źródeł łączących się do MongoDB (logi MongoDB):

index=mongodb sourcetype=mongodb:log ("connection accepted" OR "Connection accepted")
| rex field=_raw "from (?<src_ip>\d{1,3}(\.\d{1,3}){3}):(?<src_port>\d+)"
| stats count as connections dc(src_port) as uniq_src_ports by src_ip
| sort - connections

B) Bursty krótkich połączeń (sygnał skanowania / prób exploitacji pre-auth):

index=mongodb sourcetype=mongodb:log ("connection accepted" OR "end connection")
| rex field=_raw "connection accepted from (?<src_ip>\d{1,3}(\.\d{1,3}){3})"
| timechart span=5m count by src_ip limit=20

C) (Jeśli masz VPC/NSG/Firewall w Splunku) — inbound na 27017 z Internetu:

index=netflow (dest_port=27017 OR dest_port=27018) action=allowed
| stats sum(bytes) as bytes count as flows by src_ip dest_ip dest_port
| sort - flows

KQL (Azure / Microsoft Sentinel)

A) Azure Firewall (NetworkRule) — ruch do 27017/27018:

AzureDiagnostics
| where Category == "AzureFirewallNetworkRule"
| where msg_s has "Dport: 27017" or msg_s has "Dport: 27018"
| summarize flows=count() by SourceIP=src_ip_s, DestinationIP=dst_ip_s, bin(TimeGenerated, 5m)
| order by flows desc

B) Wykrywanie publicznej ekspozycji przez zmiany NSG (Activity Log):

AzureActivity
| where OperationNameValue has_any ("MICROSOFT.NETWORK/NETWORKSECURITYGROUPS/SECURITYRULES/WRITE",
                                   "MICROSOFT.NETWORK/NETWORKSECURITYGROUPS/WRITE")
| where ActivityStatusValue == "Succeeded"
| where Properties has "27017" or Properties has "27018"
| project TimeGenerated, Caller, OperationNameValue, ResourceGroup, Resource, Properties
| order by TimeGenerated desc

CloudTrail query (AWS CLI/CloudWatch)

A) CloudTrail Lake (SQL) — kto otworzył MongoDB na świat:

SELECT eventTime, userIdentity.arn, sourceIPAddress, eventName, requestParameters
FROM <your_cloudtrail_lake_table>
WHERE eventName IN ('AuthorizeSecurityGroupIngress','ModifySecurityGroupRules','RevokeSecurityGroupIngress')
  AND requestParameters LIKE '%27017%'
ORDER BY eventTime DESC;

B) AWS CLI (lookup-events) + filtr portów (przykład z jq):

aws cloudtrail lookup-events \
  --lookup-attributes AttributeKey=EventName,AttributeValue=AuthorizeSecurityGroupIngress \
  --start-time 2025-12-01T00:00:00Z \
  --end-time   2025-12-25T23:59:59Z \
  --max-results 50 \
| jq -r '.Events[]
  | select(.CloudTrailEvent | test("27017|27018"))
  | [.EventTime, .Username, .EventName] | @tsv'

Elastic (EQL) przykłady

A) Inbound connections do MongoDB z adresów publicznych (Elastic Defend / endpoint network events):

network
where event.type == "start"
  and destination.port in (27017, 27018)
  and network.direction == "inbound"
  and not cidrMatch(source.ip, "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16")

B) Start mongod/mongos z parametrami wysokiego ryzyka:

process
where event.type == "start"
  and process.name in ("mongod", "mongos", "mongod.exe", "mongos.exe")
  and (
    process.command_line like "*bind_ip_all*" or
    process.command_line like "*bind_ip 0.0.0.0*" or
    process.command_line like "*networkMessageCompressors*" and process.command_line like "*zlib*"
  )

Heurystyki / korelacje (co łączyć)

  1. Asset + posture: lista instancji MongoDB + wersja + czy port publiczny + czy zlib wyłączony.
    • zlib jest domyślnie włączony → jeśli nie zrobiłeś hardeningu, traktuj jak „włączone”.
  2. Netflow/VPC Flow Logs/NSG Flow Logs: wzrost liczby połączeń do 27017 z nietypowych ASN/geo + krótkie sesje.
  3. MongoDB logs: dużo connection accepted bez towarzyszących zdarzeń auth/audit (pre-auth).
  4. Change management: korelacja w czasie z rolloutem poprawek (upgrade/konfig) i spadkiem prób połączeń.

False positives / tuning

Typowe FP:

  • skanowanie wewnętrzne (CMDB, monitoring, VA tools),
  • load balancer / NAT pokazuje jeden adres źródłowy,
  • legalne aplikacje o wysokiej częstotliwości połączeń.

Tuning:

  • allowlist znanych CIDR aplikacji/ETL/backup,
  • alertuj tylko dla źródeł spoza prywatnych zakresów,
  • progi: np. >N nowych IP w 10 minut lub >X połączeń/IP/5 min.

Playbook reagowania

  1. Triage ekspozycji
    • Sprawdź, czy MongoDB jest Internet-facing (SG/NSG/Firewall/Ingress).
    • Jeśli tak: priorytet P1 (T1190).
  2. Weryfikacja wersji
    • Na hoście:mongod --version mongos --version
    • Porównaj z wersjami naprawionymi: 8.2.3 / 8.0.17 / 7.0.28 / 6.0.27 / 5.0.32 / 4.4.30.
  3. Natychmiastowa mitigacja (jeśli nie możesz patchować „teraz”)
    • Wyłącz zlib w kompresji sieciowej, ustawiając kompresory na snappy,zstd albo disabled.
    • Przykład (wariant uruchomieniowy):mongod --networkMessageCompressors snappy,zstd # albo całkowicie: mongod --networkMessageCompressors disabled
  4. Remediacja docelowa
    • Upgrade do wersji naprawionej (jw.).
  5. Hunting / impact assessment
    • Przejrzyj logi połączeń do 27017 (źródła, wolumeny, okna czasowe).
    • Jeśli DB była publiczna: potraktuj to jak incydent „potential data exposure”.
  6. Rotacja sekretów (jeśli ekspozycja była realna)
    • Rotuj hasła użytkowników DB, klucze aplikacyjne, tokeny (w zależności od tego, co mogło znaleźć się w pamięci procesu).
    • Wymuś TLS + auth + segmentację sieci (minimalny blast radius).

Przykłady z kampanii / case studies

  • Brak publicznie potwierdzonych kampanii APT/ransomware wykorzystujących CVE-2025-14847 „w dziczy” na moment publikacji źródeł; MongoDB wskazywał, że w Atlas „nie ma dowodów” na wykorzystanie ani kompromitację danych i że flota została spatchowana.
  • Ten CVE jest jednak modelowym przykładem ryzyka T1190 dla baz danych (public-facing socket + bug w parserze/protokole).

Lab (bezpieczne testy) — przykładowe komendy

  1. Sprawdź, czy serwer nadal pozwala na zlib
    • Ponieważ pole hello.compression pojawia się tylko, gdy kompresja jest używana, wymuś po stronie klienta zlib i zobacz, czy serwer je negocjuje.
    • Przykład:mongosh "mongodb://<host>:27017/?compressors=zlib" --eval 'db.hello()'
    • Jeśli w wyniku pojawia się "compression": ["zlib"], to zlib jest aktywnie używane (czyli mitigacja nie została wdrożona).
  2. Weryfikacja domyślnej listy kompresorów (dla wiedzy operacyjnej)
    • MongoDB domyślnie: snappy,zstd,zlib.
  3. Weryfikacja ustawień w pliku konfiguracyjnymsudo grep -n "compression" -n /etc/mongod.conf sudo grep -n "bindIp" -n /etc/mongod.conf
  4. K8s: sprawdź argumenty/ConfigMapkubectl -n <ns> get sts <mongo-sts> -o yaml | grep -n "networkMessageCompressors" -n kubectl -n <ns> get cm -o yaml | grep -n "net.compression" -n

Mapowania (Mitigations, Powiązane techniki)

ATT&CK (główne):

  • T1190 Exploit Public-Facing ApplicationTA0001 Initial Access

Dlaczego nie „RCE” w mapowaniu?
Opis CNA/NVD mówi o odczycie niezainicjalizowanej pamięci (information disclosure), a wektor CVSS v3.1 ma I:N/A:N — to nie jest opis skutku typu „arbitrary code execution”.

Mitigations (praktycznie):

  • Patch management / szybka aktualizacja wersji naprawionych
  • Ograniczenie ekspozycji (SG/NSG/Firewall/NetworkPolicy), zasada „DB nie jest publiczna”
  • Wyłączenie zlib (czasowo lub polityką) — snappy,zstd albo disabled

Powiązane techniki (łańcuchowo, zależnie od tego co wycieknie):

  • Potencjalnie: nadużycie ujawnionych sekretów → Valid Accounts (T1078) (jeśli wyciek umożliwi logowanie innymi kanałami).
    (To zależne od środowiska; sam CVE nie gwarantuje przejęcia kont.)

Źródła / dalsza literatura

  • NVD: opis, CVSS, wersje podatne, CWE-130 (NVD)
  • MongoDB JIRA SERVER-115508: fix/upgrade + workaround (wyłączenie zlib) (MongoDB Jira)
  • MongoDB Alerts (CVE-2025-14847): oficjalny wpis „Zlib … may allow memory read” + zakresy wersji (MongoDB)
  • MongoDB Docs: domyślne snappy,zstd,zlib (mongod/mongos) (MongoDB)
  • MongoDB Docs: hello.compression (walidacja negocjacji kompresji) (MongoDB)
  • MITRE ATT&CK: T1190 (tactic Initial Access, last modified) (MITRE ATT&CK)
  • MongoDB Community Hub: komunikat o spatchowaniu Atlas + brak dowodów exploitacji (wg MongoDB) (MongoDB)

Checklisty dla SOC / CISO

SOC (operacyjnie, dziś):

  • Zidentyfikuj wszystkie mongod/mongos i ich wersje.
  • Sprawdź ekspozycję 27017/27018 (Internet-facing = P1).
  • Jeśli nie możesz patchować natychmiast: usuń zlib z kompresorów (snappy,zstd lub disabled).
  • Wdróż detekcje: bursty połączeń, nowe źródła, zmiany SG/NSG.
  • Jeśli DB była publiczna: threat hunting + ocena ryzyka wycieku danych.

CISO / Risk:

  • Wymuś politykę: „bazy danych nie mają publicznych endpointów”.
  • SLA na patchowanie krytycznych/High dla usług publicznych.
  • Segmentacja sieci + Zero Trust dla dostępu do DB.
  • Standard hardening MongoDB: auth/TLS, ograniczenia kompresji, monitoring i centralne logowanie.

CVE-2025-3232 — Mitsubishi Electric Europe B.V. smartRTU

TL;DR

  • CVE-2025-3232 dotyczy Mitsubishi Electric Europe B.V. smartRTU (≤ 3.37) i polega na braku uwierzytelnienia dla krytycznej funkcji (CWE-306) – w praktyce zdalny, nieuwierzytelniony atakujący może obejść kontrolę dostępu i przez konkretną trasę API doprowadzić do wykonania poleceń systemu operacyjnego.
  • Ocena ryzyka (CNA/ICS-CERT): CVSS v3.1 7.5 (HIGH); NVD pokazuje też CVSS v4 8.7 (HIGH) (ocena NVD “not yet provided”, widoczna jest ocena CNA).
  • To część pakietu problemów w smartRTU opisanego w ICSA-25-105-09 – obok CVE-2025-3128 (CWE-78, OS Command Injection, CVSS 9.8), który bywa opisywany jako kolejny krok po obejściu uwierzytelnienia.
  • Najważniejsze działania defensywne (kompensacyjne): zdejmij ekspozycję z Internetu, ogranicz dostęp do zaufanych sieci, stosuj VPN / firewall, a jeśli HTTP/HTTPS musi być wystawione – rozważ WAF.
  • W materiałach CISA/CSAF (ICSA-25-105-09) wskazano, że nie było raportów o publicznie znanej exploitacji ukierunkowanej na tę podatność (stan na publikację/rewizję advisory).

Krótka definicja techniczna

CVE-2025-3232 to podatność typu Missing Authentication for Critical Function (CWE-306) w smartRTU (≤ 3.37), umożliwiająca atakującemu z sieci wywołanie wrażliwej funkcji przez określoną trasę API bez poprawnego uwierzytelnienia, co według opisu CVE może skutkować wykonaniem dowolnych poleceń OS (impact wg CVSS: Integrity = High). W kontekście MITRE ATT&CK (ICS) najbliższe mapowanie to T0819 Exploit Public-Facing Application (Initial Access), często w praktyce łączone też z T0866 Exploitation of Remote Services oraz wykonaniem komend po przejęciu kontekstu (np. T0807 Command-Line Interface).


Gdzie występuje / przykłady platform

  • ICS/OT: smartRTU (urządzenie/komponent RTU używany w środowiskach przemysłowych, zwykle z interfejsem web/API do zarządzania).
  • Windows: pośrednio (stacje inżynierskie/HMI/jump hosty, z których administruje się smartRTU) – przydatne do korelacji EDR/SIEM.
  • AD: zwykle nie dotyczy bezpośrednio (chyba że integracja/SSO w warstwie IT).
  • AWS / Azure / GCP: nie dotyczy samej podatności, ale może dotyczyć ekspozycji (np. reverse proxy/WAF w chmurze).
  • K8s: nie dotyczy.
  • ESXi: nie dotyczy.
  • M365: nie dotyczy.

Szczegółowy opis techniki

Jak to działa (perspektywa defensywna)

W smartRTU istnieje funkcjonalność dostępna przez interfejs web/API, która powinna być chroniona uwierzytelnieniem/autoryzacją. W przypadku CVE-2025-3232 mechanizm ten jest niewystarczający: krytyczna funkcja (wywoływana przez “specific API route”) może zostać uruchomiona bez poprawnej autentykacji, co według opisu CVE prowadzi do wykonania poleceń OS.

Cele atakującego

W OT/ICS taki wektor wejścia jest atrakcyjny, bo:

  • daje zdalny foothold na urządzeniu brzegowym (RTU), często stojącym na styku sieci (telemetria, zdalne zarządzanie),
  • może umożliwić manipulację konfiguracją, “tampering” oraz potencjalnie przygotowanie gruntu pod kolejne kroki (ruch boczny, zmiana parametrów, sabotaż).

Dlaczego jest skuteczna

  • Brak wymogu poświadczeń (PR:N) i niska złożoność (AC:L) w CVSS oznacza, że przy złej ekspozycji (Internet / nieufne segmenty) ryzyko operacyjne szybko rośnie.
  • OT często ma ograniczony telemetry/EDR na urządzeniach embedded, więc “signal” detekcyjny bywa głównie sieciowy (FW/WAF/IDS) i z elementów pośredniczących.

Artefakty i logi

Źródło / warstwaEID (Windows)CloudTrail eventsK8s auditM365 operationsCo warto zbierać / na co patrzeć
Dostęp do interfejsu web/API smartRTUN/AN/AN/AN/ALogi HTTP (reverse proxy/WAF), metoda POST/PUT/DELETE, nietypowe URI, skoki 4xx/5xx, nietypowe UA, duże payloady
Firewall / IDS/IPSN/AN/AN/AN/AInbound do panelu zarządzania (80/443 lub inne), źródła spoza allowlist, skanowanie, bursty requestów
Host/EDR na stacji inżynierskiej/jump hoście (jeśli zarządzanie z Windows)4688, 4625/4624 (korelacje logowań)N/AN/AN/ANietypowe procesy uruchomione w kontekście narzędzi admin/remote, “helper tools”, nowe połączenia sieciowe do RTU
Telemetria z urządzenia (jeśli dostępna)N/AN/AN/AN/ASyslog/audit (o ile jest), historia poleceń, zmiany konfiguracji, restarty usług/urządzenia
WAF (jeśli publikujesz web)N/A(raczej) N/AN/AN/AReguły blokujące nietypowe requesty, anomalie w parametrach i nagłówkach; korelacja z ruchem zewnętrznym

Detekcja (praktyczne reguły)

Uwaga praktyczna: w OT często nie masz idealnych logów “z urządzenia”. Dlatego poniżej są reguły, które da się zastosować w warstwie pośredniej (WAF/reverse proxy) albo na hostach, które zbierają procesy (EDR). Nie używam tu żadnych “kroków exploitacji” ani nie podaję konkretnej trasy API – bo publiczne advisory mówi tylko o “specific API route”.

Sigma (gotowa reguła)

title: Possible Web/API Triggered OS Command Execution via Web Server Parent (smartRTU / CVE-2025-3232 context)
id: 3b2b8e3a-3c3d-4d6a-9d7a-1f6b62b8d6c1
status: experimental
description: |
  Detects suspicious shell/process execution spawned by common embedded/web server processes.
  Useful as compensating detection for scenarios where an unauthenticated API route may lead to OS command execution
  (e.g., smartRTU CVE-2025-3232 and related chains).
references:
  - https://nvd.nist.gov/vuln/detail/CVE-2025-3232
  - https://raw.githubusercontent.com/cisagov/CSAF/develop/csaf_files/OT/white/2025/icsa-25-105-09.json
author: "Badacz CVE (SOC/Blue Team)"
date: 2025/12/25
tags:
  - attack.initial_access
  - attack.t1190
  - attack.execution
logsource:
  category: process_creation
  product: linux
detection:
  parent_websrv:
    ParentImage|endswith:
      - /nginx
      - /apache2
      - /httpd
      - /lighttpd
      - /uhttpd
      - /boa
  child_shell:
    Image|endswith:
      - /sh
      - /bash
      - /ash
      - /busybox
  cmd_susp:
    CommandLine|contains:
      - " -c "
      - "wget "
      - "curl "
      - "nc "
      - "mkfifo "
      - "/dev/tcp/"
  condition: parent_websrv and (child_shell or cmd_susp)
falsepositives:
  - Legitimate CGI scripts or admin maintenance jobs that spawn shells from web services
  - Firmware update routines implemented via web backend
level: high

Splunk (SPL)

Wariant A – proxy/WAF access logs (szukamy nieautoryzowanych prób do panelu/API):

index=net* (sourcetype=nginx:access OR sourcetype=apache:access OR sourcetype=waf)
dest_port IN (80,443)
| eval uri=coalesce(uri_path, uri, request)
| search http_method IN ("POST","PUT","DELETE") OR like(uri,"%api%")
| where NOT cidrmatch("10.0.0.0/8", src_ip) AND NOT cidrmatch("192.168.0.0/16", src_ip)
| stats count min(_time) as firstSeen max(_time) as lastSeen values(http_method) values(status) values(uri) by src_ip dest_ip
| sort -count

Wariant B – EDR/host telemetry (webserver → shell):

index=edr* sourcetype=process*
| where (parent_process_name IN ("nginx","httpd","apache2","lighttpd","uhttpd","boa"))
| where (process_name IN ("sh","bash","ash","busybox") OR like(process_command_line,"% -c %"))
| stats count min(_time) max(_time) values(process_command_line) by host user parent_process_name process_name
| sort -count

KQL (Azure)

Defender for Endpoint (jeśli masz DeviceProcessEvents z hostów/jump hostów):

DeviceProcessEvents
| where InitiatingProcessFileName in~ ("nginx","httpd","apache2","lighttpd","uhttpd","boa")
| where FileName in~ ("sh","bash","ash","busybox") or ProcessCommandLine has " -c "
| project Timestamp, DeviceName, AccountName, InitiatingProcessFileName, FileName, ProcessCommandLine
| order by Timestamp desc

Azure WAF / App Gateway (jeśli smartRTU stoi za takim frontem):

AzureDiagnostics
| where Category has "ApplicationGatewayFirewallLog"
| where action_s == "Blocked" or ruleSetType_s =~ "OWASP"
| project TimeGenerated, clientIp_s, requestUri_s, requestMethod_s, message_s, ruleId_s
| order by TimeGenerated desc

CloudTrail query (AWS CLI/CloudWatch)

CloudTrail nie loguje ruchu HTTP do smartRTU (to nie są wywołania AWS API). Jeżeli jednak wystawiasz smartRTU przez AWS WAF/ALB, sensowniejsze jest pytanie CloudWatch Logs Insights na logach WAF:

fields @timestamp, httpRequest.clientIp as srcIp, httpRequest.httpMethod as method, httpRequest.uri as uri, action, terminatingRuleId
| filter method in ["POST","PUT","DELETE"] or uri like /api/
| stats count() as hits, min(@timestamp) as firstSeen, max(@timestamp) as lastSeen by srcIp, method, uri, action
| sort hits desc

Elastic/EQL przykłady

process
where host.os.type == "linux"
  and process.parent.name in ("nginx","httpd","apache2","lighttpd","uhttpd","boa")
  and (
    process.name in ("sh","bash","ash","busybox")
    or process.command_line like "* -c *"
  )

Heurystyki / korelacje

  1. Ruch sieciowy → objaw na hoście: burst requestów HTTP/HTTPS do interfejsu zarządzania + w krótkim oknie czasowym proces potomny typu shell (jeśli masz telemetrię).
  2. Źródło spoza polityki dostępu: jakikolwiek request do panelu/API smartRTU z IP spoza allowlist (VPN/management VLAN).
  3. Zmiany konfiguracyjne / restarty: anomalia w dostępności RTU, restart usług, zmiany parametrów – skorelowane czasowo z nietypowym ruchem do web/API.
  4. Skanowanie: rozproszony ruch do portów zarządczych (80/443) poprzedzający właściwe wywołania.

False positives / tuning

  • Legalna administracja potrafi wyglądać “podejrzanie”, jeśli:
    • admin używa narzędzi automatyzujących (API),
    • są wykonywane update’y/backup/diagnostyka z panelu (może generować wywołania typu POST).
  • Tuning praktyczny:
    • twarda allowlista źródeł (VPN, jump hosty, sieci adminów),
    • baseline “normalnych” URI i metod HTTP,
    • korelacja z oknami serwisowymi (maintenance windows),
    • w EDR: allowlist legalnych skryptów/agentów, które realnie mogą startować shell (jeśli to w ogóle dopuszczalne w Twoim środowisku).

Playbook reagowania (kroki + komendy)

1) Identyfikacja i triage

  • Zrób inventory: gdzie stoi smartRTU i czy wersja jest ≤ 3.37 (to zakres “known affected” w advisory).
  • Sprawdź ekspozycję: czy panel zarządzania jest dostępny z Internetu albo z segmentów nie-OT.

2) Natychmiastowe ograniczenie ekspozycji (kompensacja)

Zgodnie z zaleceniami w advisory:

  • wymuś VPN / firewall przy dostępie zdalnym,
  • ogranicz do LAN i blokuj sieci nieufne,
  • jeśli HTTP/HTTPS musi działać – postaw WAF i ogranicz web client access do zaufanych sieci.

Przykład (Linux firewall na reverse proxy – tylko allowlista):

# tylko przykład – dopasuj interfejs/port
sudo iptables -A INPUT -p tcp --dport 443 -s <TRUSTED_ADMIN_SUBNET_CIDR> -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j DROP

3) Polowanie (hunting)

  • Szukaj anomalii w:
    • logach WAF/proxy: nietypowe metody, częste 4xx/5xx, requesty spoza allowlist,
    • FW/IDS: ruch do portów zarządczych z “dziwnych” źródeł,
    • EDR: webserver → shell (jeśli masz).

4) Jeśli podejrzenie kompromitacji

  • Odizoluj urządzenie od sieci produkcyjnej (w OT zawsze z oceną wpływu na proces).
  • Zabezpiecz logi i artefakty z elementów pośrednich (WAF/FW/jump host).
  • Rotuj hasła/poświadczenia powiązane z dostępem administracyjnym i kanałami zdalnymi.
  • Rozważ kontrolę integralności konfiguracji (co się zmieniło i kiedy).

Przykłady z kampanii / case studies

  • Publiczne materiały dla smartRTU (ICSA-25-105-09 w formacie CSAF) wskazują, że raportującym był Claroty Team82 (w acknowledgments), a w sekcji “Recommended Practices” pada stwierdzenie o braku znanej publicznej exploitacji ukierunkowanej na tę podatność (na moment publikacji/rewizji).

Lab (bezpieczne testy) — przykładowe komendy

Tylko w odseparowanym labie OT (VLAN/lab), za zgodą właściciela środowiska. Celem jest walidacja ekspozycji i detekcji, nie test exploitów.

Test 1: czy urządzenie/panel jest wystawiony tam, gdzie nie powinien

# skan usług (wersje) – tylko własna sieć/lab
nmap -sV -p 80,443 <SMART_RTU_IP>

Test 2: szybka walidacja kontroli dostępu (bez exploitacji)

# sprawdzenie odpowiedzi HTTP nagłówkami (bez “payloadów”)
curl -kI https://<SMART_RTU_IP>/

Test 3: walidacja segmentacji (czy blokuje z nieufnego segmentu)

# próba zestawienia TCP z sieci, która NIE powinna mieć dostępu
nc -vz <SMART_RTU_IP> 443

Test 4: test reguły “webserver → shell” na hostach (symulacja benign)

Na hoście testowym (reverse proxy / lab VM) uruchom kontrolowany łańcuch procesów, żeby sprawdzić czy SIEM/EDR zareaguje:

# benign: tworzy plik, ale generuje charakterystyczny wzorzec "shell -c"
sudo -u www-data /bin/sh -c 'echo healthcheck > /tmp/web-child-test'

Mapowania (Mitigations, Powiązane techniki)

MITRE ATT&CK (ICS) – techniki

  • T0819 – Exploit Public-Facing Application (Initial Access)
  • T0866 – Exploitation of Remote Services (Initial Access, Lateral Movement)
  • T0807 – Command-Line Interface (Execution)

MITRE – przykładowe mitigacje dla T0819 (ICS)

Z karty T0819 jako szczególnie sensowne dla smartRTU:

  • M0950 Exploit Protection (np. WAF)
  • M0930 Network Segmentation (DMZ/segmentacja usług wystawionych)
  • M0948 Application Isolation and Sandboxing (ograniczenie skutków exploitacji)
  • M0926 Privileged Account Management (least privilege, kontrola kont uprzywilejowanych)

Powiązane konteksty podatności

  • CWE-306 (Missing Authentication for Critical Function) dla CVE-2025-3232
  • W tym samym advisory: CVE-2025-3128 (CWE-78, OS Command Injection) – często istotne w analizie łańcucha.

Źródła / dalsza literatura

  • NVD: CVE-2025-3232 (opis, CVSS, CWE, daty publikacji) (NVD)
  • CISA CSAF: ICSA-25-105-09 JSON (zakres wersji ≤3.37, mitigacje, kontekst, “no known public exploitation…”) (GitHub)
  • Mitsubishi Electric Europe: raport PSIRT MEU_PSIRT_2025-3128 (pakiet podatności dla smartRTU) (MITSUBISHI ELECTRIC Europe)
  • Claroty disclosure dashboard dla CVE-2025-3232 (zalecenia mitigacyjne w punktach)
  • MITRE ATT&CK (ICS): T0819, T0866, T0807 (MITRE ATT&CK)

Checklisty dla SOC / CISO

SOC (operacyjnie)

  • Znajdź wszystkie instancje smartRTU i potwierdź wersje (szczególnie ≤ 3.37).
  • Zweryfikuj ekspozycję: czy panel/API nie jest dostępny z Internetu.
  • Włącz logowanie i korelacje na FW/WAF/proxy (źródło IP, URI, metody, statusy).
  • Dodaj reguły “webserver → shell” (jeśli masz telemetrię procesów).
  • Ustal allowlistę źródeł administracyjnych i alertuj na odchylenia.

CISO / właściciel ryzyka

  • Wymuś model dostępu: VPN + jump host + segmentacja (zamiast bezpośredniej ekspozycji).
  • Zdefiniuj kompensacje (WAF, ACL, DMZ) i plan ciągłości działania OT.
  • Oceń ryzyko łańcucha z CVE-2025-3128 (jeśli dotyczy Twojego wdrożenia).
  • Ustal progi eskalacji (kiedy izolujemy RTU, kiedy zatrzymujemy zdalne zarządzanie).

MongoDB: CVE-2025-14847 (zlib) – pilna łatka, bo luka może posłużyć do ataków zdalnych, także w scenariuszach RCE

Wprowadzenie do problemu / definicja luki

MongoDB opublikowało pilne ostrzeżenie dotyczące podatności CVE-2025-14847, która dotyczy obsługi kompresji zlib w protokole sieciowym MongoDB. Luka umożliwia zdalnemu, nieuwierzytelnionemu klientowi doprowadzenie do odczytu niezainicjalizowanej pamięci sterty (heap), a według komunikacji o ryzyku – może być wykorzystywana także w łańcuchach prowadzących do zdalnego wykonania kodu (RCE).

W skrócie

  • Identyfikator: CVE-2025-14847
  • Mechanizm: niespójne pola długości w nagłówkach protokołu dla danych skompresowanych zlib → możliwy odczyt niezainicjalizowanej pamięci heap bez logowania
  • Wektor: zdalnie przez sieć, bez interakcji użytkownika; ocena producenta CVSS v4: 8.7 (HIGH) oraz CVSS v3.1: 7.5 (HIGH)
  • Naprawa: aktualizacja do wydań: 8.2.3 / 8.0.17 / 7.0.28 / 6.0.27 / 5.0.32 / 4.4.30
  • Mitigacja awaryjna: wyłączenie zlib w konfiguracji kompresji (networkMessageCompressors / net.compression.compressors)

Kontekst / historia / powiązania

W krótkim komunikacie MongoDB podkreśla, że Atlas (flota zarządzana) został już załatany, a na moment publikacji nie ma dowodów na wykorzystanie luki ani kompromitację danych klientów. Jednocześnie dla środowisk self-hosted udostępniono poprawki dla wspieranych linii (co najmniej 4.4–8.0) i zalecono szybką aktualizację.

Równolegle advisory w JIRA (SERVER-115508) jest bardzo bezpośrednie: to „critical fix” i rekomendacja brzmi „upgrade immediately”, z awaryjną opcją wyłączenia zlib, jeśli nie da się podnieść wersji od razu.

Analiza techniczna / szczegóły luki

Co dokładnie jest podatne?

Podatność wynika z błędnej obsługi niespójności parametrów długości (CWE-130) w kontekście nagłówków protokołu MongoDB dla komunikatów skompresowanych zlib. W praktyce „mismatched length fields” mogą spowodować, że serwer zwróci do klienta fragmenty niezainicjalizowanej pamięci heap.

Dlaczego to jest niebezpieczne, skoro opis mówi o „read”?

Opis CVE wprost wskazuje na wyciek pamięci (wysoki wpływ na poufność, brak wpływu na integralność/dostępność w wektorach CVSS).
Natomiast komunikacja do administratorów akcentuje, że jest to podatność, którą można wykorzystać w atakach zdalnych na serwery – a w relacjach i ostrzeżeniach podkreślono potencjał użycia jej w scenariuszach RCE (np. jako element łańcucha eksploatacji).

Jakie wersje są dotknięte?

Zakres wersji obejmuje wiele gałęzi MongoDB, w tym także stare linie „MongoDB Server” (3.6/4.0/4.2). W skrócie: podatne są m.in. 4.4.0–4.4.29, 5.0.0–5.0.31, 6.0.0–6.0.26, 7.0.0–7.0.26, 8.0.0–8.0.16, 8.2.0–8.2.3 oraz wszystkie wydania gałęzi 3.6/4.0/4.2.

Praktyczne konsekwencje / ryzyko

  1. Wyciek wrażliwych danych z pamięci procesu
    Niezainicjalizowana pamięć heap potrafi zawierać „resztki” danych przetwarzanych przez proces: fragmenty dokumentów, metadane zapytań, elementy buforów sieciowych itp. To klasyczny wektor pod podniesienie skuteczności dalszych ataków (rozpoznanie, omijanie mechanizmów losowania/ochron, wycieki danych).
  2. Ryzyko eskalacji do bardziej destrukcyjnych scenariuszy
    Choć rdzeń CVE opisuje wyciek pamięci, komunikaty o „patch now” podkreślają, że podatność jest atrakcyjna operacyjnie (zdalnie, bez auth, niska złożoność) i może być łączona w łańcuchy prowadzące do przejęcia serwera. Z perspektywy obrony – to wystarczający powód, by traktować ją jak incydent „priorytet P1”.
  3. Najbardziej narażone środowiska
    • self-hosted MongoDB wystawione do Internetu (albo dostępne z sieci o niskim zaufaniu),
    • klastry z włączoną kompresją i dopuszczające zewnętrznych klientów,
    • środowiska legacy (3.6/4.0/4.2), gdzie sama modernizacja bywa trudna, ale ryzyko – największe.

Rekomendacje operacyjne / co zrobić teraz

1) Patch – docelowa i najlepsza ścieżka

Zaktualizuj do wersji naprawionych (zgodnie z linią wydaniową):

  • 8.2.3, 8.0.17, 7.0.28, 6.0.27, 5.0.32, 4.4.30

2) Mitigacja awaryjna, gdy nie możesz patchować „tu i teraz”

MongoDB zaleca wyłączenie zlib poprzez konfigurację kompresji i pozostawienie np. snappy,zstd albo całkowite wyłączenie kompresji.
Przykładowo (konceptualnie): ustaw networkMessageCompressors / net.compression.compressors tak, aby nie zawierało zlib.

3) Szybkie twardnienie ekspozycji (równolegle)

Nawet po aktualizacji (albo do czasu okna serwisowego) warto:

  • odciąć dostęp do mongod/mongos od Internetu (firewall / security groups / allowlist),
  • ograniczyć dostęp wyłącznie do sieci aplikacyjnych (zasada minimalnej ekspozycji),
  • zweryfikować, czy nie utrzymujesz produkcyjnie niewspieranych gałęzi 3.6/4.0/4.2 – one są wprost oznaczone jako dotknięte.

4) Detekcja i IR – minimum sensowne w 24h

  • zinwentaryzuj wersje i sprawdź, czy kompresja zlib jest używana,
  • przejrzyj logi pod kątem nietypowych połączeń z nieznanych ASN/IP i skoków błędów/protokołu,
  • jeśli masz audyt/telemetrię na hostach DB: zwróć uwagę na anomalie w procesie mongod (nietypowe zużycie CPU/RAM, restarty, crashe), choć sam CVE nie jest opisany jako DoS. (To bardziej „higiena operacyjna” niż gwarantowana sygnatura).

Różnice / porównania z innymi przypadkami (jeśli dotyczy)

  • To nie jest „klasyczny RCE” w opisie CVE. Wektory CVSS od MongoDB wskazują przede wszystkim na wysoki wpływ na poufność (wyciek pamięci).
  • Mimo to komunikacja do administratorów jest w tonie „patch natychmiast”, bo wycieki pamięci bywają paliwem dla dalszej eksploatacji (np. do stabilizacji kolejnych etapów ataku). Dlatego w praktyce SOC/IT powinny traktować to jak podatność o wysokim priorytecie – szczególnie przy ekspozycji zdalnej i braku uwierzytelnienia.

Podsumowanie / kluczowe wnioski

CVE-2025-14847 uderza w sam „transport” danych MongoDB (kompresja zlib), umożliwiając zdalny, nieuwierzytelniony wyciek pamięci heap. Skala dotyczy wielu wersji, w tym gałęzi legacy. Najbezpieczniejsza strategia to natychmiastowy upgrade do wersji naprawionych, a jeśli to niemożliwe – wyłączenie zlib jako środek doraźny i ograniczenie ekspozycji sieciowej.


Źródła / bibliografia

  1. BleepingComputer – „MongoDB warns admins to patch severe RCE flaw immediately” (24.12.2025). (BleepingComputer)
  2. MongoDB Community Hub – „Important MongoDB patch available” (24.12.2025). (MongoDB)
  3. NVD (NIST) – CVE-2025-14847 (opis, zakres wersji, CVSS). (NVD)
  4. CVE AWG (MITRE API) – rekord CVE-2025-14847 (metadane, CVSS, affected). (CVE Advocacy)
  5. MongoDB JIRA – SERVER-115508 (advisory, workaround, wersje naprawione). (MongoDB Jira)

CVE-2025-14733 (WatchGuard Fireware OS / Firebox)

TL;DR

  • Co to jest: krytyczne RCE bez uwierzytelnienia (out-of-bounds write / CWE-787) w procesie iked w WatchGuard Fireware OS.
  • Kiedy boli najbardziej: gdy Firebox ma włączone IKEv2 VPN (Mobile User VPN IKEv2 oraz BOVPN IKEv2 z dynamic gateway peer).
  • Wersje podatne (wg NVD): Fireware OS 11.10.2–11.12.4_Update1, 12.0–12.11.5, 2025.1–2025.1.3.
  • Fixy (wg WatchGuard): 2025.1.4, 12.11.6, 12.5.15 (T15/T35), 12.3.1_Update4 (FIPS); 11.x = EoL.
  • Status operacyjny: WatchGuard potwierdza aktywne próby eksploatacji, a NVD odnotowuje dodanie do KEV (terminy dla FCEB w USA wg wpisu w NVD).
  • Mapowanie ATT&CK: T1190 – Exploit Public-Facing Application (taktika: Initial Access, v2.8, Last Modified 24 Oct 2025).
  • Co robić teraz: patch/upgrade, zawężenie ekspozycji UDP 500/4500 (tylko znane peer’y), hunting po logach iked (CERT > 2000, chain > 8), rotacja sekretów po IoA/IOC.

Krótka definicja techniczna

T1190 (Exploit Public-Facing Application) opisuje scenariusz, w którym atakujący wykorzystuje błąd w usłudze wystawionej do Internetu, aby uzyskać initial access; CVE-2025-14733 to praktyczny przykład tej techniki na urządzeniu brzegowym (WatchGuard Firebox), gdzie podatność w IKEv2 (iked) umożliwia zdalne wykonanie kodu bez logowania, jeśli usługa VPN jest wystawiona i skonfigurowana w określony sposób.


Gdzie występuje / przykłady platform (Windows, AD, AWS, Azure, GCP, K8s, ESXi, M365)

  • Network Devices / Edge (najważniejsze): WatchGuard Firebox (Fireware OS) wystawiony do Internetu na IKEv2.
  • Windows / AD: zwykle kolejny etap po initial access (pivot przez VPN, kradzież poświadczeń, ruch lateralny). [brak danych / do uzupełnienia] dla konkretnej kampanii powiązanej z CVE-2025-14733 (brak publicznie potwierdzonego kill-chain per-actor w źródłach vendorowych).
  • AWS / Azure / GCP: jeśli Firebox działa jako appliance w chmurze (np. Firebox Cloud) — dochodzi warstwa kontroli ekspozycji przez Security Group/NSG i logi cloudowe (CloudTrail/Activity Log) do wykrywania nagle otwartych UDP 500/4500.
  • K8s: nie dotyczy bezpośrednio (to nie jest podatność kontenerowa).
  • ESXi: nie dotyczy bezpośrednio (chyba że Firebox jest elementem segmentacji/DMZ).
  • M365: nie dotyczy bezpośrednio; ewentualnie telemetria logowań po kompromitacji.

Szczegółowy opis techniki (jak działa, cele, dlaczego jest skuteczna)

W praktyce CVE-2025-14733 wpisuje się w T1190, bo:

  • Punkt wejścia to usługa brzegowa: IKEv2 VPN na Fireboxie (Mobile User VPN i/lub Branch Office VPN).
  • Klasa błędu: out-of-bounds write (CWE-787), co typowo daje spektrum skutków od crash/hang po RCE.
  • Warunki podatności (ważne dla SOC): WatchGuard wskazuje zależność od konfiguracji IKEv2 (w tym dynamic gateway peer) oraz fakt, że nawet po usunięciu konfiguracji dynamic peer urządzenie może nadal pozostać podatne w określonych przypadkach (istniejące BOVPN do static peer).
  • Dlaczego skuteczne operacyjnie: edge urządzenia są często wystawione do Internetu i mają ograniczone host-based controls; do tego dochodzi presja “VPN musi działać”, więc okno patchowania bywa realnie dłuższe niż w serwerach aplikacyjnych. To jest dokładnie kontekst, który MITRE opisuje dla T1190 (również w odniesieniu do urządzeń sieciowych).

Artefakty i logi (tabela — EID, CloudTrail events, K8s audit, M365 operations)

Artefakt / sygnałEID (Windows)CloudTrail events (AWS)K8s auditM365 operationsGdzie szukać / komentarz
iked: “Received peer certificate chain is longer than 8…”Syslog/Traffic Monitor z Firebox (domyślny error level). To vendor opisuje jako medium indicator of attack.
iked: “IKE_AUTH request … CERT(sz=3000) …” i CERT > 2000Syslog przy info logging; WatchGuard wskazuje >2000 jako strong indicator.
IKED hang (VPN re-key/negocjacje “stają”)Zachowanie urządzenia: przerwane negocjacje, istniejące tunele mogą działać.
IKED crash + fault reportWatchGuard: crash po udanej/nieudanej próbie (weak indicator).
Ruch outbound z Firebox do wskazanych IP (IoA)WatchGuard: outbound do tych IP to mocny sygnał kompromitacji; inbound może oznaczać recon/attempt.
Nagle otwarte UDP 500/4500 do Internetu (Firebox Cloud)AuthorizeSecurityGroupIngress / zmiany NACLDla wdrożeń w AWS: koreluj zmiany ekspozycji z aktywnością iked. (Detekcja “okołopodatnościowa”, ale praktyczna).

Detekcja (praktyczne reguły)

Sigma (gotowa reguła)

Założenie: logi Firebox (syslog) trafiają do SIEM jako tekst (np. message). Dopasuj logsource do swojego pipeline’u (np. Syslog/CEF).

title: WatchGuard Firebox CVE-2025-14733 - IKEv2 iked Indicators
id: 3f3a8a7c-5b0c-4b56-9c1d-4a5a54f6d2f1
status: experimental
description: |
  Detects WatchGuard Firebox iked log patterns associated with CVE-2025-14733 exploitation attempts:
  - peer certificate chain longer than 8
  - IKE_AUTH requests with abnormally large CERT payload size (>=2000 bytes)
references:
  - https://nvd.nist.gov/vuln/detail/CVE-2025-14733
  - https://www.watchguard.com/wgrd-psirt/advisory/wgsa-2025-00027
author: SOC/Blue Team
date: 2025/12/23
logsource:
  category: firewall
  product: watchguard
detection:
  sel_chain_long:
    message|contains:
      - 'Received peer certificate chain is longer than 8'
      - 'Reject this certificate chain'
  sel_cert_big:
    message|contains:
      - 'IKE_AUTH request'
      - 'CERT(sz='
  sel_cert_big_re:
    message|re: 'CERT\(sz=(2[0-9]{3}|[3-9][0-9]{3,})\)'
  condition: sel_chain_long or (sel_cert_big and sel_cert_big_re)
falsepositives:
  - Unusual but legitimate certificate chains from misconfigured peers
  - Large certificate payloads in rare enterprise PKI setups
level: high
tags:
  - attack.initial_access
  - attack.t1190

Wzorce logów i progi (chain > 8, CERT > 2000) są oparte o wskaźniki opisane przez WatchGuard.

Splunk (SPL)

1) IoA w logach iked (CERT/chain):

index=network (sourcetype=syslog OR sourcetype=watchguard*)
("iked" AND ("Received peer certificate chain is longer than 8" OR "IKE_AUTH request"))
| rex field=_raw "CERT\(sz=(?<cert_sz>\d+)\)"
| eval cert_sz=tonumber(cert_sz)
| where like(_raw,"%Received peer certificate chain is longer than 8%") OR cert_sz>=2000
| stats count earliest(_time) as firstSeen latest(_time) as lastSeen values(host) as devices values(src) as src_ip values(cert_sz) as cert_sizes by dest
| convert ctime(firstSeen) ctime(lastSeen)

2) Ruch do IP z advisory (outbound = silniejszy sygnał):

index=network (sourcetype=pan:traffic OR sourcetype=netflow OR sourcetype=watchguard*)
(dest_ip IN ("45.95.19.50","51.15.17.89","172.93.107.67","199.247.7.82") OR
 src_ip  IN ("45.95.19.50","51.15.17.89","172.93.107.67","199.247.7.82"))
| stats count earliest(_time) as firstSeen latest(_time) as lastSeen values(action) as actions values(dest_port) as ports by src_ip dest_ip
| convert ctime(firstSeen) ctime(lastSeen)

Lista IP i interpretacja inbound/outbound pochodzą z WatchGuard IoA.

KQL (Azure / Microsoft Sentinel)

Syslog (Syslog table) — CERT > 2000 / chain > 8:

Syslog
| where ProcessName has "iked" or SyslogMessage has "iked"
| extend CertSz = toint(extract(@"CERT\(sz=(\d+)\)", 1, SyslogMessage))
| where SyslogMessage has "Received peer certificate chain is longer than 8"
   or (SyslogMessage has "IKE_AUTH request" and CertSz >= 2000)
| project TimeGenerated, Computer, Facility, SeverityLevel, ProcessName, CertSz, SyslogMessage
| order by TimeGenerated desc

CommonSecurityLog / firewall telemetry — IoA IP:

let ioc_ips = dynamic(["45.95.19.50","51.15.17.89","172.93.107.67","199.247.7.82"]);
CommonSecurityLog
| where DestinationIP in (ioc_ips) or SourceIP in (ioc_ips)
| project TimeGenerated, DeviceVendor, DeviceProduct, SourceIP, DestinationIP, DestinationPort, Activity, Message
| order by TimeGenerated desc

IoA IP i log-patterny: WatchGuard advisory.

CloudTrail query (AWS CLI/CloudWatch)

Scenariusz: Firebox Cloud w AWS — polujemy na “nagłe wystawienie” UDP 500/4500 do Internetu.

AWS CLI (CloudTrail LookupEvents) — SG ingress na 500/4500 (wymaga jq):

aws cloudtrail lookup-events \
  --lookup-attributes AttributeKey=EventName,AttributeValue=AuthorizeSecurityGroupIngress \
  --max-results 50 \
| jq -r '
  .Events[]
  | (.CloudTrailEvent | fromjson)
  | select(.requestParameters.ipPermissions.items[]? | (.fromPort==500 or .fromPort==4500))
  | {eventTime, userIdentity: .userIdentity.arn, groupId: .requestParameters.groupId, ipPermissions: .requestParameters.ipPermissions.items}
'

Jeśli zamiast CloudTrail trzymasz telemetrię w innych źródłach, oznacz to jako [brak danych / do uzupełnienia] w swoim runbooku.

Elastic/EQL przykłady

Kibana KQL (syslog z Firebox):

(event.dataset: syslog OR event.dataset: "watchguard*")
and (message: "*Received peer certificate chain is longer than 8*"
     or (message: "*IKE_AUTH request*" and message: "*CERT(sz=2*")
     or (message: "*IKE_AUTH request*" and message: "*CERT(sz=3*"))

EQL (jeśli masz ustandaryzowane pola):

any where
  event.category == "network" and
  (process.name == "iked" or message like "*iked*") and
  (
    message like "*Received peer certificate chain is longer than 8*"
    or (message like "*IKE_AUTH request*" and message regex "CERT\\(sz=(2[0-9]{3}|[3-9][0-9]{3,})\\)")
  )

Heurystyki / korelacje

Dla SOC sensownie działa korelacja “multi-signal”, zgodna z duchem MITRE (request → error → post-exploit).

Proponowane łańcuchy:

  1. IKE_AUTH (CERT > 2000) lub chain > 8 → w oknie 1–5 min IKED hang/crash → w oknie 5–30 min outbound do podejrzanych IP / nowy egress z urządzenia.
  2. Spike w inbound UDP 500/4500 z AS/geo nietypowego dla Twoich peerów + równoległy wzrost błędów iked.
  3. Dla static BOVPN: obecność “allow from all” na UDP 500 (domyślne polityki) + ruch z Internetu + anomalie iked → priorytet P1 (bo tu “hardening” jest realnym workaroundiem).

False positives / tuning

  • “certificate chain longer than 8” może się zdarzyć przy źle złożonym łańcuchu certów po stronie peera (PKI, błędy klienta) — traktuj jako średni sygnał, dopóki nie ma korelacji z crash/hang lub CERT > 2000.
  • CERT > 2000: vendor opisuje jako strong indicator, ale w dużych środowiskach (długie łańcuchy, nietypowe certy) warto whitelistingować znane peer IP i/lub profile, zamiast obniżać próg.
  • Crash iked: WatchGuard podkreśla, że są inne przyczyny crashy → traktuj jako weak indicator sam w sobie.
  • Tuning praktyczny: ogranicz ekspozycję do znanych peerów (alias) i wyłącz domyślne “allow IKE from all” — wtedy większość FP znika, bo “Internet noise” przestaje docierać do usługi.

Playbook reagowania (kroki + komendy)

Krok 0 — triage (czy jesteśmy w zakresie?)

  1. Sprawdź wersję Fireware i porównaj z listą podatnych/fix.
  2. Sprawdź, czy masz IKEv2 (Mobile VPN IKEv2 / BOVPN IKEv2, dynamic peer).
  3. Hunting po IoA logach (iked) i połączeniach do IP z advisory.

Krok 1 — containment (minimalizuj powierzchnię ataku)

  • Jeśli biznes pozwala: czasowo wyłącz IKEv2 VPN lub ogranicz go do stałych peerów.
  • Jeśli masz tylko static peer BOVPN i nie możesz od razu patchować: zastosuj hardening wg WatchGuard:
    1. wyłącz dynamic peer VPN,
    2. utwórz alias ze stałymi IP peerów,
    3. dodaj polityki dopuszczające UDP 500/4500 tylko z aliasu,
    4. wyłącz domyślne polityki IPSec “allow all”.

Krok 2 — eradication (patch/upgrade)

  • Wgraj wersje naprawione:
    • 2025.1.4+, 12.11.6+, 12.5.15 (T15/T35), 12.3.1_Update4 (FIPS).
  • Jeśli jesteś na 11.x: to gałąź EoL — plan migracji jest obowiązkowy (w praktyce “nie ma co czekać na fix”).

Krok 3 — recovery (po podejrzeniu kompromitacji: rotacja sekretów)

WatchGuard zaleca rotację lokalnie przechowywanych sekretów. Przykładowa lista do odhaczenia:

  • credentials do zarządzania Firebox,
  • Firebox-DB,
  • importowane certyfikaty i klucze prywatne,
  • IPsec PSK (BOVPN/L2TP/mobile IPsec),
  • Log Server PSK,
  • SNMP community / SNMPv3 auth,
  • RADIUS shared secrets,
  • LDAP/AD “searching user” password,
  • DDNS creds, PPPoE creds, itp.

Krok 4 — post-incident hardening

  • Wprowadź stały proces: vuln scanning + szybkie patchowanie dla edge (MITRE mitigation: Update Software, Vulnerability Scanning, Limit Access…).

Przykłady z kampanii / case studies

  • WatchGuard wprost wskazuje, że obserwuje aktywną próbę eksploatacji w środowiskach produkcyjnych.
  • Różne źródła branżowe raportują dużą liczbę wystawionych/podatnych instancji (rzędu ~115k–125k) na podstawie skanów/obserwacji (np. Shadowserver) — to podbija ryzyko “spray-and-pray” na UDP 500/4500.
  • NVD odnotowuje powiązanie z KEV (wpisy dot. “Date Added / Due Date / Required Action” pojawiają się w szczegółach CVE), co w praktyce często koreluje z dojrzałą eksploatacją.

Lab (bezpieczne testy) — przykładowe komendy

A) Test detekcji w SIEM przez “wstrzyknięcie” przykładowego sysloga

Na systemie, który wysyła syslog do SIEM:

logger -p local3.err 'iked[1234]: (203.0.113.1<->203.0.113.2) Received peer certificate chain is longer than 8. Reject this certificate chain'
logger -p local3.info 'iked (203.0.113.1<->203.0.113.2)"IKE_AUTH request" message has 6 payloads [ IDi(sz=21) CERT(sz=3000) SA(sz=44) TSi(sz=24) TSr(sz=24) N(sz=8)]'

Wzorce komunikatów są zgodne z przykładami z advisory.

B) Test “ekspozycji” portów tylko na własnym publicznym IP Firebox

nmap -sU -p 500,4500 -Pn <PUBLIC_IP_FIREBOX>

Cel: potwierdzenie, czy UDP 500/4500 jest wystawione szeroko, czy ograniczone politykami do znanych peerów (hardening).

C) Walidacja hardeningu (bez patcha, doraźnie)

Wykonaj kroki z KB: aliasy + nowe polityki + wyłączenie systemowych “allow IKE”.


Mapowania (Mitigations, Powiązane techniki)

MITRE ATT&CK (technika główna)

  • T1190 — Exploit Public-Facing Application
    • Taktika: Initial Access
    • ATT&CK (strona techniki): Version 2.8, Last Modified 24 Oct 2025

MITRE Mitigations (praktyczne dla CVE-2025-14733)

Z listy mitigacji przypisanych do T1190 (wybrane, najbardziej operacyjne dla Firebox/edge):

  • M1051 Update Software (patch management edge)
  • M1016 Vulnerability Scanning (zewnętrzne skany + szybkie okna patchy)
  • M1035 Limit Access to Resource Over Network (zawężenie UDP 500/4500 do znanych peerów)
  • M1037 Filter Network Traffic (kontrola egress, blokady IoA)
  • M1030 Network Segmentation (DMZ/segmentacja od reszty)

Powiązane techniki (kontekstowe)

  • Exploitation for Defense Evasion (gdy exploit jednocześnie omija kontrolki) oraz Exploitation for Client Execution — MITRE wskazuje, że T1190 może się z tym łączyć zależnie od podatności.

Źródła / dalsza literatura

  • WatchGuard PSIRT Advisory WGSA-2025-00027 (IoA/IoC, wersje naprawione, logi iked). (watchguard.com)
  • WatchGuard blog (lista wydań firmware i nacisk na pilną aktualizację). (watchguard.com)
  • NVD: CVE-2025-14733 (opis, zakres wersji, CWE-787, CVSS). (NVD)
  • CSA Singapore alert (potwierdzenie krytyczności i informacji o eksploatacji). (Cyber Security Agency of Singapore)
  • WatchGuard KB: hardening BOVPN/IKEv2 (aliasy + polityki + wyłączenie systemowych “allow”). (techsearch.watchguard.com)
  • WatchGuard KB: lista sekretów do rotacji po podejrzeniu kompromitacji. (techsearch.watchguard.com)
  • MITRE ATT&CK: T1190 (definicja, platformy, mitigacje, detection strategy). (MITRE ATT&CK)
  • Doniesienia branżowe o skali ekspozycji i atakach: BleepingComputer / SecurityWeek / TheHackerNews. (BleepingComputer)

Checklisty dla SOC / CISO

SOC (operacyjnie)

  • Zidentyfikuj wszystkie Fireboxy i ich wersje Fireware; oznacz EoL 11.x jako P0 do migracji.
  • Sprawdź konfiguracje: Mobile VPN IKEv2 / BOVPN IKEv2 (dynamic peer) + “pozostałości” po konfiguracjach historycznych.
  • Włącz/zbierz logi iked do SIEM; reguły na chain > 8 i CERT > 2000.
  • Koreluj z iked hang/crash oraz ruchem outbound do IoA IP.
  • Po IoA/IOC: uruchom procedurę rotacji sekretów (lista wg KB).

CISO / właściciel ryzyka

  • Wymuś patch/upgrade do wersji naprawionych (SLA “edge”).
  • Zmień standard: IKEv2 nie jest “publiczny dla świata” — tylko znane peer’y (aliasy/polityki).
  • Włącz stałe vulnerability scanning + szybkie okna patchy na urządzeniach brzegowych.