npm 12 domyślnie blokuje skrypty instalacyjne i wzmacnia bezpieczeństwo łańcucha dostaw - Security Bez Tabu

npm 12 domyślnie blokuje skrypty instalacyjne i wzmacnia bezpieczeństwo łańcucha dostaw

Cybersecurity news

Wprowadzenie do problemu / definicja

Ekosystem JavaScript od lat pozostaje jednym z najczęściej atakowanych obszarów łańcucha dostaw oprogramowania. Szczególnie groźne są skrypty uruchamiane automatycznie podczas instalacji pakietów, takie jak preinstall, install i postinstall, ponieważ mogą wykonywać kod jeszcze przed pełną oceną bezpieczeństwa zależności przez zespół deweloperski. Zmiany w npm 12 mają ograniczyć ten model domyślnego zaufania i przenieść decyzję o uruchamianiu skryptów na użytkownika lub organizację.

W skrócie

npm 12 wprowadza istotne zmiany bezpieczeństwa, które mają zmniejszyć ryzyko ataków typu supply chain. Najważniejsza z nich to wyłączenie domyślnego uruchamiania skryptów cyklu życia zależności, co oznacza, że pakiety nie będą już automatycznie wykonywać kodu podczas instalacji bez wyraźnej zgody. Dodatkowo ograniczono domyślną obsługę zależności pobieranych z repozytoriów Git oraz zdalnych adresów URL, a także rozpoczęto wygaszanie tokenów umożliwiających obchodzenie wymagań 2FA.

Kontekst / historia

Ataki na łańcuch dostaw w rejestrach pakietów od kilku lat stanowią jeden z najpoważniejszych problemów bezpieczeństwa nowoczesnego developmentu. W modelu npm nawet pozornie niegroźna zależność może uruchomić dodatkowy kod na stacji roboczej programisty, w pipeline CI/CD lub podczas budowania artefaktów. To właśnie dlatego złośliwe paczki, przejęte konta maintainerów czy kampanie typosquattingowe tak często prowadziły do kradzieży sekretów, tokenów, kluczy SSH i danych środowiskowych.

Zmiany w npm 12 były wcześniej sygnalizowane jako przygotowanie organizacji do bardziej restrykcyjnego modelu instalacji. Celem jest odejście od automatycznego zaufania wobec działań wykonywanych przez zależności i wymuszenie jawnej akceptacji tych elementów, które są faktycznie potrzebne do budowy lub uruchomienia projektu.

Analiza techniczna

Najważniejsza zmiana w npm 12 dotyczy ustawienia allowScripts, które domyślnie pozostaje wyłączone. W praktyce oznacza to, że skrypty lifecycle dla zależności nie będą wykonywane automatycznie. Obejmuje to między innymi etapy preinstall, install i postinstall, a także niejawne procesy budowania oparte na node-gyp. To znacząco redukuje ryzyko sytuacji, w której przejęta lub złośliwa zależność uruchomi lokalnie nieautoryzowany kod natychmiast po pobraniu.

Drugim ważnym mechanizmem jest zaostrzenie kontroli nad zależnościami pochodzącymi z repozytoriów Git. Opcja --allow-git domyślnie nie zezwala na ich rozwiązywanie, o ile użytkownik nie włączy takiego zachowania świadomie. Podobne podejście zastosowano do pakietów pobieranych ze zdalnych adresów URL, na przykład archiwów tarball dostępnych przez HTTPS. Ustawienie --allow-remote również domyślnie blokuje ten wektor.

Nowy model wymaga ręcznego przeglądu i zatwierdzania zaufanych skryptów. W tym celu przewidziano mechanizm npm approve-scripts --allow-scripts-pending, który pozwala przygotować listę dozwolonych działań i zapisać ją w konfiguracji projektu. Z perspektywy DevSecOps oznacza to przejście z modelu implicit trust do modelu explicit allowlisting.

Równolegle wprowadzono zmiany dotyczące granularnych tokenów dostępu npm. Tokeny skonfigurowane tak, aby omijały uwierzytelnianie dwuskładnikowe, mają utracić możliwość wykonywania wrażliwych operacji administracyjnych. Obejmuje to między innymi zarządzanie tokenami, odzyskiwaniem dostępu, ustawieniami konta, konfiguracją 2FA, maintainerami pakietów oraz uprawnieniami organizacyjnymi. Planowane jest również dalsze ograniczenie ich roli w publikacji pakietów, tak aby proces publikacji wymagał bardziej zaufanego mechanizmu lub interakcji człowieka.

Konsekwencje / ryzyko

Zmiana domyślnego zachowania npm wyraźnie zmniejsza powierzchnię ataku, ale jednocześnie może powodować problemy kompatybilności w istniejących projektach. Wiele pakietów nadal opiera się na skryptach instalacyjnych do pobierania binariów, kompilacji natywnych modułów lub przygotowania środowiska uruchomieniowego. Po aktualizacji do npm 12 część instalacji może przestać działać, jeśli organizacja nie wdroży procesu zatwierdzania wymaganych skryptów.

Z perspektywy bezpieczeństwa jest to jednak korzystny kompromis. Atakujący często wykorzystują właśnie etap instalacji zależności, ponieważ jest on wykonywany automatycznie i zwykle ma szeroki dostęp do systemu plików, zmiennych środowiskowych, sekretów CI oraz poświadczeń deweloperskich. Domyślne zablokowanie tych działań ogranicza skuteczność kampanii opartych na zainfekowanych bibliotekach.

Wpływ odczują również organizacje korzystające z długowiecznych tokenów publikacyjnych. Ograniczenie tokenów omijających 2FA wymusza migrację do bezpieczniejszych metod automatyzacji, takich jak federacja tożsamości, krótkotrwałe poświadczenia i zaufane mechanizmy publikacji. To utrudnia przejęcie konta po wycieku pojedynczego tokena i zmniejsza ryzyko trwałej kompromitacji ekosystemu pakietów.

Rekomendacje

Organizacje korzystające z npm powinny jak najszybciej przeprowadzić testy kompatybilności z npm 12 w środowiskach deweloperskich i CI/CD. Należy zidentyfikować pakiety wymagające skryptów instalacyjnych oraz ustalić, które z nich są rzeczywiście niezbędne.

  • Przygotować listę zależności wymagających uruchamiania skryptów i zatwierdzać je jawnie.
  • Ograniczyć użycie zależności z repozytoriów Git i zdalnych URL do przypadków absolutnie koniecznych.
  • Przeprowadzić przegląd pipeline’ów publikacji pakietów oraz usunąć długowieczne tokeny omijające 2FA.
  • Migrować automatyzację publikacji do modeli opartych na OIDC, trusted publishing lub innych krótkotrwałych mechanizmach uwierzytelniania.
  • Monitorować pliki package.json, .npmrc i konfigurację buildów pod kątem nieautoryzowanych zmian.
  • Stosować skanowanie zależności pod kątem ryzyk supply chain, w tym typosquattingu, przejętych maintainerów i nietypowych skryptów lifecycle.
  • Egzekwować zasadę najmniejszych uprawnień dla runnerów CI oraz środowisk buildowych.

Dodatkowo zespoły bezpieczeństwa powinny potraktować aktualizację npm 12 jako okazję do przeglądu polityki zaufania wobec open source. Sama blokada skryptów nie eliminuje wszystkich zagrożeń, ale znacząco podnosi koszt skutecznego ataku i zwiększa widoczność niebezpiecznych zachowań w procesie instalacji.

Podsumowanie

npm 12 wprowadza jedną z najważniejszych zmian bezpieczeństwa w ekosystemie Node.js ostatnich lat. Domyślne wyłączenie skryptów instalacyjnych, blokada zależności z Git i zdalnych źródeł bez jawnej zgody oraz ograniczenie tokenów omijających 2FA to krok w stronę bardziej kontrolowanego i audytowalnego łańcucha dostaw. Dla zespołów deweloperskich oznacza to konieczność dostosowania procesów, ale z punktu widzenia cyberbezpieczeństwa jest to wyraźne wzmocnienie odporności na kompromitację zależności i nadużycia w pipeline’ach publikacyjnych.

Źródła

  1. https://thehackernews.com/2026/07/npm-12-disables-install-scripts-by.html
  2. https://github.blog/
  3. https://docs.npmjs.com/
  4. https://pnpm.io/