Атака на RubyGems: захват неактивных аккаунтов и SleeperGem
Недавняя атака на цепочку поставок, вскрывшая проблемы безопасности в экосистеме RubyGems, заставила специалистов по-новому взглянуть на риск, который несут неактивные учётные записи мейнтейнеров. Вредоносный пакет, маскировавшийся под безобидный git_credential_manager, оказался дроппером, поэтапно наращивавшим скрытность и разрушительный потенциал, пока не превратился в практически невидимую угрозу для рабочих станций разработчиков. Инцидент показал, как злоумышленники способны использовать доверенные источники и «спящие» аккаунты, чтобы незаметно распространять вредоносный код, — и породил термин SleeperGem для обозначения таких законсервированных, но взрывоопасных точек входа.
Механика атаки: от дроппера к бесшумной интеграции
Пакет git_credential_manager был выпущен четырьмя последовательными версиями, каждая из которых совершенствовала механизм доставки вредоносной нагрузки. Первоначально он действовал как классический дроппер: загружал бинарные файлы с удалённого хоста git.disroot.org — публичного экземпляра Forgejo, зарегистрированного под псевдонимом git-ecosystem, чтобы выглядеть легитимно. При этом проверка сертификатов была намеренно отключена, а выполнение кода происходило напрямую через стандартные интерфейсы командной строки — shell или PowerShell.
Эволюция вредоносного gem-файла шла по пути снижения заметности:
- Одна из промежуточных итераций перенаправляла вывод атаки в /dev/null, подавляя любой лишний шум в процессе работы.
- Наиболее сложная версия, 2.8.2, интегрировала полезную нагрузку непосредственно в путь загрузки gem. Это означало, что для активации атаки больше не требовались никакие явные команды или этап установки — злоумышленнику было достаточно, чтобы жертва просто добавила git_credential_manager в зависимости своего проекта. Такой подход превращал безобидную строку в Gemfile в триггер полноценной компрометации.
Обход CI/CD: охота на рабочие станции
Авторы вредоносного кода реализовали хитрый защитный механизм, который проверял наличие специфических переменных окружения, характерных для платформ непрерывной интеграции (CI). При обнаружении любого из таких маркеров вредоносная логика немедленно останавливалась. Таким образом, атака намеренно избегала исполнения на CI-раннерах — изолированных и часто контролируемых средах, — и фокусировалась исключительно на машинах разработчиков, где ценность добытых данных и уровень привилегий значительно выше.
Эффект домино через пакет Dendreo
Для расширения охвата злоумышленники не ограничились публикацией нового пакета. Они скомпрометировали уже существующий проект Dendreo, добавив вредоносный гем в качестве его прямой зависимости. Пользователи, доверявшие Dendreo, невольно подтягивали заражённый компонент, что многократно увеличивало масштаб распространения — классический пример атаки на цепочку поставок, где удар наносится через безобидную, на первый взгляд, библиотеку.
SleeperGem: угроза, дремлющая в репозиториях
Разбор инцидента привёл к появлению термина SleeperGem, которым исследователи обозначили захваченные неактивные учётные записи мейнтейнеров. Такие аккаунты годами не проявляют активности, выглядят совершенно неопасными и потому редко привлекают внимание служб безопасности. Однако в руках злоумышленника они превращаются в идеальный инструмент для размещения вредоносных релизов от имени доверенного источника. Именно этот вектор — использование «спящих» точек доверия — стал ключевым фактором, позволившим атакующим до поры до времени оставаться незамеченными в официальном реестре RubyGems.
Случай с git_credential_manager наглядно демонстрирует, что управление жизненным циклом учётных записей и своевременная очистка репозиториев от заброшенных пакетов — не просто гигиеническая мера, а критический уровень защиты всей экосистемы open source.
Отчет получен из сервиса CTT Report Hub. Права на отчет принадлежат его владельцу.
Ознакомиться подробнее с отчетом можно по ссылке.



