Incydenty typu third-party breach (naruszenie u dostawcy) coraz częściej wywołują największe szkody nie tam, gdzie doszło do włamania, ale u klientów dostawcy. W końcówce 2025 r. dobrym przykładem stał się atak ransomware na Marquis Software Solutions – firmę świadczącą usługi marketingowe, komunikacyjne i analityczne dla banków oraz unii kredytowych. Dwie kolejne instytucje – VeraBank i Artisans’ Bank – oficjalnie poinformowały klientów, że ich dane mogły zostać skopiowane właśnie z systemów dostawcy, a nie z systemów banku.
W skrócie
Kiedy: wykrycie podejrzanej aktywności i potwierdzenie ataku ransomware – 14 sierpnia 2025.
Wektor: dostęp przez urządzenie SonicWall (firewall/VPN) i możliwa kradzież plików.
Skala: Marquis informował, że między 27.10 a 25.11 powiadomił co najmniej 74 instytucje finansowe o potencjalnym objęciu danych incydentem.
Rodzaje danych: m.in. imię i nazwisko, adres, telefon, SSN/TIN, data urodzenia oraz wybrane dane o rachunkach (bez kodów dostępu).
Downstream victims: Artisans’ Bank wskazał naruszenie danych (w tym SSN) ok. 32 344 osób, a w przypadku VeraBank zgłoszono łącznie 37 318 poszkodowanych (szczegóły danych nie zostały ujawnione w listach).
Kontekst / historia / powiązania
Marquis działa jako zewnętrzny dostawca dla sektora finansowego (marketing, komunikacja z klientem, analityka). To ważne, bo takie firmy zwykle przetwarzają „niepubliczne dane osobowe” (PII/NPI) w imieniu banków – często w formie eksportów, list mailingowych, segmentów marketingowych czy danych do personalizacji komunikacji.
W przypadku VeraBank wprost opisano rolę Marquis jako dostawcy „customer communication and data analysis vendor” – czyli podmiotu, który miał dostęp do danych klientów m.in. po to, by kierować komunikaty i dopasowywać ofertę.
Jednocześnie to typ relacji, w którym:
bank może mieć świetną ochronę własnej infrastruktury,
ale ryzyko przenosi się na dojrzałość bezpieczeństwa dostawcy i jego „perimeter” (firewall/VPN).
Analiza techniczna / szczegóły luki
Z dokumentów i doniesień wynika spójny łańcuch zdarzeń:
Initial access przez SonicWall Marquis wskazał, że nieuprawniona osoba uzyskała dostęp do sieci przez ich firewall SonicWall 14.08.2025 i mogła pozyskać wybrane pliki.
Ransomware + komponent exfiltracyjny W komunikacji regulatorom opisano incydent jako ransomware attack. To istotne, bo nowoczesne kampanie ransomware często łączą szyfrowanie z kradzieżą danych (double extortion), co tłumaczy późniejsze powiadomienia banków i klientów.
Zakres danych i model „data owner” W dokumentach podkreślano, że Marquis występuje „w imieniu” klientów biznesowych (banków/credit unions) będących właścicielami danych. Potencjalnie objęte dane to m.in.:
identyfikatory osobowe i kontaktowe (imię, adres, telefon),
identyfikatory podatkowe,
SSN,
daty urodzenia,
pewne informacje o rachunkach bez kodów dostępu.
Brak publicznego przypisania sprawcy Nie ma potwierdzonej grupy, która publicznie wzięłaby odpowiedzialność; Check Point Research wskazywał, że Akira mogła być potencjalnie powiązana z podobnymi nadużyciami dotyczących SonicWall, ale jest to ostrożna atrybucja („possibly”).
Praktyczne konsekwencje / ryzyko
Dla banków i unii kredytowych
Ryzyko tożsamościowe klientów: SSN/TIN + dane kontaktowe i daty urodzenia to zestaw, który sprzyja fraudom i przejęciom kont (także poza bankowością).
Koszty powiadomień i usług ochronnych: w materiałach pojawia się oferowanie monitoringu/ochrony tożsamości (np. modele „complimentary monitoring”).
Ryzyko regulacyjne i reputacyjne: nawet jeśli systemy banku nie zostały naruszone, klienci postrzegają incydent jako „wyciek z banku”.
Dla klientów
spear-phishing pod konkretny bank (atakujący zna instytucję, czasem segment klientów),
próby wyłudzeń kredytowych/pożyczkowych,
podszywanie się w procesach KYC.
Rekomendacje operacyjne / co zrobić teraz
Poniżej zestaw działań, które realnie „domykają” klasę ryzyka widoczną w tym incydencie.
Dla instytucji finansowych (zarządzanie dostawcami)
Inwentaryzacja danych u dostawców (data mapping) Które systemy, jakie eksporty, jaki zakres PII, jak długo przechowywane? (Szczególnie dla vendorów od marketingu/komunikacji).
Minimalizacja danych i ograniczenia retencji Jeśli do kampanii marketingowej wystarczy segment i kanał kontaktu – nie wysyłaj pełnych identyfikatorów.
Wymuszenie wymogów bezpieczeństwa w umowie (i ich audytowalność)
patch management na urządzeniach brzegowych,
MFA/conditional access do paneli i VPN,
EDR + centralne logowanie,
segmentacja sieci i separacja środowisk klientów.
Plan na „vendor breach” Gotowe szablony komunikacji i procedury „kto, kiedy, jak” (regulator, klienci, call center, FAQ).
Dla dostawców technologii/usług (hardening perimeter)
Priorytet dla urządzeń brzegowych (firewall/VPN): szybkie łatki, ograniczenie ekspozycji, monitoring logów i anomalii. (W tym przypadku wprost wskazano SonicWall jako punkt wejścia).
Segmentacja i zasada najmniejszych uprawnień dla repozytoriów z danymi klientów.
DLP i kontrola exfiltracji (proxy, egress filtering, alerty na nietypowe transfery).
Dla klientów końcowych (jeśli dostali powiadomienie)
Włącz monitoring kredytowy/ochronę tożsamości, jeśli jest oferowana.
Ustaw alerty transakcyjne w banku, rozważ zamrożenie kredytu (credit freeze) i uważaj na „pilne” telefony/SMS-y o rzekomym incydencie.
Różnice / porównania z innymi przypadkami (jeśli dotyczy)
Ten incydent dobrze pokazuje różnicę między:
włamaniem do banku (zwykle szybciej widać nadużycia kont, ryzyko operacyjne jest natychmiastowe),
a włamaniem do dostawcy (często opóźnione wykrycie wpływu, długi „ogon” powiadomień, trudniejsza ocena skali).
W praktyce „vendor breach” bywa bardziej destrukcyjny reputacyjnie, bo dotyka wielu instytucji naraz i tworzy efekt domina (jedna luka → dziesiątki banków).
Podsumowanie / kluczowe wnioski
Atak ransomware na Marquis Software to klasyczny przykład ryzyka łańcucha dostaw w finansach: pojedynczy dostawca przetwarzający dane klientów staje się wspólnym punktem awarii.
Wektor wejścia (SonicWall) przypomina, że perimeter nadal bywa najsłabszym ogniwem – zwłaszcza gdy łatki i kontrola dostępu nie są bezwzględnie egzekwowane.
Nawet gdy banki podkreślają, że ich systemy nie zostały naruszone, konsekwencje (powiadomienia, monitoring, ryzyko fraudów) są bardzo realne.
Źródła / bibliografia
The Record (Recorded Future News): informacje o VeraBank i Artisans’ Bank oraz kontekście incydentu Marquis. (The Record from Recorded Future)
Reuters: podsumowanie incydentu i opis wektora (SonicWall) na bazie zgłoszeń do regulatora. (Reuters)
Washington State Office of the Attorney General – dokument (PDF) z opisem incydentu, zakresem danych i harmonogramem powiadomień.
California DOJ (OAG) – wpis o próbce zgłoszenia incydentu (Marquis jako podmiot składający). (California Attorney General)
Check Point Research – wzmianka w raporcie threat intelligence (kontekst i ostrożna atrybucja). (Check Point Research)
Fortinet ostrzega, że podatność CVE-2020-12812 w komponencie FortiOS SSL VPN – znana od 2020 r. – jest ponownie (lub nadal) aktywnie nadużywana w realnych atakach. Mechanizm błędu pozwala w określonych konfiguracjach zalogować się bez wywołania drugiego czynnika (FortiToken), czyli de facto ominąć 2FA/MFA na bramie VPN.
To ważny sygnał operacyjny, bo mówimy o klasie ataków na urządzenia brzegowe (VPN/firewall), gdzie pojedynczy błąd w uwierzytelnianiu potrafi otworzyć drogę do przejęcia kont VPN lub nawet administracyjnych.
W skrócie
CVE: CVE-2020-12812 (FortiOS SSL VPN)
Co umożliwia: ominięcie wymogu 2FA dla wybranych scenariuszy logowania
Warunek „w praktyce”: specyficzna konfiguracja z LDAP + lokalnym użytkownikiem z 2FA + politykami/grupami LDAP
Trik atakującego: zmiana wielkości liter w nazwie użytkownika (case) powoduje, że FortiGate nie dopasowuje wpisu lokalnego (z 2FA) i „spada” do innego mechanizmu uwierzytelnienia
Poprawki/mitigacje: dostępne od FortiOS 6.0.10 / 6.2.4 / 6.4.1 (lipiec 2020) + ustawienia username-sensitivity
Status ryzyka: CVE jest też odnotowane w NVD jako obecne w katalogu KEV CISA (historycznie dodane 2021-11-03)
Kontekst / historia / powiązania
Podatność została ujawniona i zaadresowana w połowie 2020 r., ale Fortinet wskazuje, że obecnie obserwuje „recent abuse” tej luki „in the wild” – przy czym skuteczne wykorzystanie ma dotyczyć konkretnych (często błędnie zaprojektowanych) konfiguracji uwierzytelniania opartego o LDAP.
Z perspektywy długiego ogona ryzyka to typowy problem: urządzenia brzegowe bywają rzadziej aktualizowane, a złożone konfiguracje IAM/LDAP potrafią „przetrwać” lata. W 2021 r. luka była łączona z realnymi kampaniami (w tym ransomware), a fakt jej umieszczenia w ekosystemie ostrzeżeń rządowych (KEV) jest sygnałem, że podatność miała już historię użycia w atakach.
Analiza techniczna / szczegóły luki
Na czym polega błąd?
Rdzeń problemu to niekonsekwentna obsługa wrażliwości na wielkość liter (case sensitivity) pomiędzy FortiGate a katalogiem LDAP.
FortiGate domyślnie traktuje nazwy użytkowników jako case-sensitive.
LDAP (np. katalogi w stylu AD) często działa case-insensitive.
W efekcie logowanie „jsmith” może trafić w lokalny wpis użytkownika, wymusić 2FA, ale logowanie „Jsmith” może już nie dopasować lokalnego użytkownika i uruchomić alternatywną ścieżkę uwierzytelnienia.
Jakie warunki muszą być spełnione (prerequisites)?
Fortinet opisuje dość konkretne wymagania, aby obejście 2FA było możliwe:
Istnieją lokalne wpisy użytkowników na FortiGate z włączonym 2FA, które „odwołują się” do LDAP.
Ci sami użytkownicy należą do grup w LDAP.
Co najmniej jedna z tych grup LDAP jest skonfigurowana na FortiGate i użyta w polityce uwierzytelniania (np. dla adminów, SSL VPN lub IPsec VPN).
Jak wygląda scenariusz obejścia 2FA?
Mechanika (w uproszczeniu, ale technicznie wiernie) jest taka:
Użytkownik loguje się jako jsmith → FortiGate dopasowuje lokalny wpis → żąda tokenu 2FA.
Użytkownik loguje się jako Jsmith / jSmith / inna kombinacja → brak dopasowania wpisu lokalnego → FortiGate sprawdza inne polityki/grupy → jeśli jest „zapasowa” grupa LDAP, uwierzytelnienie może przejść bez 2FA.
Fortinet podkreśla też, że istotnym „katalizatorem” jest często błędna konfiguracja wtórnej (secondary) grupy LDAP, używanej jako mechanizm „failover”, gdy dopasowanie lokalne się nie powiedzie.
Ocena podatności: CVSS i rozbieżności
W NVD dla CVE-2020-12812 widnieje CVSS 3.1: 9.8 (Critical). W części publikacji spotkasz jednak inne wartości (np. oceny vendor-owe lub historyczne), dlatego w praktyce warto patrzeć nie tylko na „cyferkę”, ale na kontekst brzegowego VPN + aktywną eksploatację + obejście 2FA.
Praktyczne konsekwencje / ryzyko
Jeśli warunki konfiguracji są spełnione, skuteczne nadużycie CVE-2020-12812 może prowadzić do:
Nieautoryzowanego dostępu do SSL VPN (z ominięciem 2FA), co ułatwia dalszą penetrację sieci.
Potencjalnego przejęcia uprzywilejowanych ról (np. dostęp administracyjny), jeśli grupy/polityki są tak zbudowane.
Konieczności traktowania konfiguracji jako potencjalnie skompromitowanej w razie wykrycia symptomów (Fortinet wprost sugeruje reset poświadczeń, także dla bindów LDAP/AD).
To szczególnie niebezpieczne, bo „ominięcie 2FA” często bywa postrzegane jako „niemożliwe”, przez co organizacje mogą mieć zbyt słabe monitorowanie ruchu i zdarzeń logowania przy VPN.
Rekomendacje operacyjne / co zrobić teraz
1) Zweryfikuj wersje i stan łatek
Minimalnie upewnij się, że środowisko nie tkwi na liniach podatnych i że wdrożone są mechanizmy z wersji naprawiających zachowanie:
poprawki/mitigacje od: 6.0.10 / 6.2.4 / 6.4.1
2) Włącz „uodpornienie” na różnice w wielkości liter (username sensitivity)
Fortinet wskazuje konkretne ustawienia, które mają zapobiec scenariuszowi „failover” do LDAP bez 2FA:
Dla starszych wydań (wskazanych przez Fortinet) na kontach lokalnych:
set username-case-sensitivity disable
Dla nowszych wersji (m.in. 6.0.13+, 6.2.10+, 6.4.7+, 7.0.1+):
set username-sensitivity disable
To powoduje, że FortiGate traktuje jsmith, JSmith, JSMITH jako ten sam byt i nie „przechodzi bokiem” do alternatywnej polityki/grupy.
3) Przejrzyj konfigurację grup LDAP – szczególnie „secondary/failover”
Jeśli masz wtórną grupę LDAP używaną, gdy lokalne dopasowanie nie wyjdzie, rozważ jej usunięcie, jeśli nie jest wymagana biznesowo. Fortinet wskazuje ten element jako istotny warunek umożliwiający obejście 2FA.
4) Załóż możliwość nadużycia i przygotuj playbook IR
Jeśli istnieją przesłanki, że administratorzy lub użytkownicy VPN logowali się bez 2FA, Fortinet rekomenduje traktować konfigurację jako skompromitowaną oraz wykonać reset poświadczeń, w tym kont/hasła używanego do LDAP/AD binding.
5) Monitoring: na co patrzeć?
Nawet bez pełnych IOC od vendora (Fortinet nie opisuje publicznie szczegółów kampanii), sensowne detekcje to m.in.:
logowania SSL VPN, gdzie nazwa użytkownika pojawia się w nietypowych wariantach case (np. „AdmIn”, „JSmiTh”), szczególnie gdy wiesz, że organizacja normalnie używa jednego formatu;
korelacja: udane logowanie VPN bez spodziewanej ścieżki 2FA (jeśli masz telemetrykę na flow 2FA);
nietypowa aktywność po VPN (nowe urządzenia, nowe geolokacje, enumeracje zasobów, skoki lateralne).
Różnice / porównania z innymi przypadkami
CVE-2020-12812 to dobry przykład, że „MFA wszędzie” nie kończy tematu, jeśli implementacja i polityki mają alternatywne ścieżki (fallback) albo niespójność w identyfikacji użytkownika. W praktyce podobny wzorzec widujemy w:
błędnie skonfigurowanych łańcuchach SSO/LDAP/SAML, gdzie jeden „warunek brzegowy” (tu: case) rozłącza logikę policyjną;
urządzeniach edge, gdzie lata „dziedziczonej” konfiguracji + brak audytu polityk uwierzytelniania tworzą nieoczywiste ścieżki obejścia.
A z punktu widzenia trendów eksploatacji: Fortinet sam w 2025 r. publikował ostrzeżenia o innych nadużywanych podatnościach w swoim portfolio – co potwierdza, że urządzenia tej klasy są stałym celem (szczególnie na styku internet ↔ sieć wewnętrzna).
Podsumowanie / kluczowe wnioski
CVE-2020-12812 nadal żyje operacyjnie: mimo wieku, Fortinet obserwuje jej nadużywanie w 2025 r.
Luka jest w praktyce błędem logiki uwierzytelniania wynikającym z różnic w obsłudze wielkości liter i z polityk/grup LDAP.
Jeśli masz SSL VPN + LDAP + lokalnych użytkowników z 2FA, koniecznie zweryfikuj konfigurację, ustaw username-sensitivity i przejrzyj „secondary LDAP group”.
W razie podejrzenia obejścia 2FA traktuj incydent poważnie: reset poświadczeń (także bindów LDAP/AD) i przegląd konfiguracji/polityk to minimum.
Źródła / bibliografia
Fortinet PSIRT Blog: Product Security Advisory and Analysis: Observed Abuse of FG-IR-19-283 (24.12.2025) (fortinet.com)
BleepingComputer: Fortinet warns of 5-year-old FortiOS 2FA bypass still exploited in attacks (29.12.2025) (BleepingComputer)
NVD (NIST): CVE-2020-12812 Detail (opis, wersje podatne, CVSS, odniesienie do KEV) (NVD)
SecurityWeek: Fortinet Warns of New Attacks Exploiting Old Vulnerability (29.12.2025) (SecurityWeek)
The Hacker News: Fortinet Warns of Active Exploitation of FortiOS SSL VPN 2FA Bypass Vulnerability (25.12.2025) (The Hacker News)
Pod koniec grudnia 2025 ujawniono podatność w MongoDB Server oznaczoną jako CVE-2025-14847, która umożliwia zdalny, nieautoryzowany odczyt fragmentów niezainicjalizowanej pamięci sterty (heap). Kluczowy aspekt: błąd jest osiągalny przed uwierzytelnieniem (pre-auth) i dotyczy ścieżki obsługi kompresji zlib w protokole sieciowym MongoDB.
W praktyce oznacza to, że atakujący może wysyłać specjalnie spreparowane, skompresowane komunikaty i uzyskać odpowiedź zawierającą „śmieci” z pamięci procesu serwera — potencjalnie z wrażliwymi danymi, które akurat znajdowały się w RAM.
W skrócie
Identyfikator: CVE-2025-14847 („MongoBleed”)
Klasa problemu: ujawnienie informacji / wyciek pamięci (odczyt niezainicjalizowanej sterty)
Warunek: ścieżka z zlib dla kompresji wiadomości sieciowych (osiągalne przed auth)
Ocena producenta (CVSS):8.7 (HIGH)
Kogo dotyczy: szeroki zakres wersji MongoDB Server (w tym gałęzie 8.x/7.x/6.x/5.x/4.4 i „legacy” 4.2/4.0/3.6)
Status zagrożenia: Wiz raportuje wykorzystywanie w środowiskach rzeczywistych („in the wild”).
Najlepsza mitigacja: aktualizacja do wersji naprawionych i/lub wyłączenie zlib jako obejście.
Kontekst / historia / powiązania
Nazwa „MongoBleed” nawiązuje do rodzinny incydentów typu bleed (np. Heartbleed): to podobny wzorzec ryzyka, gdzie błąd w obsłudze danych (tu: długości bufora przy dekompresji) skutkuje „wyciekiem” fragmentów pamięci procesu.
Chronologia jest istotna operacyjnie:
Zgłoszenie/aktywny tracking po stronie MongoDB w JIRA datowany jest na 15 grudnia 2025, z informacją o naprawie w kilku liniach wydań.
Media branżowe opisały temat szerzej 27 grudnia 2025.
Kanada (Canadian Centre for Cyber Security) opublikowała alert 24 grudnia 2025 zachęcając do wdrożenia aktualizacji.
Wiz wskazuje na eksploatację w praktyce i podkreśla ryzyko dla instancji wystawionych do Internetu.
Analiza techniczna / szczegóły luki
Gdzie jest błąd?
Sedno problemu leży w obsłudze zlib w warstwie kompresji komunikatów sieciowych MongoDB. Ta logika może zostać uruchomiona zanim serwer zweryfikuje tożsamość klienta (pre-auth), co zwiększa ekspozycję na ataki zdalne.
Mechanizm podatności (w uproszczeniu)
Atakujący wysyła spreparowany, skompresowany komunikat, w którym pola długości (length fields) są niespójne.
W wyniku błędnej obsługi długości po dekompresji serwer może zwrócić do klienta bufor zawierający dane, które nie zostały poprawnie zainicjalizowane — czyli fragmenty pamięci sterty, które należały do wcześniejszych operacji procesu.
W bazie NVD podatność jest opisana jako przypadek CWE-130 (improper handling of length parameter inconsistency), co dobrze oddaje naturę błędu: program operuje na długościach bufora/wiadomości w sposób, który umożliwia odczyt nieprzewidzianych danych.
Jakie wersje są dotknięte i co jest „naprawione”?
NVD wskazuje, że problem dotyczy m.in. gałęzi 7.0 < 7.0.28, 8.0 < 8.0.17, 8.2 < 8.2.3, 6.0 < 6.0.27, 5.0 < 5.0.32, 4.4 < 4.4.30 oraz „legacy” 4.2/4.0/3.6.
W JIRA MongoDB jako remediację podaje aktualizację do: 8.2.3, 8.0.17, 7.0.28, 6.0.27, 5.0.32 lub 4.4.30 oraz sugeruje obejście poprzez wyłączenie zlib. Uwaga praktyczna: w tym samym wpisie JIRA pojawia się lista „dotkniętych wersji” obejmująca zakres „8.2.0 through 8.2.3”, ale jednocześnie wskazana jest 8.2.3 jako wersja z poprawką — w działaniach operacyjnych najlepiej trzymać się zasady: upgrade co najmniej do wersji wymienionych jako naprawione.
Praktyczne konsekwencje / ryzyko
To nie jest typowy „database auth bypass”, ale nadal jest to podatność o realnych skutkach:
Ryzyko ujawnienia sekretów w pamięci: w zależności od obciążenia procesu i środowiska, w RAM mogą pojawić się np. dane aplikacyjne, fragmenty dokumentów, tokeny, klucze, elementy sesji lub inne wrażliwe artefakty. Źródła podkreślają możliwość wycieku wrażliwych danych z pamięci.
Ułatwienie dalszej kompromitacji: nawet jeśli sam błąd jest „tylko” disclosure, wycieki pamięci bywają świetnym paliwem do kolejnych etapów ataku (rozpoznanie, kradzież poświadczeń, obejścia mechanizmów obronnych). To już zależy od tego, co uda się wydobyć.
Wysoka ekspozycja instancji publicznych: ponieważ wektor jest sieciowy i pre-auth, szczególnie narażone są serwery MongoDB wystawione do Internetu.
Sygnały o aktywnych nadużyciach: Wiz opisuje przypadki wykorzystania podatności „in the wild”. W praktyce to oznacza, że „łatki jutro” mogą być już „za późno” dla instancji publicznych.
Rekomendacje operacyjne / co zrobić teraz
Poniżej zestaw działań w kolejności priorytetu (dla zespołów SecOps/DevOps/SRE):
Zidentyfikuj ekspozycję i wersje
Sprawdź wersje mongod/mongos w całym estate (produkcyjnie i wewnętrznie).
W pierwszej kolejności traktuj jako krytyczne systemy Internet-facing (bezpośredni dostęp z Internetu).
Zaktualizuj do wersji naprawionych
MongoDB wskazuje upgrade do: 8.2.3 / 8.0.17 / 7.0.28 / 6.0.27 / 5.0.32 / 4.4.30 (w zależności od linii).
Jeśli nie możesz patchować natychmiast — wyłącz zlib (workaround)
Producent rekomenduje wyłączenie kompresora zlib przez ustawienie networkMessageCompressors lub net.compression.compressors tak, aby pominąć zlib (np. pozostawiając snappy,zstd albo ustawiając „disabled”, zależnie od konfiguracji).
Ogranicz powierzchnię ataku
Zablokuj dostęp do portów MongoDB z Internetu (firewall/security groups/ACL).
Wymuś zasady „default deny” i dopuszczaj tylko znane źródła (np. aplikacje, bastiony, segmenty).
Nawet jeśli masz auth — pamiętaj, że ten bug jest pre-auth, więc liczy się też twarda kontrola sieciowa.
Monitoring i hunting (minimum)
Szukaj anomalii w ruchu do MongoDB: nietypowa liczba połączeń, krótkie sesje, nietypowe nagłówki/kompresja, skoki błędów/protocol errors.
Dla instancji publicznych rozważ tymczasowo ostrzejsze rate-limity oraz WAF/IPS na brzegu (o ile architektura na to pozwala). (To są dobre praktyki — same źródła skupiają się na patch/disable zlib.)
Użytkownicy MongoDB Atlas
Wiz wskazuje, że instancje Atlas zostały automatycznie zaktualizowane, natomiast self-hosted pozostają ryzykowne do czasu patchowania.
Różnice / porównania z innymi przypadkami
MongoBleed vs klasyczne RCE: tu głównym skutkiem jest wyciek informacji z pamięci, nie „natychmiastowe przejęcie” serwera. Jednak wycieki mogą prowadzić do eskalacji (np. przez zdobycie sekretów), więc w praktyce traktuje się je bardzo poważnie.
MongoBleed vs Heartbleed: podobieństwo jest w modelu skutku (czytanie fragmentów pamięci), różnica w miejscu błędu (tu: logika dekompresji wiadomości w MongoDB i niespójność długości, tam: implementacja heartbeat w TLS). Nazwa „MongoBleed” jest wprost inspirowana Heartbleed.
Pre-auth jako „game changer”: wiele podatności w bazach danych wymaga przynajmniej podstawowej interakcji po zalogowaniu; tutaj ścieżka jest osiągalna wcześniej, co faworyzuje masowe skanowanie i automatyzację.
Podsumowanie / kluczowe wnioski
CVE-2025-14847 („MongoBleed”) to poważna podatność typu pre-auth memory disclosure w MongoDB, powiązana z obsługą zlib. Producent ocenia ją na CVSS 8.7 (HIGH), a zewnętrzne raporty wskazują na aktywne wykorzystanie w środowiskach rzeczywistych.
Jeśli utrzymujesz MongoDB samodzielnie:
Patch natychmiast do wersji wskazanych jako naprawione, a jeśli to niemożliwe — wyłącz zlib jako obejście.
Weryfikuj ekspozycję sieciową: instancje publiczne to priorytet „P0”.
Źródła / bibliografia
NVD: CVE-2025-14847 (opis, wektory, zakres wersji, CVSS od CNA) NVD
MongoDB JIRA: SERVER-115508 (opis, wersje naprawione, workaround wyłączenia zlib) jira.mongodb.org
Wiz: „MongoBleed (CVE-2025-14847) exploited in the wild” (kontekst ryzyka, pre-auth, sygnały eksploatacji) wiz.io
Incydent z pakietem lotusbail pokazuje najbardziej podstępny wariant ataku na łańcuch dostaw oprogramowania (software supply chain): biblioteka działa dokładnie tak, jak obiecuje, a jednocześnie w tle kradnie dane i buduje trwały backdoor.
W tym przypadku cel był szczególnie wrażliwy — integracje z WhatsApp Web API wykorzystywane w botach, automatyzacji obsługi klienta, narzędziach CRM czy systemach powiadomień. Złośliwy pakiet został opublikowany w ekosystemie npm jako fork popularnej biblioteki Baileys i osiągnął ponad 56 000 pobrań.
W skrócie
Co to jest?lotusbail to złośliwy pakiet npm podszywający się pod bibliotekę WhatsApp Web API (fork @whiskeysockets/baileys).
Co kradnie? Tokeny i klucze sesyjne, pełną historię wiadomości (we/wy), kontakty (z numerami), pliki multimedialne i dokumenty.
Jak działa? Opakowuje legalnego klienta WebSocket i przechwytuje ruch, zanim trafi do właściwej logiki aplikacji.
Dlaczego jest groźny po usunięciu? Może po cichu podłączyć urządzenie atakującego do konta WhatsApp, więc samo odinstalowanie zależności nie wystarcza — trzeba ręcznie odłączyć urządzenia w WhatsApp.
Timeline (jawny w źródłach): pakiet miał być w rejestrze ok. 6 miesięcy, a według doniesień został wrzucony w maju 2025 przez użytkownika wskazanego w publikacjach branżowych.
Status w rejestrach: baza Snyk wskazuje, że zawartość pakietu została usunięta z „oficjalnego menedżera pakietów” (typowy „placeholder” po takedownie). To nie cofa skutków u osób, które już zainstalowały zależność.
Kontekst / historia / powiązania
Atak wykorzystał zaufanie do:
popularności (dziesiątki tysięcy pobrań),
podobieństwa do legalnego projektu (fork Baileys),
To kluczowa różnica względem typowych typosquatów i „śmieciowych” paczek — tutaj złośliwy kod jest schowany w cieniu poprawnie działającej biblioteki, więc przechodzi nawet przez ręczny review „na oko”.
Analiza techniczna / szczegóły „luki”
1) Warstwa przykrywki: realnie działające WhatsApp API
lotusbail bazuje na podejściu znanym z Baileys: komunikacja z WhatsApp Web odbywa się przez WebSocket. Złośliwy pakiet „owija” (wrapuje) legalnego klienta WebSocket, dzięki czemu każda wiadomość i zdarzenie przechodzą przez jego kod.
2) Kradzież danych: tokeny, sesje, wiadomości, kontakty, media
Według analizy badaczy, przechwytywane są m.in.:
authentication tokens i session keys,
pełna treść wiadomości przychodzących i wychodzących (łącznie z historią),
Sygnał ostrzegawczy nr 1: biblioteka „od WhatsApp” nie powinna potrzebować własnej implementacji kryptografii do ochrony danych — WhatsApp i tak szyfruje treść E2E. W lotusbail zastosowano niestandardowe RSA do szyfrowania skradzionych danych przed wysłaniem na serwer atakującego.
Sygnał ostrzegawczy nr 2: konfiguracja serwera eksfiltracji i elementy ładunku są zaciemnione (obfuscation). Opisy wskazują m.in. warstwy typu manipulacje Unicode, kompresję (np. LZString), dodatkowe kodowania oraz AES.
4) Persistence/backdoor: ciche podpięcie urządzenia atakującego (device pairing)
Najbardziej toksyczny element to przejęcie procesu parowania urządzeń WhatsApp. Zamiast używać losowego kodu parowania generowanego w normalnym procesie, malware ma wykorzystywać „twardo zaszyty” pairing code, ukryty i zaszyfrowany (m.in. AES). Efekt: przy autoryzacji aplikacji ofiary atakujący może automatycznie dołączyć swoje urządzenie jako „linked device”.
Konsekwencja operacyjna: nawet po usunięciu pakietu atakujący może zachować dostęp, dopóki ofiara ręcznie nie odłączy wszystkich urządzeń w ustawieniach WhatsApp.
5) Anti-analysis: pułapki na debug i sandbox
W opisie incydentu pojawia się informacja o ~27 pułapkach antydebugowych (m.in. pętle blokujące wykonanie po wykryciu narzędzi analitycznych). To typowe dla kampanii, które zakładają, że kod trafi do reverse engineeringu.
Praktyczne konsekwencje / ryzyko
Jeżeli lotusbail trafił do Twojego środowiska (dev/stage/prod), traktuj to jak incydent przejęcia kanału komunikacji:
Ujawnienie poufnych danych: treści rozmów, dane klientów, załączniki, metadane kontaktów.
Przejęcie tożsamości w WhatsApp: wysyłka wiadomości jako ofiara, phishing do kontaktów, oszustwa BEC-like na „zaufanym kanale”.
Trwała kompromitacja: jeśli urządzenie atakującego zostało podpięte, dostęp może trwać mimo usunięcia paczki.
Ryzyko prawne i compliance: potencjalny wyciek danych osobowych i tajemnicy korespondencji (w tym danych wrażliwych przesyłanych przez użytkowników).
Rekomendacje operacyjne / co zrobić teraz
A) Szybka weryfikacja (triage)
Przeszukaj repozytoria i artefakty buildów pod kątem lotusbail:
package.json, package-lock.json / npm-shrinkwrap.json, lockfile w CI.
Sprawdź, czy pakiet nie został wciągnięty tranzytywnie (dependency tree).
Przejrzyj logi egress (proxy/NAT/firewall) pod kątem nietypowych połączeń wychodzących z hostów budujących/uruchamiających integrację WhatsApp.
B) Ograniczenie skutków (containment)
Usuń zależność i zablokuj ją w politykach (allowlist/denylist).
Jeśli integracja miała dostęp do konta WhatsApp:
natychmiast przejdź do WhatsApp → Linked devices / Połączone urządzenia i odłącz wszystkie podejrzane wpisy (w praktyce często najbezpieczniej: odłączyć wszystko i sparować ponownie).
Traktuj tokeny/sesje jako skompromitowane: rotacja wszelkich sekretów w środowisku, w którym działał proces (API keys, webhook secrets, dane dostępowe w vaultach).
C) Detekcja i hardening (żeby to się nie powtórzyło)
Wymuś kontrolę łańcucha dostaw w CI/CD:
budowanie wyłącznie z lockfile i w trybie deterministycznym (np. „clean install”),
skan SCA (Snyk/OSV/GHAS itp.) + polityki blokujące „malicious package”.
Korzystaj z sygnałów heurystycznych:
biblioteka komunikacyjna nagle zawiera custom RSA, warstwy obfuscation, antydebug — to powinno odpalać alarm.
Włącz kontrolę zachowania w runtime (nie tylko statyczne skanowanie):
monitoruj nietypowe domeny/IP w egress,
ogranicz egress dla build runnerów i środowisk produkcyjnych (zasada najmniejszych uprawnień również dla sieci).
D) Status pakietu i „false sense of safety”
Nawet jeśli rejestr „zdjął” pakiet lub podmienił go na placeholder, to:
zainstalowane kopie nadal mogą siedzieć w cache’ach, obrazach kontenerów i artefaktach,
część szkód (np. podpięte urządzenie WhatsApp) jest poza npm.
Różnice / porównania z innymi przypadkami
Co wyróżnia lotusbail na tle klasycznych incydentów npm?
„Functional malware”: paczka jest użyteczna i przechodzi testy funkcjonalne, więc trafia do produkcji szybciej niż typowy typosquat.
Persistence poza kodem: mechanizm device linking sprawia, że skutki mogą utrzymywać się po odinstalowaniu — to rzadsze niż w standardowych kradzieżach tokenów.
Zaawansowane ukrywanie: wielowarstwowa obfuskacja + własna kryptografia + antydebug sugerują dobrze zaprojektowaną operację, a nie „jednorazowy strzał”.
Podsumowanie / kluczowe wnioski
lotusbail to podręcznikowy przykład, że „działa” nie znaczy „jest bezpieczne”. Atakujący wykorzystali naturalny odruch deweloperów: jeśli biblioteka spełnia wymagania i ma pobrania, to budzi zaufanie. Tutaj to zaufanie zostało zamienione na:
kradzież treści komunikacji i danych kontaktowych,
przejęcie sesji,
oraz — co najgorsze — trwałe podpięcie urządzenia atakującego do konta WhatsApp.
Źródła / bibliografia
Koi Security (Tuval Admoni), analiza lotusbail (21 grudnia 2025). (Koi)
Security Affairs, podsumowanie incydentu i aspekty antydebug/pairing (27 grudnia 2025). (Security Affairs)
BleepingComputer, dodatkowe szczegóły dot. przechwytywania i obfuskacji (22 grudnia 2025). (BleepingComputer)
The Hacker News, dane o publikacji i kontekście (22 grudnia 2025). (The Hacker News)
Snyk Vulnerability DB, rekord „Malicious Package” i informacja o usunięciu zawartości (publ. 24 grudnia 2025). (VulnInfo Guide)
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:
Szyfrowanie i eksfiltracja aktywnej konfiguracji Fireboxa do adresu IP, z którego pochodzi atak.
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).
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:
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.
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
Dark Reading – „Threat Actors Exploit Zero-Day in WatchGuard Firebox Devices” (22.12.2025). (Dark Reading)
WatchGuard PSIRT – WGSA-2025-00027 (advisory, aktualizacje m.in. 23.12.2025). (watchguard.com)
WatchGuard Blog – „Immediate Action Required – Update Your Firebox Now” (18.12.2025). (watchguard.com)
NVD (NIST) – CVE-2025-14733 (metryki CVSS, status i kontekst KEV). (NVD)
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).
Czy net.compression.compressors nadal zawiera zlib (domyślnie zawiera)
„Skany” i bursty połączeń do MongoDB
Sysmon EID 3 + firewall
(opcjonalnie) GuardDuty/VPC Flow Logs poza CloudTrail
N/A
N/A
Wysoka liczba krótkich połączeń, nietypowe geolokacje/ASN, brak auth events (bo pre-auth)
Działania IR/patch
EID 1/4688 (restart usługi), systemd logs
StartInstances/StopInstances (jeśli robisz)
rollout restart, delete pod
N/A
Okno 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):
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ć)
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”.
Netflow/VPC Flow Logs/NSG Flow Logs: wzrost liczby połączeń do 27017 z nietypowych ASN/geo + krótkie sesje.
MongoDB logs: dużo connection accepted bez towarzyszących zdarzeń auth/audit (pre-auth).
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
Triage ekspozycji
Sprawdź, czy MongoDB jest Internet-facing (SG/NSG/Firewall/Ingress).
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
Remediacja docelowa
Upgrade do wersji naprawionej (jw.).
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”.
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
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.
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.)
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 / warstwa
EID (Windows)
CloudTrail events
K8s audit
M365 operations
Co warto zbierać / na co patrzeć
Dostęp do interfejsu web/API smartRTU
N/A
N/A
N/A
N/A
Logi HTTP (reverse proxy/WAF), metoda POST/PUT/DELETE, nietypowe URI, skoki 4xx/5xx, nietypowe UA, duże payloady
Firewall / IDS/IPS
N/A
N/A
N/A
N/A
Inbound 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/A
N/A
N/A
Nietypowe 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/A
N/A
N/A
N/A
Syslog/audit (o ile jest), historia poleceń, zmiany konfiguracji, restarty usług/urządzenia
WAF (jeśli publikujesz web)
N/A
(raczej) N/A
N/A
N/A
Reguł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
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ę).
Źródło spoza polityki dostępu: jakikolwiek request do panelu/API smartRTU z IP spoza allowlist (VPN/management VLAN).
Zmiany konfiguracyjne / restarty: anomalia w dostępności RTU, restart usług, zmiany parametrów – skorelowane czasowo z nietypowym ruchem do web/API.
Skanowanie: rozproszony ruch do portów zarządczych (80/443) poprzedzający właściwe wywołania.
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