W NPM odkryto lukę, która pozwala na stwierdzenie istnienia pakietów w zamkniętych repozytoriach. Problem wynika z różnego czasu reakcji na zapytanie o istniejący oraz nieistniejący pakiet przez zewnętrznego użytkownika, który nie ma dostępu do repozytorium. W przypadku braku dostępu do jakichkolwiek pakietów w prywatnych repozytoriach serwer registry.npmjs.org zwraca błąd o kodzie „404”, jednak w przypadku istnienia pakietu o żądanej nazwie błąd generowany jest z zauważalnym opóźnieniem. Napastnik może wykorzystać tę szczególną cechę do określenia dostępności pakietu podczas zgadywania nazw pakietów z słowników.
Określenie nazw pakietów w zamkniętych repozytoriach może być konieczne do przeprowadzenia ataku poprzez mieszanie zależności, manipulującego przecięciem nazw zależności w publicznych i wewnętrznych repozytoriach. Znając, które wewnętrzne pakiety NPM są obecne w korporacyjnych repozytoriach, napastnik może publikować pakiety o tych samych nazwach i nowszych wersjach w publicznym repozytorium NPM. Jeśli podczas kompilacji wewnętrzne biblioteki nie są wyraźnie przypisane w ustawieniach do swojego repozytorium, menedżer pakietów npm uzna publiczne repozytorium za bardziej priorytetowe i pobierze przygotowany przez napastnika pakiet.
GitHub został powiadomiony o problemie w marcu, ale odmówił dodania ochrony przed atakiem, powołując się na ograniczenia architektoniczne. Firmom korzystającym z prywatnych repozytoriów zaleca się okresowe sprawdzanie występowania pokrywających się nazw w publicznym repozytorium lub stworzenie pod swoim nazwiskiem atrap o nazwach powtarzających nazwy pakietów w prywatnych repozytoriach, aby przestępcy nie mogli publikować swoich pakietów o pokrywających się nazwach.
Źródło: opennet.ru
