Archiwa: APT - Strona 17 z 32 - Security Bez Tabu

Ponad 10 tys. firewalli Fortinet wciąż podatnych na obejście 2FA: powrót CVE-2020-12812 w kampaniach ataków

Wprowadzenie do problemu / definicja luki

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:

  1. 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.
  2. 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.
  3. 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.

Źródła / bibliografia

  1. BleepingComputer – „Over 10K Fortinet firewalls exposed to actively exploited 2FA bypass” (02.01.2026) (BleepingComputer)
  2. Fortinet PSIRT Blog – „Observed Abuse of FG-IR-19-283 / CVE-2020-12812” (24.12.2025) (Fortinet)
  3. NVD (NIST) – karta podatności CVE-2020-12812 (opis, CVSS, wersje, KEV) (NVD)
  4. Tenable – „Fortinet vulnerabilities targeted by APT actors” (08.04.2021) (Tenable®)

GlassWorm wraca w 4. fali: macOS na celowniku, a wtyczki VS Code próbują podmieniać aplikacje portfeli (Ledger/Trezor)

Wprowadzenie do problemu / definicja luki

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:

  • studio-velte-distributor.pro-svelte-extension
  • cudra-production.vsce-prettier-pro
  • Puccin-development.full-access-catppuccin-pro-extension

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).

3) macOS TTP: AppleScript + LaunchAgents + Keychain

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”.

5) Eskalacja: podmiana aplikacji portfeli sprzętowych

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

  1. 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).
  2. 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.
  3. 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.
  4. Trudniejszy „takedown”: C2 oparte o Solanę komplikuje tradycyjne podejście „zablokuj domenę/serwer”.

Rekomendacje operacyjne / co zrobić teraz

Dla zespołów SOC/IR i IT

  • 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.

Źródła / bibliografia

  1. KOI Security – GlassWorm Goes Mac: Fresh Infrastructure, New Tricks (29.12.2025). (koi.ai)
  2. BleepingComputer – New GlassWorm malware wave targets Macs with trojanized crypto wallets (01.01.2026). (BleepingComputer)
  3. Endor Labs – Invisible Threats and the Blind Spots of Security: How GlassWorm Exploited Unicode Shadows… (endorlabs.com)
  4. Truesec – GlassWorm – Self-Propagating VSCode Extension Worm (21.10.2025). (Truesec)
  5. SecurityWeek – Open VSX Downplays Impact From GlassWorm Campaign (31.10.2025). (SecurityWeek)

Dlaczego Hakerzy 'Kochają’ Święta

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?

Czytaj dalej „Dlaczego Hakerzy 'Kochają’ Święta”

Atak DDoS na La Poste tuż przed świętami: NoName057(16) ogłasza „sukces”, DGSI przejmuje śledztwo

Wprowadzenie do problemu / definicja luki

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

  1. 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.
  2. 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.
  3. 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)

Evasive Panda i DNS poisoning: jak „fałszywe aktualizacje” dostarczały MgBot w latach 2022–2024

Wprowadzenie do problemu / definicja luki

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.

Analiza techniczna / szczegóły luki

1) „Aktualizacja” jako przynęta: SohuVA / iQIYI / Tencent QQ / IObit

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

  1. 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.
  2. 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.
  3. 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

  1. The Hacker News — China-Linked Evasive Panda Ran DNS Poisoning Campaign to Deliver MgBot Malware (26.12.2025) (The Hacker News)
  2. Kaspersky Securelist — Evasive Panda APT poisons DNS requests to deliver MgBot (24.12.2025) (Securelist)
  3. Volexity — StormBamboo Compromises ISP to Abuse Insecure Software Update Mechanisms (02.08.2024) (Volexity)
  4. ESET WeLiveSecurity — Evasive Panda APT group delivers malware via updates for popular Chinese software (26.04.2023) (We Live Security)
  5. MITRE ATT&CK — Daggerfly / Evasive Panda (G1034) (aktualizacja: 31.10.2024) (MITRE ATT&CK)

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

Wprowadzenie do problemu / definicja luki

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

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


W skrócie

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

Kontekst / historia / powiązania

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

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

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


Analiza techniczna / szczegóły luki

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

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

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

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

W uproszczeniu:

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

Wersje i „łatka konfiguracyjna”

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

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

Praktyczne konsekwencje / ryzyko

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

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

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


Rekomendacje operacyjne / co zrobić teraz

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

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

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

Różnica jest taka, że:

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

Podsumowanie / kluczowe wnioski

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

Źródła / bibliografia

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

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

TL;DR

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


Krótka definicja techniczna (1 akapit)

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


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

Windows (self-hosted):

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

AD (Active Directory):

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

AWS (EC2 / EKS / self-managed):

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

Azure (VM / AKS):

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

GCP (Compute Engine / GKE):

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

Kubernetes (K8s):

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

ESXi:

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

M365:

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

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


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

Negocjacja kompresji i dlaczego zlib ma znaczenie

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

Co realnie wycieka z heap i jak to eskaluje ryzyko

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

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

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

Dlaczego to pasuje do ATT&CK T1190

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


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

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

Detekcja (praktyczne reguły)

Sigma (gotowa reguła)

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

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

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

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

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

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

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


Splunk (SPL)

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

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

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

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

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

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

KQL (Azure / Microsoft Sentinel)

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

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

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

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

CloudTrail query (AWS CLI/CloudWatch)

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

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

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

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

Elastic (EQL) przykłady

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

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

B) Start mongod/mongos z parametrami wysokiego ryzyka:

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

Heurystyki / korelacje (co łączyć)

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

False positives / tuning

Typowe FP:

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

Tuning:

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

Playbook reagowania

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

Przykłady z kampanii / case studies

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

Lab (bezpieczne testy) — przykładowe komendy

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

Mapowania (Mitigations, Powiązane techniki)

ATT&CK (główne):

  • T1190 Exploit Public-Facing ApplicationTA0001 Initial Access

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

Mitigations (praktycznie):

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

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

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

Źródła / dalsza literatura

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

Checklisty dla SOC / CISO

SOC (operacyjnie, dziś):

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

CISO / Risk:

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