
Co znajdziesz w tym artykule?
Wprowadzenie do problemu / definicja
Ataki typu supply chain należą obecnie do najpoważniejszych zagrożeń dla procesu wytwarzania oprogramowania. Zamiast atakować bezpośrednio organizację końcową, napastnicy przejmują zaufane elementy ekosystemu developerskiego, takie jak pakiety npm, konta maintainerów, tokeny publikacyjne czy mechanizmy CI/CD. W opisywanym incydencie celem stały się pakiety związane z ekosystemem SAP i JavaScript, do których dodano złośliwy kod uruchamiany już podczas instalacji zależności.
Tego typu kompromitacja jest szczególnie niebezpieczna, ponieważ malware działa w zaufanym momencie procesu developerskiego. To oznacza, że pojedyncza instalacja biblioteki może doprowadzić do przejęcia sekretów, dostępu do repozytoriów oraz dalszego rozprzestrzeniania się zagrożenia w środowisku organizacji.
W skrócie
Incydent objął skompromitowane wersje wybranych pakietów npm używanych w środowiskach SAP i CAP. Złośliwe wydania wykorzystywały mechanizm preinstall, aby pobrać i uruchomić dodatkowy ładunek malware odpowiedzialny za kradzież poświadczeń deweloperskich oraz sekretów wykorzystywanych w procesach automatyzacji.
- Złośliwy kod uruchamiał się automatycznie podczas instalacji pakietu.
- Celem były tokeny GitHub i npm, sekrety GitHub Actions oraz dane dostępowe do środowisk chmurowych i Kubernetes.
- Malware posiadało zdolność dalszej propagacji przez workflow publikacyjne i repozytoria ofiar.
- Sam update do bezpiecznej wersji nie eliminuje pełnego ryzyka po ewentualnej kompromitacji.
Kontekst / historia
Według ustaleń dotyczących incydentu skompromitowane zostały między innymi wersje mbt@1.2.48, @cap-js/db-service@2.10.1, @cap-js/postgres@2.2.2 oraz @cap-js/sqlite@2.2.2. Złośliwe publikacje pojawiły się 29 kwietnia 2026 roku w krótkim przedziale czasowym, co sugeruje skoordynowaną operację po uzyskaniu dostępu do mechanizmów publikacji lub kont powiązanych z wydaniami.
Badacze powiązali kampanię z działaniami określanymi jako mini Shai-Hulud. W porównaniu z wcześniejszymi przypadkami tego typu zauważalne są jednak nowe elementy, w tym silniejsze mechanizmy szyfrowania eksfiltrowanych danych, bardziej rozbudowane sposoby utrzymywania trwałości oraz wykorzystanie konfiguracji narzędzi developerskich jako dodatkowego wektora uruchamiania złośliwego kodu.
Istotny jest również kontekst związany z trusted publishing i wykorzystaniem OIDC. W analizowanych przypadkach problem nie musiał wynikać wyłącznie z kradzieży sekretów długoterminowych, lecz także z niewłaściwie skonfigurowanego zaufania do workflow, które mogło umożliwić wymianę tokenów również poza oczekiwanym, bezpiecznym zakresem.
Analiza techniczna
Techniczny przebieg ataku opierał się na dodaniu do pliku package.json skryptu preinstall. Taki skrypt wykonuje się automatycznie w trakcie instalacji pakietu, dlatego stanowi bardzo skuteczny nośnik dla malware zarówno na stacjach roboczych deweloperów, jak i w środowiskach CI/CD.
Złośliwy bootstrapper pobierał plik setup.mjs, który następnie ściągał zależny od platformy komponent środowiska Bun, rozpakowywał go i uruchamiał binarium odpowiedzialne za dalszą egzekucję kodu. Taki wieloetapowy łańcuch utrudnia analizę i zwiększa elastyczność malware w różnych środowiskach uruchomieniowych.
- Instalacja skompromitowanego pakietu.
- Automatyczne wywołanie skryptu
preinstall. - Pobranie dodatkowego artefaktu zewnętrznego.
- Uruchomienie właściwego ładunku malware.
- Zbieranie, szyfrowanie i eksfiltracja danych.
- Próba dalszej propagacji z użyciem przejętych sekretów.
Złośliwy kod miał zbierać lokalne poświadczenia deweloperskie, tokeny GitHub i npm, sekrety GitHub Actions oraz dane uwierzytelniające powiązane z AWS, Azure, GCP i środowiskami Kubernetes. Eksfiltracja odbywała się w nietypowy sposób, ponieważ dane mogły trafiać do publicznych repozytoriów GitHub tworzonych przy użyciu prawidłowych poświadczeń ofiary. Taka metoda utrudnia wykrycie incydentu, ponieważ część aktywności odbywa się w ramach legalnej platformy i z użyciem autoryzowanych kont.
Szczególnie groźnym elementem była funkcja samopropagacji. Po zdobyciu tokenów malware mogło modyfikować workflow GitHub Actions, pozyskiwać kolejne sekrety i publikować następne złośliwe wersje pakietów. W praktyce oznacza to przejście od pojedynczego naruszenia do pełnoskalowego incydentu łańcuchowego obejmującego partnerów, klientów oraz projekty zależne od zainfekowanych bibliotek.
Na uwagę zasługuje również mechanizm trwałości oparty na plikach konfiguracyjnych dodawanych do repozytoriów. Wskazywano możliwość nadużycia plików takich jak .claude/settings.json czy .vscode/tasks.json, co mogło prowadzić do uruchamiania złośliwego kodu już na etapie otwierania projektu w określonych narzędziach developerskich.
Konsekwencje / ryzyko
Ryzyko wynikające z tego incydentu jest wysokie, ponieważ malware działało w zaufanej fazie procesu developerskiego i celowało w sekrety o dużej wartości operacyjnej. Przejęcie takich danych może umożliwić dalszą eskalację uprawnień, modyfikację kodu źródłowego, publikację kolejnych złośliwych artefaktów oraz dostęp do zasobów chmurowych.
- wyciek poświadczeń deweloperskich i tokenów dostępowych,
- kompromitacja pipeline’ów CI/CD,
- utrata integralności repozytoriów i procesu publikacji,
- przejęcie sekretów chmurowych oraz danych Kubernetes,
- rozprzestrzenienie incydentu na klientów, partnerów i zależne projekty,
- wtórna kompromitacja kolejnych pakietów publikowanych do rejestru npm.
Szczególnie narażone są organizacje o wysokim poziomie automatyzacji buildów i wydań. W takich środowiskach jedna zainfekowana zależność może uruchomić reakcję łańcuchową obejmującą wiele repozytoriów, runnerów CI, obrazów kontenerowych oraz środowisk testowych i produkcyjnych.
Rekomendacje
Organizacje, które mogły instalować wskazane wersje pakietów, powinny traktować incydent jako potencjalną kompromitację sekretów, a nie wyłącznie problem z zależnością. Oznacza to konieczność przeprowadzenia pełnej analizy incydentowej i oceny wpływu na cały łańcuch dostaw oprogramowania.
- Natychmiast ustalić, czy skompromitowane wersje były instalowane na stacjach roboczych, runnerach CI/CD i w środowiskach build.
- Przejść na bezpieczne wersje udostępnione przez maintainerów.
- Unieważnić i odnowić tokeny npm, GitHub, GitHub Actions oraz sekrety chmurowe dostępne z potencjalnie zainfekowanych środowisk.
- Przeprowadzić audyt workflow GitHub Actions pod kątem nieautoryzowanych zmian.
- Zweryfikować historię publikacji pakietów i logi rejestrów w poszukiwaniu podejrzanych wydań.
- Przeskanować repozytoria pod kątem nieoczekiwanych plików konfiguracyjnych i mechanizmów uruchamiania kodu.
- Sprawdzić integralność plików
package.json, lockfile oraz konfiguracji pipeline’ów release.
W perspektywie długoterminowej warto wdrożyć bardziej restrykcyjne zasady trusted publishing, ograniczyć zakres uprawnień tokenów CI/CD, objąć workflow obowiązkowym code review oraz monitorować skrypty instalacyjne w zależnościach. Coraz większego znaczenia nabiera również kontrola konfiguracji IDE, automatyzacji developerskiej i narzędzi wspieranych przez AI.
Podsumowanie
Kompromitacja pakietów npm powiązanych z SAP pokazuje, jak groźne stały się nowoczesne ataki supply chain wymierzone w proces tworzenia i publikowania oprogramowania. W analizowanym przypadku napastnicy połączyli przejęcie mechanizmów publikacji, malware uruchamiany w czasie instalacji, kradzież sekretów oraz możliwość samopropagacji przez repozytoria i pipeline’y.
Najważniejszy wniosek jest praktyczny: jeśli organizacja zetknęła się ze skompromitowaną wersją pakietu, sama aktualizacja zależności nie wystarcza. Konieczne są rotacja sekretów, weryfikacja integralności repozytoriów, przegląd workflow i pełna ocena skali incydentu.
Źródła
- The Hacker News — https://thehackernews.com/2026/04/sap-npm-packages-compromised-by-mini.html
- Socket — Affected packages overview — https://socket.dev
- SafeDep — analiza mechanizmu OIDC trusted publishing — https://safedep.io
- StepSecurity — analiza propagacji i trwałości — https://www.stepsecurity.io
- Wiz — badania dotyczące powiązań z wcześniejszymi kampaniami — https://www.wiz.io