Luka umożliwiająca wydanie aktualizacji dla dowolnego pakietu w repozytorium NPM

GitHub ujawnił dwa incydenty w infrastrukturze repozytorium pakietów NPM. 2 listopada zewnętrzni badacze bezpieczeństwa (Kajetan Grzybowski i Maciej Piechota) w ramach programu Bug Bounty zgłosili obecność luki w repozytorium NPM, która umożliwia opublikowanie nowej wersji dowolnego pakietu przy użyciu Twojego konta, który nie jest upoważniony do dokonywania takich aktualizacji.

Przyczyną luki było nieprawidłowe sprawdzenie uprawnień w kodzie mikroserwisów przetwarzających żądania do NPM. Usługa autoryzacji przeprowadziła kontrolę uprawnień pakietu na podstawie danych przekazanych w żądaniu, ale inna usługa, która przesłała aktualizację do repozytorium, określiła pakiet do opublikowania na podstawie zawartości metadanych przesłanego pakietu. Zatem osoba atakująca może zażądać publikacji aktualizacji swojego pakietu, do którego ma dostęp, ale w samym pakiecie podać informacje o innym pakiecie, który ostatecznie zostanie zaktualizowany.

Problem został naprawiony 6 godzin po zgłoszeniu luki, jednakże luka występowała w NPM dłużej niż pozwalają na to dzienniki telemetryczne. GitHub twierdzi, że od września 2020 roku nie było żadnych śladów ataków wykorzystujących tę lukę, nie ma jednak gwarancji, że problem nie był wcześniej wykorzystywany.

Do drugiego zdarzenia doszło 26 października. Podczas prac technicznych z bazą danych usługi replikate.npmjs.com ujawniono obecność w bazie danych dostępnych dla żądań zewnętrznych poufnych danych, ujawniając informację o nazwach wewnętrznych pakietów, które zostały wymienione w dzienniku zmian. Informacje o takich nazwach mogą zostać wykorzystane do przeprowadzenia ataków zależnościowych na wewnętrzne projekty (w lutym podobny atak pozwolił na wykonanie kodu na serwerach PayPal, Microsoft, Apple, Netflix, Uber i 30 innych firm).

Ponadto, ze względu na rosnącą liczbę przypadków przechwytywania repozytoriów dużych projektów i promowania złośliwego kodu poprzez włamywanie się na konta programistów, GitHub zdecydował się wprowadzić obowiązkowe uwierzytelnianie dwuskładnikowe. Zmiana wejdzie w życie w pierwszym kwartale 2022 roku i będzie dotyczyć opiekunów i administratorów pakietów znajdujących się na najpopularniejszej liście. Dodatkowo informuje się o modernizacji infrastruktury, w ramach której wprowadzone zostanie automatyczne monitorowanie i analiza nowych wersji pakietów w celu wczesnego wykrywania szkodliwych zmian.

Pamiętajmy, że według badania przeprowadzonego w 2020 roku jedynie 9.27% opiekunów pakietów stosuje uwierzytelnianie dwuskładnikowe w celu ochrony dostępu, a w 13.37% przypadków podczas rejestracji nowych kont programiści próbowali ponownie wykorzystać zhakowane hasła, które pojawiły się w znane wycieki haseł. Podczas przeglądu bezpieczeństwa haseł uzyskano dostęp do 12% kont NPM (13% pakietów) w wyniku użycia przewidywalnych i trywialnych haseł, takich jak „123456”. Wśród problematycznych znalazły się 4 konta użytkowników z 20 najpopularniejszych pakietów, 13 kont z pakietami pobranymi ponad 50 milionów razy w miesiącu, 40 z ponad 10 milionami pobrań miesięcznie i 282 z ponad 1 milionem pobrań miesięcznie. Biorąc pod uwagę ładowanie modułów wzdłuż łańcucha zależności, naruszenie niezaufanych kont może dotyczyć aż do 52% wszystkich modułów w NPM.

Źródło: opennet.ru

Dodaj komentarz