Po co nam tyle dystrybucji bezpieczeństwa? Krótki kontekst techniczny
W świecie cyberbezpieczeństwa Linux odgrywa szczególną rolę – to fundament wielu narzędzi i środowisk do testów bezpieczeństwa, analizy incydentów czy ochrony prywatności. Zwykła dystrybucja Ubuntu czy Fedora oczywiście może zostać wyposażona w potrzebne programy, ale istnieją gotowe systemy tworzone z myślą o konkretnych zadaniach.
Microsoft opublikował listopadowy pakiet poprawek zabezpieczeń obejmujący 63 luki (CVE) w Windows i komponentach ekosystemu (Office, Edge (Chromium), Azure Monitor Agent, Dynamics 365, Hyper-V, SQL Server, WSLg itd.). Wśród nich znajduje się jeden zero-day aktywnie wykorzystywany – CVE-2025-62215 (eskalacja uprawnień w jądrze Windows), a także kilka krytycznych RCE (m.in. GDI+ CVE-2025-60724) oraz podatności dotykających workflow deweloperskich i rozszerzeń z obszaru Copilot/Agentic AI.
Zero-day:CVE-2025-62215 – Windows Kernel EoP (wyścig zdarzeń/race condition). Wymaga lokalnego dostępu, ale często łączony z RCE w łańcuchu ataku. Priorytet 1 do patchowania.
Krytyczne RCE:
CVE-2025-60724 (GDI+) – CVSS 9.8, możliwa zdalna eksploatacja przez przetwarzanie specjalnie spreparowanych plików/metafili; ryzyko dla usług parsujących dokumenty bez interakcji użytkownika.
CVE-2025-62199 (Office) – RCE; „Preview Pane jako wektor” (ostrożnie: Microsoft wskazuje wymaganą interakcję użytkownika).
Inne istotne:Azure Monitor Agent RCE (CVE-2025-59504), WSLg RCE (CVE-2025-62220), DirectX/CLFS EoP, podatności CoPilot/Agentic AI (RCE/SFB, np. CVE-2025-62222).
Produkcyjne wskazówki: szybkie wdrożenie aktualizacji, czasowe wyłączenie Preview Pane w Outlook/Explorer, izolacja pracy z plikami Office, aktualizacja AMA/WSLg z linii poleceń, kontrola polityk makr i niepodpisanych rozszerzeń VS/VS Code. (Dowody w sekcjach niżej).
Kontekst / historia / powiązania
W październiku 2025 Microsoft łatał rekordowe 172 luki, w tym kilka aktywnie wykorzystywanych. Listopad przynosi wyraźne uspokojenie liczby CVE, ale charakter błędów (kernel EoP, GDI+ 9.8, Office/Preview Pane, elementy chmury/agentów) sprawia, że ich priorytet operacyjny pozostaje wysoki. Różne serwisy raportują rozbieżne liczby (63/66/68/80) – wynika to m.in. z uwzględniania/nie uwzględniania CVE chromium/Edge, komponentów zewnętrznych i aktualizacji dokumentacyjnych. Najbardziej spójne i techniczne podsumowania dla adminów publikują ZDI i Tenable – w tym materiale opieramy się głównie na nich oraz na przeglądzie Briana Krebsa.
Analiza techniczna / szczegóły luki
1) Zero-day: CVE-2025-62215 — Windows Kernel EoP (race condition)
Typ: Elevation of Privilege (lokalne, wymaga uwierzytelnienia).
Opis: warunek wyścigu w jądrze Windows, pozwalający atakującemu „wygrać” przełączenie stanu i uzyskać SYSTEM.
Zastosowanie w praktyce: łączone z RCE (phishing/dokument/serwis www) → post-exploitation: trwała eskalacja i obejście EDR przez uruchamianie implantów z uprawnieniami jądra/procesu krytycznego.
Status:aktywnie wykorzystywana w środowisku (zero-day). CVSS v3: 7.0, Important (niska zdalność, wysoka waga po połączeniu).
Wskazówka laboratoryjna (blue team): w telemetrii EDR szukaj anomalii w przełączaniu integrities (Low/Medium → SYSTEM), nietypowych uchwytów do urządzeń jądra i „daisy-chain” tuż po uruchomieniu niepodpisanego binarium z katalogów tymczasowych.
2) CVE-2025-60724 — GDI+ RCE (CVSS 9.8)
Wektor: przetwarzanie specjalnie spreparowanych metafili/obrazów (GDI+).
Ryzyko: potencjalna eksploatacja bez interakcji po stronie usług, które parsują dokumenty (np. previewer, usługi konwersji/ekstrakcji metadanych, serwerowe procesory plików).
Dlaczego istotne: GDI+ bywa bramką do RCE w aplikacjach serwerowych oraz pecetach skanujących pliki przychodzące (DLP, AV, indeksowanie).
3) CVE-2025-62199 — Microsoft Office RCE (Preview Pane)
Fakt kluczowy:Preview Pane wskazany jako wektor; jednocześnie Microsoft opisuje wymóg interakcji użytkownika (niespójność noty). Praktycznie: rozważ wyłączenie podglądu w Outlook/Explorer do czasu wdrożenia poprawek.
GPO (wyłączenie podglądu w Outlook):
Windows Registry Editor Version 5.00
; Outlook – wyłącz okienko podglądu
[HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Preferences]
"ReadingPaneOptions"=dword:00000000
(W środowiskach korporacyjnych preferuj ADMX/Group Policy zamiast pojedynczych wpisów rejestru.)
Charakter:nieuwierzytelnione RCE możliwe do wywołania z sieci przy podatnej konfiguracji.
Znaczenie: AMA jest szeroko stosowany w zbieraniu logów/telemetrii; kompromitacja może dać pivot do zasobów IaaS/serwerów hybrydowych.
Działanie: aktualizacja agenta i walidacja ekspozycji portów.
Aktualizacja AMA z linii poleceń (Windows):
# Aktualizacja rozszerzenia Azure Monitor Agent na VM z Azure (Az module)
$vm = Get-AzVM -Name "prod-app-01" -ResourceGroupName "RG-Prod"
Set-AzVMExtension -ResourceGroupName $vm.ResourceGroupName -VMName $vm.Name `
-Name "AzureMonitorWindowsAgent" -Publisher "Microsoft.Azure.Monitor" `
-Type "AzureMonitorWindowsAgent" -TypeHandlerVersion "1.29" -AutoUpgradeMinorVersion $true
5) WSLg — Windows Subsystem for Linux GUI RCE (CVE-2025-62220)
Opis: RCE w komponencie GUI WSL. Wymaga interakcji użytkownika (otwarcie przygotowanego pliku/akcji).
Patchowanie:aktualizacja WSL z poziomu wiersza poleceń (poza klasycznym Windows Update).
Aktualizacja WSL:
wsl.exe --update
wsl.exe --status
6) DirectX / CLFS — kolejne EoP
DirectX (EoP) i CLFS (EoP): historycznie CLFS bywało wielokrotnie wykorzystywane przez ransomware i APT do podniesienia uprawnień. Nie są oznaczone jako „exploited”, ale to wysoki priorytet twardnienia.
7) Copilot / Agentic AI / VS Code — RCE i SFB (np. CVE-2025-62222)
Trend: pierwsze wzmianki o lukach określanych jako dotyczące „Agentic AI” i integracji narzędzi deweloperskich.
Ryzyko:remote code execution na repozytoriach ofiary połączone ze spoofingiem/prompt-injection i niewystarczającą walidacją wygenerowanych artefaktów.
Reakcja: wymuś review i podpisywanie rozszerzeń/agentów, ogranicz automatyczne wykonywanie skryptów generowanych przez narzędzia asystujące.
Praktyczne konsekwencje / ryzyko
Łańcuchy ataku „phish → RCE → kernel EoP”: CVE-2025-62199 (Office/Preview Pane) lub CVE-2025-60724 (GDI+) daje inicjalny kod, CVE-2025-62215 zapewnia SYSTEM i trwałość.
Ryzyko serwerowe: serwisy przetwarzające pliki (skanery, konwertery, DLP, podglądy) narażone na GDI+ 9.8; hosty z AMA eksponowane na sieć — RCE bez auth.
DevSecOps: IDE/VS/VS Code i rozszerzenia Copilot/Agentic AI — nowy wektor: supply-chain w procesie developerskim.
Rekomendacje operacyjne / co zrobić teraz
1) Patch management (priorytet A — 24/48 h):
Windows/Office/SQL/WSLg/AMA na wszystkich hostach. Zacznij od systemów z ekspozycją internetową oraz stacjach z wysokim ryzykiem (helpdesk, finanse, GRC).
Wzorzec EoP po RCE (pliki tymczasowe → SYSTEM) – Microsoft Defender for Endpoint (KQL):
DeviceProcessEvents
| where InitiatingProcessIntegrityLevel in ("Low","Medium")
| where ProcessIntegrityLevel == "System"
| where Timestamp > ago(3d)
| summarize count(), any(ProcessCommandLine) by DeviceName, InitiatingProcessFileName, ProcessName
Podejrzane preview/parsowanie plików Office:
DeviceFileEvents
| where Timestamp > ago(3d)
| where FileName matches regex @"\.(docx|xlsx|rtf|emf|wmf)$"
| where InitiatingProcessFileName in ("splwow64.exe","mspreview.exe","prevhost.exe","outlook.exe")
| summarize count() by DeviceName, InitiatingProcessFileName, FileName
Odnalezienie stacji z włączonym okienkiem podglądu (Outlook) – zapytanie PowerShell/Remoting, raport do CSV:
Mniej CVE vs. październik 2025, ale większa „jakość” ryzyka: zero-day w kernelu, GDI+ 9.8, łańcuchy z Office/Preview i elementy agentów/AI.
Rozbieżności liczby CVE (63 vs. 66/68/80) wynikają z liczenia komponentów Chromium, Edge, czasem Adobe lub dokumentowanych wcześniej poprawek; dla operacji patchowania najwierniejsze bywają listy ZDI/Tenable zsynchronizowane z MSRC.
Podsumowanie / kluczowe wnioski
Patchuj teraz – szczególnie systemy narażone i stacje użytkowników wysokiego ryzyka. CVE-2025-62215 (kernel EoP) jest aktywnie wykorzystywana i często domyka łańcuch po RCE.
Zamknij Preview Pane i ogranicz otwieranie dokumentów zewnętrznych do czasu pełnego wdrożenia łatek. Office RCE (CVE-2025-62199) i GDI+ (CVE-2025-60724) to realne wektory.
Zaktualizuj AMA i WSLg osobno, przejrzyj ekspozycję usług i uprawnienia kont serwisowych.
Ucywilizuj narzędzia Dev (VS/VS Code/Copilot/Agentic AI): allow-listy, podpisy, zasada „review przed run”, egzekwuj AllSigned.
Źródła / bibliografia
Brian Krebs, „Microsoft Patch Tuesday, November 2025 Edition” — przegląd miesiąca i kontekst wdrożeniowy. (Krebs on Security)
Zero Day Initiative (Trend Micro), „The November 2025 Security Update Review” — lista CVE, omówienia GDI+/Office/AMA/WSLg/Agentic AI, wskazanie zero-day CVE-2025-62215. (Zero Day Initiative)
Tenable, „Microsoft’s November 2025 Patch Tuesday Addresses 63 CVEs (CVE-2025-62215)” — metryki i zestawienie dotkniętych komponentów. (Tenable®)
BleepingComputer, „Microsoft November 2025 Patch Tuesday fixes 1 zero-day, 63 flaws” — potwierdzenie skali i statusu 0-day. (BleepingComputer)
SANS Internet Storm Center, „Microsoft Patch Tuesday for November 2025” — ujęcie operacyjne i komentarz do krytycznych poprawek. (SANS Internet Storm Center)
Badacze bezpieczeństwa odkryli szeroko zakrojoną kampanię spamowo-szkodliwą w ekosystemie npm, w której opublikowano dziesiątki tysięcy paczek zawierających samoreplikujący się kod („robaka”), masowo generujący i publikujący nowe, losowo nazwane pakiety. Incydent jest przypisywany operatorowi posługującemu się językiem indonezyjskim i bywa określany jako „IndonesianFoods” lub „Big Red”. Celem nie jest klasyczne wykradanie sekretów, lecz zalew rejestru tysiącami artefaktów i nadużycie infrastruktury (w tym możliwa monetyzacja przez ekosystem tea.xyz).
W skrócie
Skala: od ~44–80 tys. i więcej złośliwych paczek, wykrytych na dziesiątkach kont npm. Nazwy generowane z list słów (przymiotniki/zwierzęta/kolory) oraz słowników z indonezyjskimi imionami i potrawami.
Mechanizm: prosty skrypt (Node.js) modyfikuje package.json/package-lock.json, usuwa private: true, nadaje losową wersję i publikuje kolejne paczki w pętli (co kilka sekund).
Wektory nadużycia: ponowne użycie zapisanych poświadczeń npm ofiary; możliwy cel: nagrody/„reputacja” w tea.xyz, SEO/pozycjonowanie lub „próba generalna” przed realnym ładunkiem.
Ryzyko: zanieczyszczenie wyników wyszukiwania, wzrost prawdopodobieństwa przypadkowej instalacji i zatrucie łańcucha dostaw (w CI/CD).
Kontekst / historia / powiązania
Kampania trwa co najmniej od 2023/2024 r., ewoluując od zwykłego spamu do robakopodobnej automatyzacji w 2025 r. (auto-publikacja i szybkie replikowanie). Część obserwacji wiąże aktywność z mechanizmami punktacji/nagród tea.xyz, co tłumaczy presję na masę i widoczność. Niezależne raporty (SecurityWeek, SourceCodeRed, JFrog) różnią się liczbami (43–80 tys.+), ale są spójne co do automatycznej pętli publikacji i słowników nazw. Dodatkowe doniesienia prasowe wskazują na 67–100 tys. paczek w miarę trwania sprzątania i nowej publikacji.
Analiza techniczna / szczegóły
1) Generowanie metadanych i nazwy
Warianty wykorzystują m.in. bibliotekę unique-names-generator oraz własne słowniki (imiona/potrawy/adjektywy/zwierzęta/kolory), np. annoyed_raccoon_z3n albo indah-ketoprak73-riris.
2) „Odblokowanie” publikacji
Skrypt usuwa pole private: true z package.json, aby erzac-projekt Next.js stał się publicznie publikowalny: let packageData = JSON.parse(fs.readFileSync("package.json")); if (packageData.private === true) { delete packageData.private; } // wersja i nazwa nadawane losowo… exec("npm publish --access public", cb); (fragmenty logiczne opisane w analizie JFrog).
3) Samoreplikacja i tempo
Po publikacji skrypt czeka losowy krótki czas i uruchamia cykl od nowa. W praktyce nowe paczki pojawiają się co ~7 sekund, aż do limitów lub błędów 429 (rate-limit).
4) Poświadczenia npm
Pętla używa zapisanych tokenów/npmrc użytkownika (prawdopodobnie na zainfekowanej maszynie) do publikacji pod jego kontem. To nie jest „kradzież sekretów na zewnątrz”, tylko nadużycie już obecnych uprawnień.
5) IoC i artefakty
JFrog publikuje sumy SHA-256 plików autopublikujących i listę obserwowanych kont npm; pojawiają się też adresy powiązane z tea.xyz w plikach konfiguracyjnych (tea.yaml). Warto wzbogacić skanery o te artefakty.
Praktyczne konsekwencje / ryzyko
Zatrucie łańcucha dostaw (SDLC/CI/CD): łatwiej o pomyłkową instalację paczki „o normalnym wyglądzie”, szczególnie przy luźnych constraintach wersji (^, ~) i braku blokad wersji.
Noise & discovery risk: zespoły SCA/SAST/DevSecOps dostają tysiące „śmieciowych” trafień, co utrudnia triage i może ukryć prawdziwe ataki.
Eskalacja scenariusza: ta sama infrastruktura może być „przełączona” na realny ładunek (np. infostealer, crypto-theft), a nie jedynie spam—JFrog wskazuje taki wariant jako prawdopodobny „dry run”.
Rekomendacje operacyjne / co zrobić teraz
Poniżej zestaw działań do wdrożenia od razu, od punktów krytycznych po „twardnienie” procesu.
A. Reagowanie i hunting
Zablokuj i odśwież tokeny npm (szczególnie na maszynach buildowych):
# pokaż aktualne tokeny
npm token list
# unieważnij podejrzany token (wstaw ID)
npm token revoke <token-id>
# wymuś 2FA dla publikacji
npm profile enable-2fa auth-and-writes
Przegląd ostatnich publikacji pod Twoją nazwą/npm org (czy „ktoś” nie publikował śmieci w Twoim imieniu):
# szybki podgląd zmian w Twojej organizacji przez API npm
curl -s "https://registry.npmjs.org/-/org/<twoja-org>/package?format=json" | jq '.'
Skanuj lockfile i node_modules pod wzorce nazw ze słowników (adjectives/animals/colors, indonezyjskie imiona/potrawy) i znane IoC (hash’e z raportu JFrog). Przykładowy skrypt huntujący w repo:
# szukaj podejrzanych nazw w package-lock.json / pnpm-lock.yaml / yarn.lock
grep -E -i "(rendang|ketoprak|sambel|nasi|goreng|_z3n|meadowlark|raccoon)" \
package-lock.json pnpm-lock.yaml yarn.lock 2>/dev/null
# weryfikuj SHA plików autopublikujących, jeśli występują
shasum -a 256 **/auto.js **/publishScript.js **/index.js 2>/dev/null
(doposaż bazę IoC o hash’e i konta z raportu JFrog).
Wymuś „allow-listy” w prywatnym mirrorze/proxy rejestru (Artifactory/Nexus/JFrog/Frog Curation, Sonatype Firewall): odrzuć publikacje z nowych, niesprawdzonych kont i paczki pasujące do wzorców nazw. (JFrog deklaruje, że dodał te paczki do katalogu złośliwych).
B. Higiena zależności i buildów
Twarde pinowanie wersji + blokady (package-lock.json, pnpm-lock.yaml, yarn.lock) oraz „frozen-lockfile” w CI: npm ci --ignore-scripts # lub pnpm install --frozen-lockfile yarn install --frozen-lockfile
Wyłącz npm install ze „skryptami” (--ignore-scripts) w środowiskach build/test, jeżeli to możliwe.
Provenance i podpisy: egzekwuj npm provenance/Sigstore, SBOM (CycloneDX/SPDX) oraz polityki „only-allow”: npx only-allow pnpm # przykład wymuszenia jednego menedżera
Segmentacja uprawnień: tokeny npm z zakresem tylko do odczytu w CI; publikacja z osobnych, minimalnych runnerów; tajemnice w dedykowanych OIDC+STS zamiast statycznych tokenów.
Alerting na anomalie publikacji: jeśli Twój zespół publikuje biblioteki na npm—dodaj reguły UEBA: „więcej niż N publikacji w 1h”, „nowa paczka z nieznanej przestrzeni nazw”, „nieznany maintainer”.
C. Blokada znanych kont/nazw
W firewallu rejestru/SCA skonfiguruj deny-listę kont i prefiksów nazw z raportów (np. veylatea, użytkownicy z list JFrog/SourceCodeRed), oraz reguły detekcji tea.yaml/*_publish*.js.
Różnice / porównania z innymi przypadkami (wrzesień 2025: „Shai-Hulud”)
Cel i ładunek:
IndonesianFoods/Big Red – głównie spam i samoreplikacja; brak bezpośredniego exfiltracji sekretów w payloadzie.
IndonesianFoods – tworzenie nowych tysięcy paczek-wydmuszek.
Shai-Hulud – przejęcie istniejących paczek o dużym zasięgu.
Ryzyko krótkoterminowe:
IndonesianFoods – ryzyko przypadkowej instalacji i zanieczyszczenia supply chain.
Shai-Hulud – natychmiastowe ryzyko wycieku sekretów i eskalacji w CI/CD.
Podsumowanie / kluczowe wnioski
Mamy do czynienia z przemysłową automatyzacją produkcji paczek npm: prosta logika, ale duża skala i ciągła replikacja.
Nawet jeśli obecny ładunek w „IndonesianFoods/Big Red” nie kradnie danych, ten sam pipeline może w dowolnym momencie przerzucić się na realne malware.
Obrona to kombinacja: twarde pinowanie + „frozen” instalacje + ignore-scripts w CI, podpisy/provenance, allow-listy/deny-listy w repozytoriach pośredniczących, segmentacja tokenów i monitoring anomalii publikacji.
Źródła / bibliografia
SecurityWeek — „Tens of Thousands of Malicious NPM Packages Distribute Self-Replicating Worm” (13 listopada 2025). (SecurityWeek)
JFrog Security Research — „Big Red – Indonesian-based Self-replicating Malicious Spam Campaign detected in npm” (11 listopada 2025) — analiza techniczna, IoC. (research.jfrog.com)
SourceCodeRed — „‘IndonesianFoods’ worm publishes more than 78,000 malicious NPM packages” — pierwsze odkrycia, tempo publikacji, słowniki nazw. (sourcecodered.com)
BleepingComputer — „New ‘IndonesianFoods’ worm floods npm with 100,000 packages” — tło czasowe 2023–2025 i wątek TEA. (BleepingComputer)
CISA / Sysdig — materiały porównawcze nt. kampanii „Shai-Hulud” (wrzesień 2025) — inny typ celu (exfiltracja sekretów). (CISA)
Badacze wykryli złośliwy pakiet npm @acitons/artifact będący klasycznym typosquattingiem na @actions/artifact (oficjalny pakiet GitHub Actions odpowiedzialny za artefakty CI/CD). Celem kampanii było uruchomienie złośliwego skryptu w środowisku budowania, kradzież tokenów dostępnych w jobach GitHub Actions i potencjalne publikowanie artefaktów jako GitHub (impersonacja organizacji) lub dalsza eskalacja w łańcuchu dostaw. Źródłem technicznych szczegółów jest analiza Veracode, na którą powołuje się m.in. The Hacker News.
W skrócie
Złośliwy pakiet: @acitons/artifact – literówka „acitons” zamiast „actions”.
Wersje zawierające malware: od 4.0.12 do 4.0.17 (usunięte przez sprawcę; najnowsza „bezpieczna” na npm pozostawała 4.0.10 w chwili publikacji).
Mechanizm infekcji: postinstall w package.json pobierał binarkę harness, która wykonywała obfuskowany shell/JS (verify.js).
Cele: repozytoria należące do organizacji GitHub; skrypt kończył działanie, jeśli właścicielem nie był github.
Dane wykradane: zmienne GITHUB_* (np. tokeny) i egfiltracja w formie zaszyfrowanej do hostów w domenie app.github.dev.
Skala: ~47 405 pobrań w sumie (wg npm-stat) i ~31 398 tygodniowo w szczycie.
Powiązany pakiet: 8jfiesaf83 (również złośliwy, usunięty).
Kontekst / historia / powiązania
Ekosystem npm od miesięcy mierzy się z eskalacją ataków na łańcuch dostaw: kompromitacje maintainerów, typosquatting, złośliwe hooki instalacyjne i łańcuchowe infekcje jobów CI/CD. Jesienią 2025 r. CISA i partnerzy ostrzegali o „szeroko zakrojonej kompromitacji” w npm oraz rekomendowali rotację poświadczeń i wzmocnienie polityk publikacji. W tym tle atak na @acitons/artifact wpisuje się w trend uderzeń w pipeline’y CI/CD i tokeny automatyzacji.
Warto przypomnieć, że oryginalny @actions/artifact jest komponentem wewnętrznym dla akcji upload/download-artifact i jest powszechnie używany w workflow GitHub Actions — co czyni go łakomym kąskiem dla typosquattingu.
Analiza techniczna / szczegóły luki
Wejście wektorowe (typosquatting): Atak polegał na publikacji pakietu @acitons/artifact (zamiana „ti”→„it”) z metadanymi sugerującymi powiązanie z oficjalnym repo actions/toolkit. Tego typu literówkę łatwo przeoczyć w zależnościach lub w logach CI.
Hook instalacyjny W złośliwych wersjach (4.0.12–4.0.17) w package.json umieszczono skrypt:
Plik harness był obfuskowanym skryptem powłoki (skompilowanym narzędziem „Shell Script Compiler”) z mechanizmem samorestartu i datą ważności (kill switch) po 2025-11-06 UTC. Jego łańcuch uruchomienia wydobywał z siebie paczkę Node z obfuskowanym verify.js.
Warunki celu i eksfiltracja verify.js sprawdzał obecność zmiennych GITHUB_* ustawianych w jobach Actions i opuszczał działanie, jeśli repozytorium nie należało do organizacji github. Zebrane dane szyfrowano AES (klucz pobierany z hosta w hopto[.]org) i eksfiltrację kierowano do pliku hostowanego w subdomenie app.github.dev. To minimalizowało „szum” detekcyjny (legalnie wyglądająca domena) i utrudniało korelację.
Wskaźniki kompromitacji (IoC) Veracode podaje m.in.:
Skala pobrań Szacunki z npm-stat wskazują ~47 tys. pobrań łącznie i ~31 tys. w tygodniu kulminacyjnym, co pokazuje, jak szybko typosquat może wejść w obieg przy minimalnym tarciu. (Uwaga: npm-stat aktualizuje się z opóźnieniem dobowym).
Praktyczne konsekwencje / ryzyko
Kompromitacja GITHUB_TOKEN i sekretów joba → możliwość podszycia się pod organizację, publikacja artefaktów, modyfikacja release’ów, dołączanie złośliwych komponentów do pipeline’u.
Zaufanie do artefaktów — jeśli token wycieknie, atakujący może „zatrącać” supply chain na kolejnych etapach (downstream).
Trudna detekcja — domeny pokrewne GitHubowi (app.github.dev) i logika warunkowa ograniczająca cel do organizacji github zmniejszają widoczność incydentu w telemetrii.
Efekt kaskadowy — na tle wcześniejszych kampanii npm (CISA, wrzesień 2025) widać, że ataki na CI/CD są trendem, nie anomalią.
Rekomendacje operacyjne / co zrobić teraz
1) Natychmiastowe działania reagowania (IR)
Skan IoC i historię buildów:
Przeskanuj logi pipeline’ów i rejestry artefaktów pod kątem użycia @acitons/artifact (dowolnej wersji) i 8jfiesaf83.
Zweryfikuj, czy w Twojej organizacji nie pojawiały się odwołania do kont blakesdev, jmasdg, f8snaf, s0larized lub do domen *.app.github.dev/*.hopto.org w kontekście jobów CI.
Rotacja sekretów:
Wymuś rotację GITHUB_TOKEN oraz innych sekretów występujących w workflow, w których mogło dojść do instalacji z npm (w tym w jobach uruchamiających npm i). Rekomendację rotacji w podobnych zdarzeniach wspiera CISA.
2) Szybkie „bezpieczniki” w pipeline
Wyłącz postinstall w środowiskach CI:
# Na stałe w agentach CI (globalnie):
npm config set ignore-scripts true
# Lub per-run (preferowane w CI):
npm ci --ignore-scripts
# (analogicznie dla pnpm/yarn: pnpm i --ignore-scripts / yarn install --ignore-scripts)
Wymuś „no-audit” z repo zaufanym (tylko jeśli masz wewn. mirror/air-gap):
npm config set registry https://twoj-nexus-proxy.example.com/repository/npm/
Blokuj nieznane przestrzenie nazw (scope’y) i typosquatting
Użyj allow-list dla scope’ów/kont dostawców w SCA/ASPM (np. blokuj wszystko poza @actions/, @org-wewnętrzna/ itd.).
Włącz reguły detekcji typosquattingu (Levenshtein ≤1 dla krytycznych pakietów).
Pinuj wersje i hashe artefaktów
W GitHub Actions ustaw permissions: na minimalne, wyłącz persist-credentials w checkout, pinuj akcje po SHA zamiast po @vX. Przykład minimalnego szablonu:
Kontrola zależności w SCA/ASPM Zaimportuj IoC i listę złośliwych wersji do narzędzia SCA (część vendorów – w tym Veracode – dodała sygnatury).
Blokowanie egress Segmentuj sieć agentów CI; blokuj wyjścia na dynamiczne hosty (np. *.hopto.org) i egzekwuj mTLS / egress allow-list dla ruchu z jobów.
4) Higiena developerów
Uczul zespół na literówki w scope’ach (@acitons vs @actions).
Włącz npm ci (reproducible builds) zamiast npm install.
Wymuś code review zmian w package.json/package-lock.json i monitoruj PR-y dodające nowe zależności (policy-as-code).
Różnice / porównania z innymi przypadkami (jeśli dotyczy)
Ataki łańcucha dostaw w npm (IX–X 2025): liczne incydenty (m.in. masowe kompromitacje i kradzieże krypto przez biblioteki zależności) uderzały szeroko w użytkowników. Bieżąca kampania różni się wąsko ukierunkowanym celem (GitHub-owned repos) oraz warunkową logiką ograniczającą aktywację poza organizacją GitHub — to bardziej „surgical strike” niż atak masowy.
W przeciwieństwie do kompromitacji istniejących, popularnych pakietów, tutaj mieliśmy typosquatting podszywający się pod powszechnie używany komponent pipelines. To zmienia wektory prewencji: ważniejsze staje się allow-listing i kontrola nazewnictwa niż tylko zaufanie do maintainerów.
Podsumowanie / kluczowe wnioski
Typosquatting + postinstall w ekosystemie npm nadal skutecznie omija czujność zespołów, zwłaszcza w CI.
Atak na @acitons/artifact pokazał, że tokeny CI/CD są celem samym w sobie; ich kradzież umożliwia podszywanie się i dalszą kompromitację supply chain.
Operacyjne „bezpieczniki” (ignore-scripts w CI, pinning po SHA, minimalne permissions, allow-list scope’ów) istotnie ograniczają powierzchnię ataku.
Utrzymuj telemetrię i hunting na hooki instalacyjne i nietypowe egressy z agentów CI.
Reaguj: przeszukaj buildy, rotuj sekrety, sprawdź artefakty i audytuj zależności.
Źródła / bibliografia
The Hacker News — Researchers Detect Malicious npm Package Targeting GitHub-Owned Repositories (11 listopada 2025). (The Hacker News)
Veracode — Malicious NPM Package Found Targeting GitHub By Typosquatting on GitHub Action Packages (10 listopada 2025) — analiza techniczna i IoC. (Veracode)
Co to jest CVE (Common Vulnerabilities and Exposures)?
CVE (Common Vulnerabilities and Exposures) to międzynarodowy standard nazewnictwa publicznie znanych luk bezpieczeństwa w oprogramowaniu i sprzęcie. Mówiąc prościej, jest to lista unikatowych identyfikatorów podatności oraz związany z nią system ich katalogowania. Dzięki CVE specjaliści ds. cyberbezpieczeństwa na całym świecie mogą mówić jednym językiem o konkretnych lukach – niezależnie od platformy czy producenta.
Aktywna kampania PhantomRaven celuje w programistów ekosystemu JavaScript, publikując dziesiątki złośliwych paczek w rejestrze npm. Ich celem jest kradzież tokenów uwierzytelniających (npm, GitHub Actions, GitLab, Jenkins, CircleCI), sekretów CI/CD oraz poświadczeń do repozytoriów, co otwiera drogę do wtórnych ataków na łańcuch dostaw oprogramowania. Kampania rozpoczęła się w sierpniu 2025 r., obejmuje 126 paczek i przekroczyła 86 000 pobrań. Zidentyfikowali ją badacze Koi Security; część paczek w momencie publikacji raportów była wciąż dostępna w npm.
Technika ukrycia:Remote Dynamic Dependencies (RDD) – paczki deklarują 0 zależności, a właściwy ładunek dociągają z zewnętrznego serwera podczas npm install.
Egzekucja: wykorzystanie skryptów lifecycle (np. preinstall) do automatycznego uruchomienia payloadu bez interakcji użytkownika.
Kradzione dane: tokeny npm/GitHub/GitLab/Jenkins/CircleCI, fingerprinting systemu i środowiska CI/CD, adresy e-mail.
Exfiltracja: redundancja kanałów (HTTP GET z danymi w URL, HTTP POST/JSON, WebSocket).
Socjotechnika nazw:slopsquatting – wykorzystywanie halucynacji LLM do rejestrowania nieistniejących, lecz „wiarygodnie brzmiących” nazw paczek.
Kontekst / historia / powiązania
Ukrywanie złośliwego kodu w pakietach open source nie jest nowe, jednak PhantomRaven łączy kilka trendów: nadużycie rzadko używanej funkcji npm (URL-owe specyfikatory zależności), automatyczne skrypty instalacyjne i LLM-asystowanych rekomendacji paczek. Media branżowe opisują to jako ataki z „niewidzialnymi zależnościami”, które omijają statyczne skanery rejestrów i klasyczne analizatory SBOM.
Analiza techniczna / szczegóły luki
Remote Dynamic Dependencies (RDD)
Zamiast standardowych wpisów w "dependencies", złośliwe paczki wskazują HTTP URL (np. http://packages.storeartifact.com/...). Taki komponent nie znajduje się w npmjs.com, więc wiele narzędzi SCA/SAST go nie analizuje – interfejs npm pokazuje „0 dependencies”, co uśpiwa czujność. Podczas npm install pobierany jest zdalny pakiet, który zawiera preinstall uruchamiający złośliwy kod.
Łańcuch ataku
Deweloper instaluje pozornie czystą paczkę z npm.
Npm dociąga „niewidzialną” zależność z kontrolowanego przez atakującego hosta.
Skrypt preinstall uruchamia się automatycznie, bez pytań.
Malware wykonuje profilowanie systemu, enumerację e-maili i zbieranie sekretów CI/CD.
Dane są eksfiltrowane wieloma kanałami (GET/POST/WebSocket).
Fingerprinting: IP publiczny i lokalny, hostname, OS, wersja Node.js, bieżący katalog.
Artefakty identyfikacyjne: adresy e-mail z env, .gitconfig, .npmrc, package.json.
Infrastruktura i IoC
Domena/C2:packages.storeartifact.com
IP:54.173.15.59
Endpoint exfiltracyjny:jpd.php
Wzorce kont/e-maili publikujących:jpdtester0X@..., m.in. jpdtester07@outlook[.]com, jpdtester12@gmail[.]com itd.
Przykładowe nazwy paczek:unused-imports, eslint-comments, transform-react-remove-prop-types, @gitlab-lsp/*, artifactregistry-login, crowdstrike, react-async-component-lifecycle-hooks, syntax-dynamic-import i wiele innych (pełna lista w raporcie Koi).
Slopsquatting (LLM-assisted naming)
Atakujący rejestrują nieistniejące wcześniej, lecz „wiarygodne” nazwy, które LLM potrafią podpowiadać jako rzekomo właściwe („unused-imports” vs. prawidłowe eslint-plugin-unused-imports, itp.). To omija proste reguły typosquattingu i zwiększa skuteczność socjotechniki wobec developerów polegających na asystentach AI.
Praktyczne konsekwencje / ryzyko
Przejęcie pipeline’ów i możliwość dorzucenia złośliwych commitów/releasów (supply-chain).
Kradzież sekretów skutkująca lateral movement do chmur, rejestrów artefaktów i środowisk produkcyjnych.
Trudna detekcja w klasycznych skanerach – ładunek nie jest obecny w artefakcie z npm, a zależności wyglądają na puste.
Rekomendacje operacyjne / co zrobić teraz
Natychmiastowa reakcja (IR):
Blokada IoC: zablokuj packages.storeartifact.com i powiązane IP na egressie; monitoruj ruch HTTP/WS do niezatwierdzonych hostów.
Hunting: przeszukaj logi o instalacjach paczek z listy Koi; sprawdź wywołania npm install z nietypowymi URL-ami w package.json/package-lock.json.
Rotacja sekretów:unieważnij tokeny npm/GitHub/GitLab/Jenkins/CircleCI, klucze API i hasła; wymuś ponowną autoryzację runnerów/agentów.
Przegląd repozytoriów: audit ostatnich commitów/tagów/CI workflows pod kątem nieautoryzowanych zmian.
Twardnienie (hardening) na przyszłość:
Wyłącz skrypty lifecycle podczas CI: uruchamiaj npm ci z --ignore-scripts (lub npm config set ignore-scripts true w pipeline’ach, a w razie potrzeby whitelistuj pojedyncze przypadki). Uzupełnij o izolację sieciową stepów instalacyjnych. (Zasada wynika z analizy mechanizmu preinstall.)
Blokada zależności z URL: polityki DevSecOps/SCA powinny odrzucać HTTP(S) dependencies w package.json. Monitoruj PR-y pod kątem zmian w sekcji dependencies/scripts.
Wymuś 2FA i OIDC-based tokens dla dostępu do rejestrów/kont CI/CD; minimalne uprawnienia i krótkie TTL tokenów.
SBOM + detekcja behawioralna: klasyczny SBOM nie pokaże RDD; uzupełnij go o dynamiczną analizę instalacji (wykrywanie połączeń sieciowych podczas npm install).
Repozytoria lustrzane/air-gap: rozważ wewnętrzne mirrorowanie uznanych paczek i blokadę instalacji z internetu w CI (allowlist).
Edukacja dot. LLM: wprowadź guideline’y nt. weryfikacji nazw paczek sugerowanych przez AI; wymagaj sprawdzenia istnienia i reputacji projektu.
Różnice / porównania z innymi przypadkami (jeśli dotyczy)
Klasyczny typosquatting: złośliwy kod siedzi w paczce na rejestrze; tutaj kod jest poza rejestrem (RDD), więc omija wiele skanerów.
Kampanie 2023–2025 (npm/PyPI) nierzadko używały postinstall do exfiltracji; PhantomRaven dodaje „niewidzialne” zależności i slopsquatting, co utrudnia detekcję i zwiększa skuteczność dystrybucji.
Podsumowanie / kluczowe wnioski
PhantomRaven pokazuje, jak łatwo połączyć niszowe funkcje npm, automatyczne skrypty instalacyjne i błędy poznawcze (zaufanie do LLM) w skuteczny atak na łańcuch dostaw. Krytyczne są: blokada HTTP-owych zależności, wyłączenie skryptów lifecycle w CI, rotacja i krótkie TTL tokenów, monitoring ruchu podczas instalacji oraz dyscyplina weryfikacji paczek – szczególnie tych „poleconych” przez asystentów AI.
Greenbone Vulnerability Management (GVM) to otwartoźródłowy pakiet narzędzi do skanowania i zarządzania podatnościami w sieciach komputerowych. Projekt ten narodził się jako OpenVAS (Open Vulnerability Assessment System) – pierwotnie sam skaner podatności wywodzący się z otwartej wersji Nessusa. Z czasem firma Greenbone rozbudowała go o dodatkowe komponenty (zarządzanie wynikami, bazę danych, interfejs WWW) i przemianowała cały ekosystem na GVM, począwszy od wersji po OpenVAS 9.