Уязвимост в RubyGems.org, която позволява подмяна на чужди пакети

В хранилището на пакети RubyGems.org е открита критична уязвимост (CVE-2022-29176), която позволява без необходимите разрешения да се подменят определени чужди пакети в хранилището чрез иницииране на извлечение (yank) на легитимен пакет и качване на друг файл със същото име и номер на версия.

За успешно експлоатиране на уязвимостта е необходимо изпълнението на три условия:

  • Атаката може да бъде извършена само срещу пакети, чието име съдържа символа дефис.
  • Атакуващият трябва да има възможност да качи gem-пакет с част от името преди символа дефис. Например, ако атаката се извършва срещу пакет «rails-html-sanitizer», атакуващият трябва да качи в хранилището свой собствен пакет «rails-html».
  • Пакетът, срещу който се извършва атаката, трябва да е създаден през последните 30 дни или да не е обновяван през последните 100 дни.

Уязвимостта е причинена от грешка в обработчика на действие «yank», който тълкува частта от името след дефиса като име на платформа, позволявайки инициирането на изтегляне на чужди пакети, съвпадащи в частта от името преди символа дефис. По-специално, в кода на обработчика за операцията «yank» за търсене на пакети е използвано извикване ‘find_by!(full_name: «#{rubygem.name}-#{slug}»)’, при което параметърът «slug» е бил предаден от собственика на пакета за определяне на изтегляната версия. Собственикът на пакета «rails-html» вместо версия «1.2.3» може да е посочил «sanitizer-1.2.3», което би довело до прилагане на операцията към чужд пакет «rails-html-sanitizer-1.2.3».

Проблемата е открита от изследователя по сигурността в рамките на действаща програма за награди за откриване на проблеми със сигурността в известни отворени проекти на HackerOne. Проблемът е отстранен в RubyGems.org на 5 май и според разработчиците досега не са открили следи от експлоатация на уязвимостта в логовете за последните 18 месеца. Към момента е проведен само повърхностен одит и по-късно се планира извършването на по-дълбока проверка.

Препоръчва се да се анализира историята на операциите в файла Gemfile.lock, за да се проверят проектите. Зловредната активност се изразява в наличие на промени с запазване на името и версията или смяна на платформата (например, когато gem name-1.2.3 е обновен до gem name-1.2.3-java). Като обходен метод за защита от скрито заместване на пакети в системи за непрекъсната интеграция или при публикуване на проекти, на разработчиците се препоръчва да използват Bundler с опции „—frozen“ или „—deployment“ за фиксиране на зависимостите.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster