Odkryli lukę w RubyGems.org, która umożliwiała podmianę pakietów

Niedawno pojawiły się wiadomości Krytyczna luka została zidentyfikowana w repozytorium pakietów rubygems.org (luka jest już skatalogowana jako CVE-2022-29176), który dopuszczać bez odpowiedniego zezwolenia zastępować pakiety innych osób w repozytorium, wyrywając prawidłowy pakiet i przesyłając w jego miejsce inny plik o tej samej nazwie i numerze wersji.

Wspomina się, że luka jest spowodowana błędem w procedurze obsługi akcji yank, który traktuje część nazwy po myślniku jako nazwę platformy, co umożliwiło zainicjowanie usuwania zewnętrznych pakietów, które pasują do części nazwy do znaku myślnika.

W szczególności w kodzie kontrolera pracy „szarpać”, wezwanie 'find_by!(full_name: "#{rubygem.name}-#{slug}")' był używany do wyszukiwania pakietów, podczas gdy parametr slug był przekazywany właścicielowi pakietu w celu określenia wersji do usunięcia.

Właściciel pakietu „rails-html” mógł podać wersję „rails-html-sanitizer-1.2.3” zamiast wersji „1.2.3”, co spowodowałoby zastosowanie operacji do pakietu „rails-html-sanitizer-1.2.3 " pakiet. ″ innej osoby. »

Wczoraj opublikowano poradnik bezpieczeństwa dla Rubygems.org.

Zgłoszenie dotyczyło błędu, który umożliwiał złośliwemu użytkownikowi wydobywanie niektórych klejnotów i przesyłanie różnych plików o tej samej nazwie, numerze wersji i innej platformie.

Przyjrzyjmy się bliżej, aby zobaczyć, co poszło nie tak podczas przechodzenia przez proces ekstrakcji. Jako pretekst wyobraźmy sobie scenariusz, w którym stworzyliśmy klejnot o nazwie „rails-html” z zamiarem uzyskania nieautoryzowanego dostępu do powszechnie używanego klejnotu „rails-html-sanitizer”.

Wspomina się, że muszą być spełnione trzy warunki, aby skutecznie wykorzystać tę lukę:

  • Atak można przeprowadzić tylko na pakietach, które w nazwie mają znak łącznika.
  • Atakujący musi być w stanie umieścić pakiet klejnotów z częścią nazwy aż do znaku łącznika. Na przykład, jeśli atak dotyczy pakietu „rails-html-sanitizer”, atakujący musi umieścić swój własny pakiet „rails-html” w repozytorium.
  • Zaatakowany pakiet musiał zostać utworzony w ciągu ostatnich 30 dni lub nie był aktualizowany przez 100 dni.

Problem został zidentyfikowany przez badacza bezpieczeństwa w ramach programu bounty HackerOne w celu znalezienia problemów z bezpieczeństwem w znanych projektach open source.

Problem naprawiono na RubyGems.org 5 maja i według twórców, nie zidentyfikowano dotychczas śladów eksploatacji luki w logach z ostatnich 18 miesięcy. Jednocześnie dotychczas przeprowadzono tylko pobieżny audyt, a w przyszłości planowany jest audyt głębszy.

Obecnie uważamy, że luka ta nie została wykorzystana.

RubyGems.org wysyła wiadomość e-mail do wszystkich właścicieli klejnotów, gdy wersja klejnotu zostanie opublikowana lub usunięta. Nie otrzymaliśmy żadnych wiadomości e-mail od właścicieli klejnotów z informacją, że ich klejnot został wydobyty bez zezwolenia.

Audyt zmian klejnotów w ciągu ostatnich 18 miesięcy nie znalazł żadnych przykładów złośliwego wykorzystania tej luki. Dalsze audyty pod kątem możliwego wykorzystania tego exploita nie wykazały żadnych przykładów wykorzystania tego exploita do kradzieży klejnotu bez autoryzacji w historii RubyGems. Nie możemy zagwarantować, że to się nigdy nie wydarzyło, ale nie wydaje się to prawdopodobne.

Aby zweryfikować swoje projekty, zaleca się przeanalizowanie historii operacji w pliku Gemfile.lock. Złośliwa aktywność wyraża się obecnością zmian o tej samej nazwie i wersji lub zmianą platformy (np. gdy pakiet xxx- 1.2.3 jest aktualizowany do xxx-1.2.3-xxx).

Jako rozwiązanie przed fałszowaniem ukrytych pakietów w systemach ciągłej integracji lub przy publikowaniu projektów, zachęca się programistów do korzystania z Bundlera z opcjami „–zamrożone” lub „–wdrażania”. potwierdzić zależności.

Wreszcie, jeśli chcesz dowiedzieć się więcej na ten temat, możesz sprawdzić szczegóły w następujący link.


Bądź pierwszym który skomentuje

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.