GitHub zaostrza bezpieczeństwo npm, by ograniczyć ataki na łańcuch dostaw

securitybeztabu.pl 3 miesięcy temu

Wprowadzenie do problemu / definicja

GitHub zapowiedział istotne zmiany bezpieczeństwa w ekosystemie npm, których celem jest ograniczenie nadużyć związanych z atakami na łańcuch dostaw oprogramowania. Problem dotyczy przede wszystkim sytuacji, w których samo uruchomienie procesu instalacji zależności może prowadzić do automatycznego wykonania kodu lub pobrania pakietów z mniej kontrolowanych źródeł.

To właśnie ten etap był w ostatnich latach wielokrotnie wykorzystywany przez cyberprzestępców do dostarczania złośliwego oprogramowania, wykradania sekretów środowiskowych oraz przejmowania pipeline’ów CI/CD. Nowe podejście ma przesunąć model bezpieczeństwa z domyślnego zaufania na model wymagający jawnej zgody.

W skrócie

Najważniejsza zapowiedź dotyczy npm v12, w którym domyślne zachowanie instalatora zostanie wyraźnie zaostrzone. Automatyczne uruchamianie skryptów instalacyjnych zależności, rozwiązywanie zależności z repozytoriów Git oraz pobieranie pakietów z odległych adresów URL nie będą już traktowane jako bezpieczne zachowania domyślne.

W praktyce oznacza to, iż organizacje korzystające z Node.js i npm będą musiały wcześniej zidentyfikować projekty zależne od dotychczasowych mechanizmów. GitHub sygnalizuje, iż już w npm 11.16.0 lub nowszym pojawiają się ostrzeżenia pomagające wykryć nadchodzące niekompatybilności.

Kontekst / historia

Ekosystem npm od lat pozostaje jednym z fundamentów współczesnego rozwoju aplikacji JavaScript i Node.js. Jego ogromna skala i popularność sprawiają jednak, iż jest również atrakcyjnym celem dla atakujących, którzy próbują wykorzystać zaufanie do popularnych pakietów i automatyzacji procesu budowania.

W ostatnich miesiącach i latach branża obserwowała liczne kampanie supply chain, w których złośliwe pakiety, przejęte konta maintainerów oraz nadużycia związane ze skryptami instalacyjnymi prowadziły do uruchamiania nieautoryzowanego kodu na stacjach deweloperskich i w środowiskach produkcyjnych. GitHub już wcześniej wzmacniał zabezpieczenia npm poprzez rozwój mechanizmów publikacji, kontroli dostępu i polityk bezpieczeństwa, a obecna zmiana wpisuje się w ten długofalowy kierunek.

Analiza techniczna

Najistotniejsza zmiana dotyczy skryptów wykonywanych podczas instalacji zależności. W npm v12 polecenie instalacji nie będzie już domyślnie uruchamiać skryptów takich jak preinstall, install i postinstall z pakietów zależnych, jeżeli nie zostaną one wcześniej jawnie zatwierdzone. Obejmuje to także sytuacje, w których dochodzi do niejawnej kompilacji modułów natywnych.

Drugim filarem zmian jest ograniczenie zależności pobieranych z repozytoriów Git. Dotychczas takie źródła mogły być rozwiązywane zarówno bezpośrednio, jak i tranzytywnie, co zwiększało powierzchnię ataku. Nowe podejście ma wymagać wyraźnej zgody, ponieważ zależności Git mogą uruchamiać dodatkowe ścieżki wykonania kodu oraz wpływać na zachowanie instalatora.

Trzecia istotna modyfikacja obejmuje zależności instalowane z odległych adresów URL, na przykład archiwów pobieranych przez HTTPS. Takie źródła również przestaną być domyślnie akceptowane bez wcześniejszego dopuszczenia. Z perspektywy bezpieczeństwa oznacza to utrudnienie prób obchodzenia kontroli rejestru pakietów oraz zmniejszenie ryzyka dostarczenia niezweryfikowanych artefaktów spoza standardowego procesu publikacji.

  • blokowanie automatycznego uruchamiania skryptów instalacyjnych zależności,
  • ograniczenie zależności pochodzących z repozytoriów Git,
  • blokowanie pakietów pobieranych z odległych adresów URL bez jawnej zgody,
  • wcześniejsze ostrzeżenia o niekompatybilnościach w nowszych wydaniach npm 11.

Konsekwencje / ryzyko

Dla organizacji rozwijających aplikacje w Node.js zmiany oznaczają wyraźne ograniczenie ryzyka automatycznego uruchomienia złośliwego kodu podczas instalacji zależności. Jest to szczególnie ważne w środowiskach CI/CD, gdzie proces instalacji często działa automatycznie i ma dostęp do cennych sekretów, tokenów oraz poświadczeń chmurowych.

Jednocześnie nowy model może wiązać się z ryzykiem operacyjnym. Część legalnych projektów korzysta z postinstalacyjnych skryptów, lokalnej kompilacji modułów natywnych, zależności Git lub paczek dostarczanych z niestandardowych źródeł. Po wdrożeniu npm v12 takie przypadki mogą przestać działać bez dodatkowej konfiguracji, co może prowadzić do błędów buildów, problemów z wdrożeniami i zakłóceń w odtwarzalności środowisk.

Warto również podkreślić, iż zmiany nie rozwiązują całego problemu supply chain. przez cały czas aktualne pozostają zagrożenia związane z przejęciem kont maintainerów, typosquattingiem, dependency confusion oraz złośliwym kodem wykonywanym już na etapie działania aplikacji. Nowe ustawienia domyślne ograniczają jednak jedną z najbardziej narażonych ścieżek wejścia.

Rekomendacje

Organizacje korzystające z npm powinny możliwie gwałtownie przeprowadzić inwentaryzację projektów pod kątem użycia skryptów preinstall, install, postinstall oraz prepare. Należy ustalić, które pakiety rzeczywiście wymagają takiego zachowania, a które można zastąpić bezpieczniejszymi odpowiednikami.

Dobrym krokiem przygotowawczym jest aktualizacja narzędzi do npm 11.16.0 lub nowszego i analiza ostrzeżeń pojawiających się podczas standardowych procesów instalacji. Dzięki temu zespoły mogą jeszcze przed migracją do npm v12 wykryć workflow oraz zależności wymagające jawnego dopuszczenia.

  • ograniczyć użycie zależności z Git i zdalnych URL do absolutnie uzasadnionych przypadków,
  • preferować pakiety z oficjalnego rejestru objęte standardowymi kontrolami bezpieczeństwa,
  • wdrożyć proces zatwierdzania nietypowych źródeł zależności,
  • monitorować pipeline’y CI/CD pod kątem uruchamiania nieautoryzowanych skryptów,
  • stosować skanowanie zależności, SBOM oraz kontrolę sekretów,
  • wzmacniać bezpieczeństwo kont maintainerów przez MFA i bezpieczne mechanizmy publikacji.

Z perspektywy zespołów bezpieczeństwa etap instalacji i budowania zależności powinien być traktowany jako krytyczny punkt egzekwowania polityk. Oznacza to potrzebę logowania zdarzeń instalacyjnych, monitorowania odstępstw od wzorców oraz regularnego przeglądu wyjątków bezpieczeństwa.

Podsumowanie

Zapowiedziane przez GitHub zmiany w npm należą do najważniejszych korekt modelu bezpieczeństwa instalacji zależności w ekosystemie JavaScript w ostatnim czasie. Domyślne blokowanie skryptów instalacyjnych, zależności Git i odległych źródeł URL ma ograniczyć skuteczność ataków supply chain wykorzystujących proces instalacji jako mechanizm wykonania kodu.

Dla organizacji oznacza to jednocześnie poprawę bezpieczeństwa i konieczność przygotowania procesów do bardziej restrykcyjnych ustawień. najważniejsze będzie wcześniejsze wykrycie zależności od dotychczasowych zachowań oraz wdrożenie jawnych, kontrolowanych wyjątków tam, gdzie są one rzeczywiście potrzebne.

Źródła

Idź do oryginalnego materiału