npm 12 zaostrzy wykonywanie skryptów i utrudni ataki na łańcuch dostaw - Security Bez Tabu

npm 12 zaostrzy wykonywanie skryptów i utrudni ataki na łańcuch dostaw

Cybersecurity news

Wprowadzenie do problemu / definicja

Ekosystem npm pozostaje jednym z fundamentów współczesnego rozwoju aplikacji opartych na JavaScript i Node.js. Jednocześnie od lat jest też atrakcyjnym celem ataków na łańcuch dostaw oprogramowania, ponieważ proces instalacji zależności może uruchamiać kod jeszcze zanim aplikacja zostanie zbudowana lub uruchomiona.

Zapowiedziane zmiany w npm 12 mają ograniczyć to ryzyko poprzez odejście od modelu domyślnego wykonywania skryptów instalacyjnych w zależnościach. Nowe podejście opiera się na zasadzie jawnego zaufania, w której wykonywanie określonych skryptów będzie wymagało świadomej zgody ze strony projektu.

W skrócie

Najważniejsza zmiana polega na tym, że npm 12 ma domyślnie blokować wykonywanie skryptów preinstall, install i postinstall pochodzących z zależności, o ile nie zostaną one wcześniej zatwierdzone. Ograniczenia obejmą również niejawne budowanie natywnych modułów przez node-gyp, skrypty prepare dla zależności z Gita, źródeł lokalnych i linków oraz automatyczne rozwiązywanie zależności pochodzących z repozytoriów Git i zdalnych archiwów.

  • domyślne blokowanie skryptów instalacyjnych w zależnościach,
  • większa kontrola nad pakietami natywnymi i procesem builda,
  • ograniczenie ryzykownych źródeł zależności spoza rejestru,
  • przejście z modelu implicit trust do modelu allowlisty.

Kontekst / historia

Zmiana jest odpowiedzią na rosnącą liczbę incydentów supply chain w ekosystemie JavaScript. W wielu przypadkach atakujący wykorzystywali mechanizm automatycznego uruchamiania skryptów podczas npm install, aby wykonać złośliwy kod na stacjach deweloperskich, w środowiskach CI/CD oraz w procesach budowania.

Taki wektor ataku jest szczególnie groźny, ponieważ działa na bardzo wczesnym etapie cyklu życia aplikacji. Jeśli kompromitacji ulegnie pojedyncza zależność, złośliwy kod może uzyskać dostęp do tokenów, sekretów, kluczy publikacyjnych lub innych wrażliwych danych obecnych w środowisku budowania.

Przez lata automatyczne wykonywanie skryptów było uznawane za wygodne i praktyczne rozwiązanie dla autorów bibliotek. Jednak wraz ze wzrostem liczby incydentów bezpieczeństwa stało się jasne, że ten sam mechanizm tworzy zbyt szeroką powierzchnię ataku.

Analiza techniczna

W npm 12 skrypty preinstall, install i postinstall w zależnościach nie będą już uruchamiane automatycznie. Oznacza to, że projekt będzie musiał jawnie dopuścić zaufane pakiety do wykonywania kodu na etapie instalacji.

Istotną częścią zmian jest również ograniczenie niejawnego uruchamiania node-gyp. Dotąd obecność pliku binding.gyp mogła prowadzić do automatycznej przebudowy modułu natywnego, nawet bez jawnie zdefiniowanego skryptu instalacyjnego. W nowym modelu także ta ścieżka ma zostać zablokowana, jeśli nie zostanie wyraźnie dopuszczona.

Zmiany obejmą też skrypty prepare dla zależności pobieranych z niestandardowych źródeł, takich jak repozytoria Git, zależności typu file: czy link:. W praktyce oznacza to dodatkową ochronę przed wykonaniem nieautoryzowanej logiki pochodzącej spoza standardowego rejestru pakietów.

npm 12 ma również ograniczyć domyślne rozwiązywanie zależności Git oraz zdalnych archiwów. To ważne, ponieważ takie źródła zwiększają nie tylko złożoność procesu instalacji, ale również ryzyko niekontrolowanego pobrania i wykonania kodu.

Wersje npm 11.16.0 i nowsze udostępniają już mechanizmy przygotowawcze. Narzędzie npm approve-scripts --allow-scripts-pending pozwala sprawdzić, które pakiety próbowałyby uruchamiać skrypty, a następnie zbudować kontrolowaną listę wyjątków zapisywaną w konfiguracji projektu.

Konsekwencje / ryzyko

Z punktu widzenia cyberbezpieczeństwa to jedna z najważniejszych zmian w npm od lat. Ograniczenie automatycznego wykonania kodu podczas instalacji znacząco utrudnia przeprowadzenie wielu ataków supply chain, szczególnie tych nastawionych na przejęcie środowisk deweloperskich i pipeline’ów CI/CD.

Jednocześnie nowy model może spowodować skutki operacyjne. Część legalnych pakietów wykorzystuje skrypty instalacyjne do kompilacji komponentów natywnych, pobierania binariów, generowania zasobów lub przygotowania artefaktów. Po wdrożeniu npm 12 niektóre projekty mogą wymagać dodatkowej konfiguracji albo ręcznego zatwierdzenia wybranych zależności.

Największe ryzyko dotyczy organizacji, które nie przygotują się do zmiany wcześniej. W starszych kodbazach, monorepo i środowiskach automatyzacji nowe zasady mogą prowadzić do błędów instalacji, przerw w buildach i opóźnień wdrożeń.

Rekomendacje

Zespoły korzystające z Node.js powinny już teraz przeprowadzić przegląd zależności uruchamiających skrypty podczas instalacji. Wczesne przygotowanie pozwoli ograniczyć problemy operacyjne i jednocześnie poprawić widoczność ryzyka w łańcuchu dostaw.

  • zaktualizować środowiska deweloperskie i CI do wersji npm obsługujących nowe mechanizmy kontroli,
  • uruchomić przegląd zależności z użyciem funkcji zatwierdzania skryptów,
  • zatwierdzać wyłącznie pakiety niezbędne i wcześniej zweryfikowane,
  • preferować precyzyjne wyjątki dla konkretnych wersji zamiast szerokich reguł,
  • przeanalizować użycie zależności z Gita, file: i link:,
  • ograniczyć korzystanie ze zdalnych archiwów jako źródeł pakietów,
  • przetestować pipeline’y CI/CD przed przejściem na npm 12,
  • monitorować zmiany w package.json, lockfile’ach i politykach allowlisty.

Dla zespołów AppSec i DevSecOps jest to również dobry moment, aby wzmocnić governance wokół pakietów open source. Blokowanie skryptów nie zastępuje skanowania podatności, kontroli integralności buildów ani ochrony sekretów, ale stanowi bardzo ważną warstwę prewencyjną.

Podsumowanie

npm 12 wprowadza fundamentalną zmianę w podejściu do bezpieczeństwa instalacji zależności. Domyślne blokowanie skryptów, ograniczenie niejawnych ścieżek wykonania przez node-gyp oraz zaostrzenie zasad dla zależności gitowych i zdalnych wzmacniają ochronę przed atakami na łańcuch dostaw.

Dla zespołów programistycznych oznacza to konieczność przeglądu procesów i zależności, ale z perspektywy bezpieczeństwa jest to ruch w stronę bardziej przewidywalnego i kontrolowanego modelu zaufania.

Źródła

  1. SecurityWeek — NPM 12 Will Change Script Execution Behavior to Prevent Supply Chain Attacks — https://www.securityweek.com/npm-12-will-change-script-execution-behavior-to-prevent-supply-chain-attacks/
  2. GitHub Changelog — Upcoming breaking changes for npm v12 — https://github.blog/changelog/2026-06-09-upcoming-breaking-changes-for-npm-v12/
  3. npm Docs — npm approve-scripts — https://docs.npmjs.com/cli/v11/commands/npm-approve-scripts/
  4. npm Docs — npm install — https://docs.npmjs.com/cli/install/
  5. npm Docs — Scripts — https://docs.npmjs.com/cli/v11/using-npm/scripts/