Atak na NPM pozwalający na ustalenie obecności pakietów w prywatnych repozytoriach

W NPM zidentyfikowano lukę umożliwiającą wykrycie istnienia pakietów w zamkniętych repozytoriach. Problem jest spowodowany różnymi czasami odpowiedzi przy żądaniu istniejącego i nieistniejącego pakietu od strony trzeciej, która nie ma dostępu do repozytorium. Jeżeli w repozytoriach prywatnych nie ma dostępu do żadnych pakietów, serwer rejestru.npmjs.org zwraca błąd z kodem „404”, natomiast jeśli pakiet o żądanej nazwie istnieje, błąd pojawia się z zauważalnym opóźnieniem. Osoba atakująca może użyć tej funkcji do ustalenia obecności pakietu, wyszukując nazwy pakietów za pomocą słowników.

Określenie nazw pakietów w repozytoriach prywatnych może być konieczne do przeprowadzenia ataku polegającego na mieszaniu zależności, który manipuluje przecięciem nazw zależności w repozytoriach publicznych i wewnętrznych. Wiedząc, które wewnętrzne pakiety NPM znajdują się w repozytoriach korporacyjnych, osoba atakująca może umieścić pakiety o tych samych nazwach i nowszych numerach wersji w publicznym repozytorium NPM. Jeśli podczas montażu biblioteki wewnętrzne nie zostaną jawnie połączone w ustawieniach ze swoim repozytorium, menedżer pakietów npm uzna repozytorium publiczne za wyższy priorytet i pobierze pakiet przygotowany przez atakującego.

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 repozytoriów prywatnych zaleca się okresowe sprawdzanie, czy w repozytorium publicznym pojawiają się nakładające się nazwy lub tworzenie w ich imieniu kodów pośredniczących o nazwach powtarzających nazwy pakietów w repozytoriach prywatnych, aby osoby atakujące nie mogły umieścić swoich pakietów o nakładających się nazwach.

Źródło: opennet.ru

Dodaj komentarz