Zagrożenie w RubyGems.org umożliwiające podmianę cudzych pakietów

W repozytorium pakietów RubyGems.org wykryto krytyczną lukę (CVE-2022-29176), która umożliwia, bez odpowiednich uprawnień, zastąpienie niektórych obcych pakietów w repozytorium poprzez inicjowanie wycofania (yank) legalnego pakietu i przesłanie zamiast niego innego pliku o tej samej nazwie i numerze wersji.

Aby skutecznie wykorzystać lukę, muszą być spełnione trzy warunki:

  • Atak może być przeprowadzony tylko na pakiety, w których nazwie użyto znaku minus.
  • Napastnik musi mieć możliwość umieszczenia pakietu gem z częścią nazwy przed znakiem minus. Na przykład, jeśli atak jest przeprowadzany na pakiet „rails-html-sanitizer”, napastnik musi umieścić w repozytorium własny pakiet „rails-html”.
  • Pakiet, na który jest przeprowadzany atak, musi zostać utworzony w ciągu ostatnich 30 dni lub nie być aktualizowany przez 100 dni.

Luka jest spowodowana błędem w obsłudze akcji „yank”, który traktuje część nazwy po znaku minus jako nazwę platformy, co pozwalało na inicjowanie usuwania obcych pakietów, które pasują częścią nazwy przed znakiem minus. W szczególności, w kodzie obsługi operacji „yank” do wyszukiwania pakietów wykorzystywano wywołanie 'find_by!(full_name: "#{rubygem.name}-#{slug}")', podczas gdy parametr „slug” był przekazywany przez właściciela pakietu w celu określenia usuwanej wersji. Właściciel pakietu „rails-html” zamiast wersji „1.2.3” mógł by wskazać „sanitizer-1.2.3”, co doprowadziłoby do zastosowania operacji do obcego pakietu „rails-html-sanitizer-1.2.3”.

Problem został wykryty przez badacza bezpieczeństwa w ramach aktywnego programu nagród za wyszukiwanie problemów z bezpieczeństwem w znanych projektach otwartych na HackerOne. Problem został rozwiązany w RubyGems.org 5 maja, a według oświadczenia deweloperów, jak dotąd nie wykryto śladów eksploatacji luki w logach w ciągu ostatnich 18 miesięcy. Przeprowadzono jedynie powierzchowny audyt, a w przyszłości planowane jest przeprowadzenie dokładniejszej kontroli.

Zaleca się analizę historii operacji w pliku Gemfile.lock, aby sprawdzić swoje projekty; złośliwa aktywność objawia się poprzez zmiany z zachowaniem nazwy i wersji lub zmianą platformy (na przykład, gdy pakiet gemname-1.2.3 został zaktualizowany do gemname-1.2.3-java). Jako alternatywną metodą ochrony przed ukrytym zastępowaniem pakietów w systemach ciągłej integracji lub przy publikacji projektów, deweloperom zaleca się korzystanie z Bundlera z opcjami „—frozen” lub „—deployment” do zablokowania zależności.

Ź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