Luka, która pozwalała na wydanie aktualizacji dla dowolnego pakietu w repozytorium NPM

Firma GitHub ujawniała informacje o dwóch incydentach w infrastrukturze repozytorium pakietów NPM. 2 listopada niezależni badacze bezpieczeństwa (Kajetan Grzybowski i Maciej Piechota) w ramach programu Bug Bounty zgłosili do repozytorium NPM lukę, która pozwalała na opublikowanie nowej wersji dowolnego pakietu, wykorzystując w tym celu swoje konto, które nie było autoryzowane do przeprowadzania takich aktualizacji.

Luka została spowodowana nieprawidłowym sprawdzeniem uprawnień w kodzie mikroserwisów obsługujących zapytania do NPM. Usługa autoryzacji wykonywała weryfikację praw dostępu do pakietów na podstawie danych przesyłanych w żądaniu, ale inna usługa, która ładowała aktualizację do repozytorium, określała pakiet do publikacji w oparciu o zawartość metadanych w załadowanym pakiecie. W ten sposób atakujący mógł zażądać publikacji aktualizacji dla swojego pakietu, do którego ma dostęp, ale wskazać w samym pakiecie informacje o innym pakiecie, który ostatecznie zostałby zaktualizowany.

Problem został usunięty sześć godzin po pojawieniu się informacji o luce, ale luka była obecna w NPM dłużej, niż obejmują to logi z telemetrii. GitHub twierdzi, że nie zarejestrowano dowodów na przeprowadzenie ataków z wykorzystaniem tej luki od września 2020 roku, ale nie ma gwarancji, że problem nie był wykorzystywany wcześniej.

Drugi incydent miał miejsce 26 października. W trakcie prac technicznych z bazą danych usługi replicate.npmjs.com wykryto obecność danych w bazie danych dostępnych dla zewnętrznych zapytań, ujawniających informacje o nazwach wewnętrznych pakietów, które były wymieniane w dzienniku zmian. Informacje o takich nazwach mogą być wykorzystane do przeprowadzenia ataków na zależności w wewnętrznych projektach (w lutym podobny atak pozwolił na wykonanie kodu na serwerach PayPal, Microsoft, Apple, Netflix, Uber i jeszcze 30 firm).

Ponadto, w związku z rosnącą liczbą przypadków przejmowania repozytoriów dużych projektów i promowania złośliwego kodu poprzez kompromitację kont deweloperów, firma GitHub postanowiła wprowadzić obowiązkowe uwierzytelnianie dwuskładnikowe. Zmiana wejdzie w życie w pierwszym kwartale 2022 roku i będzie obejmować opiekunów oraz administratorów pakietów znajdujących się na liście najpopularniejszych. Dodatkowo ogłoszono modernizację infrastruktury, która będzie wdrażać automatyczny monitoring i analizę nowych wersji pakietów w celu wczesnego wykrywania złośliwych zmian.

Przypomnijmy, że zgodnie z przeprowadzonym w 2020 roku badaniem, jedynie 9,27% opiekunów pakietów korzysta z uwierzytelniania dwuskładnikowego do ochrony dostępu, a w 13,37% przypadków przy rejestracji nowych kont deweloperzy próbowali ponownie używać skompromitowanych haseł, występujących w znanych wyciekach. W trakcie sprawdzania bezpieczeństwa używanych haseł uzyskano dostęp do 12% kont w NPM (13% pakietów) z powodu używania przewidywalnych i banalnych haseł, takich jak „123456”. Wśród problematycznych znalazły się 4 konta użytkowników z Top20 najpopularniejszych pakietów, 13 kont, których pakiety były pobierane ponad 50 mln razy miesięcznie, 40 — powyżej 10 mln pobrań miesięcznie oraz 282 z ponad 1 mln pobrań miesięcznie. Biorąc pod uwagę pobieranie modułów w łańcuchu zależności, kompromitacja niepewnych kont mogła wpłynąć na łącznie do 52% wszystkich modułów w NPM.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster