Zgłoszono masową atak na pakiety w repozytorium NPM, przeprowadzany z wykorzystaniem nowego samoreplikującego się robaka ChainDrop, który wprowadza złośliwe oprogramowanie do zależności. W wyniku ataku opublikowano 2212 złośliwych wydań dla 444 pakietów. Najbardziej popularne z skompromitowanych pakietów to keyv, flat-cache oraz file-entry-cache, które mają odpowiednio 154, 149.9 i 147.6 milionów pobrań tygodniowo.
Loader robaka znajdował się w plikach setup.mjs oraz Math_Symbol.js, które były uruchamiane przez preinstall-handlera ("preinstall": "node setup.mjs"), wywoływanego podczas instalacji zainfekowanego pakietu. Wskazane skrypty pobierały legalny Bun runtime oraz zbuforowany kod robaka o wielkości 710 KB. Po aktywacji robak przeszukiwał system i zmienne środowiskowe w poszukiwaniu tokenów do NPM, PyPI, CircleCI, AWS, GCP, Docker, Azure, HashiCorp, KubernetesK8s i innych usług (łącznie analizowano ponad 140 ścieżek plików, typu ~\/.npmrc), a także analizował pamięć (przez \/proc\/\/mem) środowiska GitHub Actions w celu znalezienia tokenów i danych uwierzytelniających.
W przypadku wykrycia tokena do połączenia z katalogiem NPM, robak automatycznie publikował nowe złośliwe wydania dla opracowywanych w bieżącym środowisku pakietów, atakując drzewo zależności. W odróżnieniu od wcześniej zidentyfikowanego robaka Shai-Hulud 2.0 w ChainDrop zastosowano technikę EtherHiding do pozyskiwania poleceń sterujących przez publiczny blockchain Ethereum, włączono szyfrowanie, aby ukryć przesyłane na serwer atakujących dane wrażliwe, a także zapewniono wprowadzenie do plików konfiguracyjnych Claude Code, VS Code oraz GitHub Copilot, aby utrzymać obecność w systemie.
Atak rozpoczął się od kompromitacji procesu tworzenia wydań na podstawie GitHub Actions dla pakietu keyv, który ma 154 miliony pobrań tygodniowo i jest używany jako zależność w 1703 pakietach. Atakujący stworzyli nową wersję 6.0.0, wstawiając w nią złośliwy kod, i opublikowali ją za pomocą mechanizmu "Trusted Publishers" oraz poprawnej SLSA-oceny. Po publikacji robak zainfekował wiele zależnych pakietów keyv, a następnie zaczął atakować zależności pośrednie.
Wśród najpopularniejszych pakietów, które zostały zainfekowane przez robaka publikującego dla nich złośliwe wydania, znalazły się:
- flat-cache 6.1.24 (149.8 miliona pobrań tygodniowo);
- file-entry-cache 11.1.6 (147.5 miliona);
- cacheable-request 13.0.20 (33.9 miliona);
- @cacheable/utils 2.5.1 (8.7 miliona);
- cacheable 2.5.1 (7.8 miliona);
- @cacheable/memory 2.2.1 (7,1 mln);
- cache-manager 7.2.10 (4,2 mln);
- @cacheable/node-cache 3.1.2 (1,5 mln).
Źródło: linux.org.ru
