W styczniu 2026 r. ponownie głośno zrobiło się o CVE-2020-12812 – luce w FortiOS SSL VPN, która pozwala ominąć drugi składnik uwierzytelniania (FortiToken/2FA) w określonej konfiguracji. Co istotne, mimo że poprawki są dostępne od lipca 2020 r., w internecie nadal widać ponad 10 000 urządzeń Fortinet wystawionych na ataki wykorzystujące tę podatność.
CVE-2020-12812 to klasyczny przykład ryzyka na styku „patching + konfiguracja + urządzenia brzegowe”: nawet jeśli organizacja „ma 2FA”, błędne założenia o tym, jak działa dopasowanie tożsamości użytkownika (np. wielkość liter w loginie) mogą otworzyć furtkę.
W skrócie
Co to jest? Luka „improper authentication” w FortiOS SSL VPN, umożliwiająca zalogowanie bez wywołania drugiego składnika (2FA) po zmianie wielkości liter w nazwie użytkownika.
Jak poważna? CVSS v3.1: 9.8 (Critical).
Kogo dotyczy? Wg NVD m.in. FortiOS: 6.4.0, 6.2.0–6.2.3, 6.0.9 i niżej (naprawione odpowiednio w 6.4.1 / 6.2.4 / 6.0.10).
Czy to jest realnie wykorzystywane? Fortinet opublikował analizę „Observed Abuse” i potwierdził nadużycia w środowiskach produkcyjnych (grudzień 2025).
Skala ekspozycji: raporty monitoringu internetu wskazują na >10k niezałatanych urządzeń widocznych publicznie.
Kontekst / historia / powiązania
Choć CVE ma „2020” w nazwie, problem jest dziś aktualny z trzech powodów:
Urządzenia brzegowe (SSL VPN) są stale skanowane, a „stare” luki pozostają opłacalne, bo część organizacji nie aktualizuje firmware’u lub ma ograniczenia utrzymaniowe.
Konfiguracja jest kluczowa: ten bypass nie musi działać na każdym FortiGate – zwykle wymaga specyficznego zestawu ustawień związanych z LDAP i sposobem mapowania użytkowników.
CVE-2020-12812 znajduje się w kontekście szerszego trendu: SSL VPN (Fortinet i nie tylko) to „złota żyła” dla operatorów ransomware i grup APT, bo daje szybki dostęp do sieci wewnętrznej.
NVD wskazuje też, że ta podatność jest ujęta w katalogu Known Exploited Vulnerabilities (KEV) CISA (z datą dodania i terminem wymuszenia działań dla agencji federalnych USA).
Analiza techniczna / szczegóły luki
Sedno problemu: różnica w traktowaniu wielkości liter
Fortinet opisuje mechanizm bardzo konkretnie: FortiGate domyślnie traktuje nazwy użytkowników jako case-sensitive, podczas gdy LDAP/AD zazwyczaj nie. W określonej konfiguracji prowadzi to do sytuacji, w której zmiana wielkości liter w loginie powoduje „rozminięcie się” z lokalnym wpisem użytkownika na urządzeniu i ominięcie ścieżki 2FA.
Warunki podatności (prerequisites) – kiedy to działa?
Zgodnie z analizą Fortinet, organizacja musi mieć łącznie m.in.:
lokalne wpisy użytkowników na FortiGate z włączonym 2FA, które odwołują się do LDAP,
tych samych użytkowników w grupach na serwerze LDAP,
co najmniej jedną z tych grup skonfigurowaną na FortiGate i użytą w polityce uwierzytelniania (np. admin, SSL VPN, IPsec VPN).
Scenariusz obejścia 2FA
Fortinet podaje przykład:
logowanie jako jsmith → dopasowanie do lokalnego użytkownika → token jest wymagany,
logowanie jako Jsmith / jSmith itd. → brak dopasowania „case-exact” do lokalnego wpisu → FortiGate przechodzi do alternatywnych polityk uwierzytelniania i może uwierzytelnić użytkownika bez drugiego składnika.
To ważne operacyjnie: atakujący nie musi „łamać” 2FA kryptograficznie. Wykorzystuje logikę dopasowania tożsamości w łańcuchu auth.
Praktyczne konsekwencje / ryzyko
Jeśli SSL VPN jest wystawiony do internetu (a często jest), a konfiguracja spełnia warunki podatności, skutki mogą obejmować:
nieautoryzowany dostęp zdalny do sieci (wejście przez VPN),
eskalację (np. przez dostęp do zasobów wewnętrznych po VPN),
zwiększone ryzyko incydentów typu ransomware / human-operated intrusions, gdzie pierwszym krokiem jest stabilny dostęp do sieci ofiary.
Dodatkowo, obserwowana skala niezałatanych systemów (ponad 10 tys.) oznacza, że atakujący mogą prowadzić ciągłe, zautomatyzowane kampanie nastawione na „łatwe trafienia”.
Rekomendacje operacyjne / co zrobić teraz
Poniżej lista działań w kolejności, która zwykle daje najszybszy spadek ryzyka:
1) Ustal, czy jesteś w zakresie wersji podatnych
Według NVD podatność dotyczy m.in. FortiOS 6.4.0, 6.2.0–6.2.3, 6.0.9 i niżej; poprawki: 6.4.1+, 6.2.4+, 6.0.10+.
2) Sprawdź, czy masz „podatną konfigurację LDAP + local users + 2FA”
Zweryfikuj dokładnie warunki opisane przez Fortinet (lokalne wpisy z 2FA „wracające” do LDAP + grupy LDAP użyte w politykach auth).
3) Wprowadź mitigację konfiguracyjną (jeśli nie możesz natychmiast aktualizować)
Fortinet wskazuje wyłączenie wrażliwości na wielkość liter dla nazw użytkowników na kontach lokalnych (nazwy poleceń zależą od wersji).
Przykładowo (logika wg Fortinet – dostosuj do swojej wersji i standardów zmian):
# Na starszych wersjach (wg Fortinet)
set username-case-sensitivity disable
# Na nowszych wersjach (wg Fortinet: v6.0.13, v6.2.10, v6.4.7, v7.0.1+)
set username-sensitivity disable
4) Ogranicz ekspozycję SSL VPN i powierzchnię ataku
Jeśli możesz: nie wystawiaj SSL VPN publicznie (dostęp tylko z sieci zaufanych / przez bastion).
Wymuś allowlist IP, geofencing (jeśli sensowne biznesowo), oraz twarde reguły IDS/IPS na brzegach.
5) Wykrywanie i monitoring (quick wins)
Szukaj w logach prób logowania z nietypową kapitalizacją (Jsmith, jsmiTh) oraz wzorców „success bez token prompt”.
Koreluj zdarzenia VPN z nietypowych ASN/VPN hostingów i świeżymi kontami/zmianami w grupach LDAP.
Różnice / porównania z innymi przypadkami
CVE-2020-12812 jest inne niż wiele popularnych luk SSL VPN, bo to błąd logiczny w procesie auth, a nie typowe RCE. W praktyce jednak efekt bywa podobny: uzyskanie dostępu do brzegu sieci. Tenable zwraca uwagę, że równolegle (historycznie) mocno wykorzystywane były też inne luki Fortinet/SSL VPN (np. odczyt plików / path traversal), a „legacy VPN vulns” pozostają atrakcyjne dla APT i ransomware.
Wniosek: MFA nie jest „magiczną tarczą”, jeśli integracja tożsamości i polityki uwierzytelniania mają rozjazdy (tu: case-sensitivity).
Podsumowanie / kluczowe wnioski
CVE-2020-12812 to krytyczna luka (CVSS 9.8) w FortiOS SSL VPN, pozwalająca ominąć 2FA przez manipulację wielkością liter w loginie – ale tylko w określonej konfiguracji LDAP/2FA.
Fortinet potwierdził nadużycia w realnych atakach (grudzień 2025), a monitoring internetu wskazuje >10 tys. publicznie wystawionych, niezałatanych urządzeń.
Najskuteczniejsze działania „na już”: aktualizacja do wersji naprawionych + mitigacja case-sensitivity + ograniczenie ekspozycji SSL VPN.
GlassWorm to wielofalowa kampania typu supply chain wymierzona w ekosystem rozszerzeń Visual Studio Code (Microsoft Visual Studio Marketplace) oraz Open VSX (alternatywny, „vendor-neutral” rejestr używany m.in. przez edytory kompatybilne z VS Code). Atak polega na publikowaniu trojanizowanych rozszerzeń, które po instalacji uruchamiają kolejne etapy infekcji: kradzież tokenów i danych, instalację backdoora oraz – w najnowszej odsłonie – próbę podmiany aplikacji obsługujących portfele sprzętowe na wersje złośliwe.
Istotna zmiana w fali 4: po wcześniejszym skupieniu na Windows, kampania przeniosła ciężar na macOS (deweloperów), co ma sens operacyjny – to popularna platforma w software housach i środowiskach krypto/Web3.
W skrócie
Kogo atakują? Deweloperów na macOS instalujących zaufanie-budujące rozszerzenia VS Code/Open VSX.
Jak? 3 podejrzane rozszerzenia na Open VSX zawierają zaszyfrowany (AES-256-CBC) payload w skompilowanym JavaScript, uruchamiany po opóźnieniu ~15 minut.
Po co? Kradzież danych (tokeny GitHub/NPM, dane przeglądarki, Keychain), celowanie w portfele krypto (rozszerzenia i aplikacje desktop), a w fali 4 także mechanizm podmiany Ledger Live i Trezor Suite.
C2/odporność infrastruktury: utrzymany został mechanizm C2 oparty o blockchain Solana (dynamiczne wskazywanie endpointów).
Kontekst / historia / powiązania
Październik 2025: kampania została opisana jako atak wykorzystujący m.in. „niewidzialne” znaki Unicode do ukrycia złośliwego kodu w rozszerzeniach.
Kolejne fale: napastnicy wracali mimo nagłośnienia i usuwania złośliwych pozycji z marketplace’ów.
Reakcja ekosystemu: zespół Open VSX (Eclipse Foundation) podkreślał, że incydent został opanowany, usuwał złośliwe rozszerzenia i wprowadzał zmiany w zarządzaniu tokenami oraz skanowaniu publikacji.
W praktyce ta historia pokazuje typowy problem obrony w łańcuchu dostaw: nawet po „cleanupie” i wzmacnianiu kontroli, atakujący iterują techniki dostarczania (Unicode → binaria/kompilacja → szyfrowany JS + opóźnienia) i przenoszą cele na najbardziej „opłacalne” środowiska.
Analiza techniczna / szczegóły luki
1) Nośnik: złośliwe rozszerzenia (Open VSX / VS Code)
W fali 4 badacze wskazali trzy identyfikatory rozszerzeń (Open VSX), powiązane z macOS-owym łańcuchem infekcji:
2) Dostarczenie i unikanie detekcji: szyfrowanie + opóźnienie
Zamiast „niewidzialnego” Unicode, payload jest opakowany w AES-256-CBC i zaszyty w skompilowanym JavaScript. Dodatkowo logika wykonuje się po ok. 15 minutach, co utrudnia sandboxing (wiele automatycznych analiz dynamicznych kończy się szybciej).
W porównaniu do wcześniejszych podejść (np. PowerShell/Registry na Windows), fala 4 używa natywnych dla macOS mechanizmów:
AppleScript do wykonania etapów wstępnych,
LaunchAgents jako mechanizm persystencji,
próby pozyskania haseł z Keychain (w tym wskazywane jest też pozyskanie samej bazy Keychain).
4) C2 na blockchainie Solana (odporność na „takedown”)
Mechanizm C2 pozostaje kluczowym elementem kampanii: malware ma pobierać aktualne endpointy (np. URL) z danych powiązanych z aktywnością w sieci Solana, co utrudnia klasyczne blokowanie domen/serwerów „na sztywno”.
Najbardziej niepokojący element fali 4: kod sprawdza obecność Ledger Live i Trezor Suite, a następnie ma próbować pobrać i zainstalować ich trojanizowane odpowiedniki (po usunięciu legalnej aplikacji). Badacze odnotowali też, że w momencie testów część endpointów mogła zwracać puste pliki, przez co sama podmiana mogła „cicho” nie dojść do skutku – ale mechanizm jest już gotowy.
Przykładowe IoC (wartości z publicznych analiz)
Podejrzane rozszerzenia: jak wyżej (3 ID).
Wskazywane IP infrastruktury (C2/eksfil): m.in. 45.32.151.157, 45.32.150.251 (oraz historycznie 217.69.11.60).
Portfel/identyfikator wykorzystywany w mechanizmie Solana-C2 (podawany przez badaczy): BjVeAjPrSKFiingBn4vZvghsGj9KCE8AJVtbc9S8o8SC.
Praktyczne konsekwencje / ryzyko
Ryzyko kradzieży tożsamości deweloperskiej: tokeny i dane dostępowe do GitHub/NPM mogą przełożyć się na kolejne kompromitacje (repozytoria, paczki, pipeline’y CI/CD).
Ryzyko finansowe (krypto): celowanie w portfele przeglądarkowe i desktopowe oraz eskalacja w stronę portfeli sprzętowych oznaczają potencjalnie wyższy „payoff” dla atakujących.
Ryzyko lateral movement i trwałej obecności: persystencja (LaunchAgents) + zdalny dostęp/pośrednictwo ruchu (historycznie opisywane jako VNC/SOCKS) może zmienić stację deweloperską w punkt wejścia do sieci firmowej.
Natychmiastowy audyt rozszerzeń VS Code na macOS (szczególnie instalowanych z Open VSX), z naciskiem na nowe/mało znane wydawców oraz „podejrzanie podobne” nazwy (np. podszywanie się pod popularne narzędzia typu formatter/theme).
Wymuś allow-listę rozszerzeń (organizacyjnie) i ogranicz możliwość instalacji z nieautoryzowanych marketplace’ów, jeśli to możliwe.
Hunting na macOS pod kątem persystencji: przegląd ~/Library/LaunchAgents oraz /Library/LaunchAgents, korelacja z czasem instalacji rozszerzeń VS Code.
Monitoring procesów i zachowań:
nietypowe użycie osascript / AppleScript w kontekście VS Code,
odwołania do narzędzia security i operacji na Keychain,
nietypowe archiwizowanie/staging danych w katalogach tymczasowych (w analizach wskazywano staging w /tmp).
Blokady i detekcje sieciowe (z rozwagą): dodaj do watchlisty wskazywane IP/ścieżki eksfiltracji, ale traktuj je jako zmienne (Solana-C2 ułatwia rotację).
Rotacja sekretów: jeśli wykryjesz podejrzane rozszerzenia na endpointach deweloperskich, załóż kompromitację tokenów (GitHub PAT, NPM, SSH keys) i wykonaj kontrolowaną rotację oraz przegląd logów dostępu.
Dla deweloperów
Instaluj rozszerzenia tylko od zweryfikowanych wydawców i weryfikuj, czy linki/identyfikatory wydawcy zgadzają się z projektem.
Ogranicz uprawnienia i ekspozycję sekretów w środowisku developerskim (np. osobne konta, krótkie TTL tokenów, minimalne scope).
Jeśli używasz Ledger/Trezor: zwróć uwagę na nagłe reinstalacje/„aktualizacje” aplikacji i weryfikuj podpisy/pochodzenie instalatorów (szczególnie po instalacji nowych rozszerzeń).
Różnice / porównania z innymi przypadkami
Fale 1–2: nacisk na ukrywanie kodu przez „niewidzialne” Unicode (w tym klasy znaków, które potrafią umykać typowym ostrzeżeniom) i kradzież danych deweloperskich/krypto.
Fala 3: odejście od „niewidzialnego” kodu w stronę trudniejszych w analizie artefaktów (np. natywnych/kompilowanych), utrzymanie Solana-C2.
Fala 4 (teraz):pełny pivot na macOS + AES-256-CBC w JS + opóźnienie 15 min + LaunchAgents/Keychain oraz wyraźna eskalacja w stronę podmiany Ledger Live i Trezor Suite.
To nie jest „jednorazowy incydent marketplace’u”, tylko kampania, która iteruje TTP pod presją publikacji i działań porządkowych.
Podsumowanie / kluczowe wnioski
GlassWorm w 4. fali pokazuje, że deweloperskie marketplace’y są atrakcyjnym wektorem APT-like dla cyberprzestępców (skala + zaufanie + dostęp do sekretów).
Pivot na macOS i próby podmiany Ledger/Trezor to sygnał, że kampania celuje w środowiska o wysokiej wartości (krypto, Web3, startupy).
Obrona „perymetrem” i samymi IOC nie wystarczy: potrzebne są polityki instalacji rozszerzeń, kontrola sekretów i detekcja behawioralna na endpointach deweloperskich.
Jak sezon urlopowy tworzy lukę operacyjną w cyberobronie (i co z tym zrobić)
Święta – dla większości z nas czas odpoczynku i wyciszenia. Dla hakerów? Wręcz przeciwnie – to okres żniw. Cyberprzestępcy dosłownie „kochają” długie weekendy i przerwy świąteczne, bo wtedy czujność obrony jest najniższa. Zespoły bezpieczeństwa (SOC, blue team) pracują często w okrojonym składzie albo pełnią dyżury zdalnie, podczas gdy atakujący nie biorą urlopu. Rezultat?
Na kilka dni przed Bożym Narodzeniem 2025 r. francuski operator pocztowy La Poste odnotował poważne zakłócenia w usługach online – od śledzenia przesyłek po elementy bankowości elektronicznej La Banque Postale. Z perspektywy cyberbezpieczeństwa nie była to „klasyczna luka” w oprogramowaniu, tylko atak DDoS (Distributed Denial of Service): przeciążenie usług ogromną liczbą żądań w taki sposób, by legalni użytkownicy nie mogli z nich korzystać. La Poste potwierdziła, że incydent miał charakter odmowy usługi i zadeklarowała brak wpływu na dane klientów.
W skrócie
Atak rozpoczął się 22 grudnia 2025 i spowodował niedostępność/niestabilność wielu usług internetowych La Poste.
Ucierpiały m.in. kanały online oraz elementy usług bankowych (szczególnie dostęp do bankowości online/aplikacji), przy zachowaniu działania części operacji w placówkach oraz płatności z SMS-owym uwierzytelnianiem.
Grupa NoName057(16) (prorosyjski kolektyw „hacktywistyczny”) ogłosiła odpowiedzialność, ale pojawiły się publiczne głosy ostrożności wobec takich deklaracji (ryzyko „opportunistic claiming”).
Francuskie organy ścigania wszczęły postępowanie, a DGSI przejęła sprawę po pojawieniu się roszczeń sprawców.
Kontekst / historia / powiązania
Według relacji medialnych NoName057(16) działa od początku pełnoskalowej inwazji Rosji na Ukrainę (2022) i jest znana z koordynowania relatywnie prostych, ale uciążliwych kampanii DDoS wymierzonych w Ukrainę i państwa wspierające ją politycznie.
W przypadku La Poste śledztwo dotyczy przede wszystkim celowego zakłócenia działania systemu przetwarzania danych (typowy kwalifikator dla incydentów DDoS w kontekście prawnym), a sama firma złożyła zawiadomienie.
Analiza techniczna / szczegóły luki
Co wiemy pewnego (z komunikatów i doniesień)
La Poste wprost wskazała na denial-of-service jako charakter ataku, oraz podkreśliła brak wpływu na dane klientów.
Incydent spowodował niedostępność usług online i niestabilność w kolejnych godzinach/dniach; część funkcji bankowych pozostała dostępna (np. płatności z SMS), a operacje w placówkach działały.
Co jest prawdopodobne (mechanika DDoS w takim scenariuszu)
W praktyce ataki na instytucje masowe (poczta/bank) zwykle łączą:
warstwę L7 (HTTP/S) – zasypywanie aplikacji i API (np. tracking, logowanie, sesje),
oraz/lub warstwę L3/L4 – wolumetryczne zalewanie łącz i urządzeń brzegowych.
Efekt biznesowy jest podobny: usługa „jest”, ale dla klientów wygląda jak awaria (timeouty, błędy 5xx, niedostępne aplikacje), a zespoły operacyjne przechodzą w tryb gaszenia pożaru: ograniczanie funkcji, przekierowania, priorytetyzacja najważniejszych systemów.
Uwaga o „przyznaniu się” sprawców
Le Monde opisał, że deklaracja NoName057(16) widziana na Telegramie nie zawierała twardych dowodów, a dodatkowo wskazywała domenę, która w obserwowanym momencie nie była już zakłócona — co pasuje do znanego zjawiska „opportunistic claiming”, gdy grupy przypisują sobie głośne incydenty dla rozgłosu. To nie wyklucza ich udziału – ale operacyjnie oznacza jedno: atrybucję trzeba opierać na telemetrii (logach na brzegu/CDN/WAF, NetFlow, wzorcach botów, korelacji czasowej), a nie wyłącznie na wpisach w social media.
Praktyczne konsekwencje / ryzyko
Zakłócenie łańcucha operacji: nawet jeśli sortowanie i doręczenia trwają, brak trackingu i niedostępne kanały cyfrowe eskalują liczbę zgłoszeń i koszt obsługi (call center, reklamacje). La Poste raportowała problemy m.in. z dostępnością centrów telefonicznych.
Uderzenie w zaufanie: atak na operatora „usług krytycznych w praktyce” (poczta + bank) w szczycie sezonu wzmacnia efekt psychologiczny – dokładnie to, na czym DDoS „hacktywistyczny” często żeruje.
Ryzyko wtórne: DDoS bywa dymną zasłoną dla innych działań (np. próby nadużyć, ataki na konta, fraud), bo SOC/NOC jest przeciążony zdarzeniami dostępnościowymi. Tego w tym przypadku nie potwierdzono, ale warto mieć w playbookach.
Rekomendacje operacyjne / co zrobić teraz
Jeśli odpowiadasz za usługi publiczne (logowanie, tracking, płatności, bankowość, e-administracja), ten incydent to dobry pretekst do szybkiego „health check”:
Weryfikacja architektury anty-DDoS: CDN/Anycast na zasobach statycznych i API, WAF z sensownymi regułami, rate limiting per endpoint, ochrona przed botami (device fingerprint, challenge).
Odporność DNS i punktów krytycznych: rozproszeni dostawcy DNS, krótkie procedury przełączeń, monitoring błędów NXDOMAIN/SERVFAIL.
Degradacja kontrolowana: tryby „read-only”, cache’owanie wyników (np. tracking), priorytetyzacja ruchu (np. partnerzy logistyczni vs. frontend), kolejki/„waiting room”.
Observability i dowody: trzymanie telemetrii z brzegu (CDN/WAF) + NetFlow, aby móc udowodnić wektor i skalę; to krytyczne również przy komunikacji z organami ścigania i ubezpieczycielem.
Komunikacja kryzysowa: jasny status page, aktualizacje co X godzin, rozdzielenie „awaria usług” od „brak naruszenia danych” – La Poste wyraźnie podkreśliła drugi element i to ogranicza panikę.
Różnice / porównania z innymi przypadkami (jeśli dotyczy)
DDoS vs ransomware: tu mówimy o dostępności, nie o szyfrowaniu czy wycieku. La Poste wprost wskazała brak wpływu na dane klientów, co odróżnia incydent od typowych kryzysów typu „data breach”.
„Hacktywiści” vs APT: kampanie NoName057(16) są często masowe i nastawione na efekt medialny/zakłóceniowy. To nie znaczy, że są „nieszkodliwe” – zwłaszcza gdy trafiają w organizacje o ogromnym wolumenie transakcji w krótkim oknie czasowym.
Atrybucja: ten przypadek pokazuje klasyczny problem: „ktoś się przyznał” ≠ „mamy dowody”. Le Monde przytoczył ostrzeżenia przed spóźnionymi, oportunistycznymi roszczeniami.
Podsumowanie / kluczowe wnioski
Atak na La Poste (od 22 grudnia 2025) to podręcznikowy przykład, jak DDoS potrafi uderzyć w gospodarkę i społeczne zaufanie bez naruszania danych. Najbardziej wartościowa lekcja dla organizacji cyfrowych jest prosta: odporność na DDoS to nie tylko „większe łącze”, ale zestaw praktyk – architektura brzegowa, kontrolowana degradacja, twarda telemetria i dojrzała komunikacja. A jeśli sprawcy „chwalą się” w social media, trzeba pamiętać, że bez dowodów technicznych to wciąż tylko element wojny informacyjnej.
Źródła / bibliografia
The Record (Recorded Future News): informacje o roszczeniu NoName057(16), skali zakłóceń i tle działań grupy. (The Record from Recorded Future)
La Poste Groupe: oficjalny komunikat o ataku DoS, wpływie na usługi i braku wpływu na dane klientów. (La Poste Groupe)
TechCrunch: przebieg incydentu i podsumowanie wpływu na usługi online/bankowe. (TechCrunch)
Associated Press: kontekst śledztwa i przejęcia sprawy przez DGSI. (AP News)
Le Monde (AFP): szczegóły dot. postępowania (UNC/DGSI) oraz ostrożność wobec deklaracji sprawców. (Le Monde.fr)
DNS poisoning (zatrucie odpowiedzi DNS) to technika, w której atakujący powoduje, że ofiara rozwiązuje prawidłową domenę do nieprawidłowego (atakującego) adresu IP. W efekcie użytkownik może łączyć się „z właściwym adresem w pasku przeglądarki”, ale faktycznie trafia na serwer kontrolowany przez napastnika — a to idealny punkt wyjścia do cichej dystrybucji malware, zwłaszcza przez mechanizmy aktualizacji o słabej walidacji.
W grudniu 2025 Kaspersky opisał kampanię przypisaną do chińskojęzycznego APT Evasive Panda (alias m.in. Daggerfly/BRONZE HIGHLAND/StormBamboo), w której DNS poisoning posłużył do dostarczania backdoora MgBot w wysoce ukierunkowanych atakach obserwowanych między listopadem 2022 a listopadem 2024.
W skrócie
Kto: Evasive Panda / Daggerfly (G1034 w MITRE ATT&CK), powiązany z Chinami i znany z ekskluzywnego użycia MgBot.
Co: ukierunkowana dystrybucja MgBot przez DNS poisoning + fałszywe aktualizacje popularnych aplikacji.
Gdzie: ofiary wykryte w Türkiye, Chinach i Indiach; część hostów utrzymywana w kompromitacji ponad rok.
Jak: wieloetapowy łańcuch loaderów i shellcode’u, pobieranie kolejnego etapu jako „PNG” z domeny dictionary[.]com po uprzedniej manipulacji DNS, a następnie szyfrowanie hybrydowe DPAPI+RC5 wiążące payload z konkretną maszyną.
Kontekst / historia / powiązania
Evasive Panda jest aktywny co najmniej od 2012 r., a MITRE wskazuje na jego profil ofiar (m.in. podmioty rządowe/NGO/telekomy) oraz powiązanie z kampaniami o charakterze supply-chain.
To nie pierwsza historia, w której ta grupa „wchodzi w ścieżkę zaufania” użytkownika:
ESET (kwiecień 2023) opisał przypadek, gdzie kanały aktualizacji legalnych aplikacji zostały przejęte/hijackowane, aby podsunąć instalator MgBot — z rozważanymi hipotezami supply-chain lub ataku typu adversary-in-the-middle.
Volexity (sierpień 2024) pokazał scenariusz jeszcze cięższego kalibru: DNS poisoning na poziomie ISP, gdzie podmieniano odpowiedzi DNS dla domen mechanizmów aktualizacji, szczególnie gdy aktualizacje szły po HTTP i bez weryfikacji podpisu.
W kampanii opisanej przez Kaspersky, startem infekcji był plik udający update do aplikacji (np. SohuVA). Telemetria wskazała pobieranie z zasobu pod domeną p2p.hd.sohu.com[.]cn, a badacze ocenili, że mogło dojść do DNS poisoning, które kierowało ofiarę na serwer atakującego mimo użycia „prawidłowej” domeny. Kaspersky dopisał też analogiczny schemat z „fałszywym updaterem” m.in. dla iQIYI, uruchamianym przez legalny qiyiservice.exe, oraz podobne podejście wobec IObit Smart Defrag i Tencent QQ.
2) Loader i etap shellcode: podszycie pod legalny projekt
Loader był napisany w C++ (WTL) i miał przypominać przykładową aplikację (sample) — co utrudnia szybkie odróżnienie „zwykłego” binarium od złośliwego.
3) DNS poisoning jako kanał dostarczania kolejnego etapu (dictionary[.]com)
Istotny fragment łańcucha: jeśli lokalny plik z danymi nie był obecny, shellcode przechodził do pobrania zaszyfrowanych danych z „web source” kontrolowanego przez atakującego, ale realizowanego poprzez DNS poisoning — w telemetrii wyglądało to jak pobranie „PNG” z legalnego dictionary[.]com. Co ważne, manipulacja miała być selektywna: ofiary rozwiązywały dictionary[.]com do różnych adresów IP w zależności od geolokalizacji i ISP.
4) „Sprytna” kryptografia: DPAPI + RC5, czyli payload związany z hostem
Kaspersky opisał hybrydę, w której klucz RC5 jest zaszyfrowany DPAPI i zapisany w pierwszych bajtach pliku (perf.dat), a reszta zawartości to payload szyfrowany RC5. Taki zabieg utrudnia analizę, bo DPAPI wiąże odszyfrowanie z konkretną maszyną.
5) In-memory execution i wstrzyknięcie MgBot
Po odszyfrowaniu kolejnego etapu secondary loader inicjuje uruchomienie/iniekcję (m.in. wskazano wstrzyknięcie wariantu MgBot do legalnego svchost.exe). Konfiguracja (m.in. nazwa kampanii, adresy C2) miała być odszyfrowywana prostym XOR, a część infrastruktury C2 wygląda na używaną wieloletnio.
Praktyczne konsekwencje / ryzyko
Zaufanie do DNS i update’ów jako punkt pojedynczej porażki. Jeśli DNS zostanie „skręcony” (na ISP, w sieci firmowej, na routerze), to nawet rozsądne zachowania użytkownika mogą nie wystarczyć — bo ofiara pobiera „aktualizację” spod znanej domeny.
Długotrwała, cicha kompromitacja. W tej kampanii część hostów pozostawała zainfekowana ponad rok, a całość (według telemetrii) trwała ok. 2 lata: XI 2022 – XI 2024.
Trudniejsza analiza i detekcja. Unikalne, per-ofiara elementy (np. dobór odpowiedzi po nagłówkach/wersji Windows) oraz szyfrowanie powiązane z hostem utrudniają triage, sandboxing i „łatwe” IOC-driven hunting.
Rekomendacje operacyjne / co zrobić teraz
Priorytet 1: uszczelnij aktualizacje (software supply chain w skali mikro)
Wymuszaj aktualizacje po HTTPS i z weryfikacją podpisów (oraz blokuj aktualizatory, które tego nie robią). Volexity wskazywał, że atakujący wybierali oprogramowanie z niepewnymi mechanizmami update (np. HTTP, brak walidacji podpisu).
W środowiskach firmowych rozważ allowlistę dla updaterów i repozytoriów aktualizacji oraz kontrolę uruchamiania binariów (AppLocker/WDAC).
Priorytet 2: zredukuj ryzyko manipulacji DNS
Przestaw stacje/serwery na zaufane resolvery i rozważ DoH/DoT (tam, gdzie to zgodne z polityką), aby utrudnić podmianę odpowiedzi po drodze na poziomie dostawcy. Uwaga: to nie „magiczna tarcza”, jeśli atakujący siedzi na brzegu sieci lub na urządzeniu końcowym — ale ogranicza klasę ataków na trasie. (W omawianej kampanii mechanizm poisoning pozostaje nie w pełni wyjaśniony).
Monitoruj rozbieżności DNS (np. porównanie odpowiedzi z kilku resolverów, alerty na nagłe zmiany A/AAAA dla popularnych domen).
Priorytet 3: hunting/IR pod kątem tej kampanii
Sprawdź artefakty ścieżek i plików wskazywanych w analizie (m.in. %ProgramData%\Microsoft\MF, status.dat, perf.dat) oraz nietypowe biblioteki/dropy związane z loaderem.
Poluj na podejrzane połączenia do znanych adresów C2 i anomalie w ruchu HTTP związane z pobieraniem „obrazów PNG” z domen, które normalnie nie służą do dystrybucji binariów.
Różnice / porównania z innymi przypadkami
ESET 2023: fokus na „przejęte aktualizacje” i rozważane scenariusze supply-chain/AitM przy dystrybucji MgBot.
Volexity 2024: twardy dowód na poisoning na poziomie ISP i wykorzystywanie słabych mechanizmów aktualizacji (HTTP, brak weryfikacji).
Kaspersky 2025: nacisk na selektywną dystrybucję kolejnych etapów (np. dictionary[.]com rozwiązywany do różnych IP zależnie od ISP/geo) oraz na utrudnianie analizy poprzez DPAPI+RC5 i in-memory injection.
Wspólny mianownik: atakowanie „zaufanych ścieżek” (DNS + aktualizacje), gdzie klasyczne „nie klikaj w linki” ma ograniczoną wartość, bo użytkownik i system robią to, co zwykle.
Podsumowanie / kluczowe wnioski
Kampania Evasive Panda opisana pod koniec grudnia 2025 r. to podręcznikowy przykład, jak DNS poisoning może stać się „niewidzialnym przewodem” do dystrybucji backdoora MgBot: ofiara widzi legalne domeny, a mimo to pobiera złośliwy kod. Dodatkowo, hybrydowe szyfrowanie (DPAPI+RC5) oraz selektywne odpowiedzi po DNS/HTTP podnoszą koszt obrony i analizy.
Jeśli chcesz zmniejszyć ekspozycję na tę klasę operacji, najwięcej „zysku za wysiłek” dają: twarda polityka bezpiecznych aktualizacji, sensowne zarządzanie DNS (i jego monitoring) oraz przygotowane playbooki huntingowe pod MgBot/Evasive Panda.
Źródła / bibliografia
The Hacker News — China-Linked Evasive Panda Ran DNS Poisoning Campaign to Deliver MgBot Malware (26.12.2025) (The Hacker News)
Kaspersky Securelist — Evasive Panda APT poisons DNS requests to deliver MgBot (24.12.2025) (Securelist)
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).
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:
Lokalne konta użytkowników na FortiGate z włączonym 2FA, które jednocześnie „odsyłają” do LDAP.
Ci sami użytkownicy są członkami grup na serwerze LDAP/AD.
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
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?
Wprowadź ustawienie unifikujące nazwy użytkowników
Zastosuj rekomendowane przez Fortinet ustawienie username-…-sensitivity disable adekwatne do wersji FortiOS.
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ą.
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.
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
Fortinet PSIRT Blog: Product Security Advisory and Analysis: Observed Abuse of FG-IR-19-283 (24.12.2025) (Fortinet)
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)
The Hacker News: relacja o ostrzeżeniu Fortinet i aktywnych atakach (24.12.2025) (The Hacker News)
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.)