Устранена уязвимость в RubyGems.org
2 апреля 2016 года стало известно о уязвимости, которая позволяет неавторизованным пользователям
заменить существующие .gem файлы при определённых обстоятельствах. Исправление было опубликовано в этот же день.
При дальнейшем рассмотрении был обнаружен похожий вектор атаки, исправление для которого было опубликовано уже 4 апреля.
В обоих векторах атаки, атакующий мог использовать специальную комбинацию имени и версии гема, чтобы заменить существуюший .gem файл.
Также известно, что .gem файлы загруженные с помощью этого метода не могут быть установлены через стандартную команду gem install
.
Первая часть этой уязвимости была введена 11 июня 2014, а вторая присутствовала с самого начала.
Все .gem файлы, у которых есть контрольная сумма sha256, были проверены и ни один из них не пострадал. Подсчёт контрольной суммы был введён 8 февраля 2015 года, таким образом файлы, загруженные до этой даты, не имеют контрольной суммы. Так или иначе, если .gem файл был скомпрометирован ранее, нет способа выяснить это.
Файлы с тире в имени (например «blank-blank») загруженные между 11 июня 2014 и 2 апреля 2016 были уязвимы. Файлы загруженные между 8 февраля 2015 и 2 апреля 2016 были уже проверены. Если у вас есть версия .gem файла, которая не была проверена, вы должны выполнить следующие действия:
- Скачать ваш gem.
- Запустить
gem unpack file.gem
. - Убедиться, что нет никаких неожиданных изменений.
- Запустить
gem spec file.gem
. - Убедиться, что нет никаких неожиданных изменений в
gemspec
.
В случае, если gem был скомпрометирован, пожалуйста выполните gem yank
для вашего файла,
и сообщите об этом команде по обеспечению безопасности как можно скорее, и пожалуйста отправьте ваш .gem файл.
Особая благодарность Eric Chapweske за выявление уязвимости и подробный отчёт. David Radcliffe и Arthur Neves за работу на исправлениями и проверками. Aaron Patterson, Nick Quaranto, André Arko, и Samuel Giddins за ревью и проверку.
ruby, rubygems, решето, уязвимость