Исследователи компании Socket обнаружили кампанию под названием GemStuffer, в рамках которой более 150 пакетов были загружены в репозиторий RubyGems с нетипичной целью — использовать пакетный реестр не для распространения вредоносного кода среди разработчиков, а в качестве канала хранения и извлечения данных, собранных с порталов местного самоуправления Великобритании. Кампания затрагивает как экосистему RubyGems в целом, так и операторов публичных порталов на базе платформы ModernGov, хотя конечные цели злоумышленников остаются неясными.
Механика атаки: реестр как хранилище
По данным исследователей, пакеты GemStuffer не были рассчитаны на массовую компрометацию разработчиков. Многие из них практически не имели скачиваний, а полезная нагрузка описывается как повторяющаяся, шумная и необычно автономная. Вместо внедрения бэкдоров или кражи учётных данных скрипты внутри пакетов выполняли совершенно иную задачу:
- Загружали страницы с жёстко прописанных URL-адресов порталов муниципальных советов Великобритании
- Упаковывали полученные HTTP-ответы в валидные архивы формата
.gem - Публиковали эти архивы обратно в RubyGems, используя встроенные в код API-ключи реестра
Исследователи выявили два варианта реализации. В первом — полезная нагрузка создавала временное окружение с учётными данными RubyGems в директории /tmp, переопределяла переменную окружения HOME, собирала пакет локально и отправляла его через интерфейс командной строки gem. Во втором — архив загружался напрямую в API RubyGems через HTTP POST-запрос, минуя CLI. После публикации для извлечения скрапленных данных достаточно было выполнить команду gem fetch с указанием имени и версии пакета.
Такой подход превращает публичный пакетный реестр в своеобразное облачное хранилище, доступное без аутентификации на этапе чтения. Это принципиально отличается от типичных атак на цепочку поставок, где вредоносные пакеты рассчитаны на установку жертвами.
Целевые данные и неясные мотивы
Как сообщается, кампания была нацелена на публичные порталы системы ModernGov, используемые муниципальными советами Ламбета, Уондсворта и Саутуарка — районов Лондона. Собираемая информация включала:
- Календари заседаний комитетов
- Списки пунктов повестки дня
- Связанные PDF-документы
- Контактные данные должностных лиц
- Содержимое RSS-лент
Примечательно, что вся эта информация и без того находится в открытом доступе на порталах муниципалитетов. Это делает конечную цель кампании неочевидной. Socket предлагает несколько возможных интерпретаций: реестровый спам, прототип червя, автоматизированный скрапер, злоупотребляющий RubyGems как слоем хранения, или целенаправленное тестирование возможностей злоупотребления пакетными реестрами.
Связь с инцидентом в RubyGems
Кампания GemStuffer была выявлена на фоне того, что RubyGems временно отключил регистрацию новых аккаунтов после масштабной вредоносной атаки. Прямая связь между этими событиями не подтверждена, однако Socket отмечает, что GemStuffer вписывается в тот же паттерн злоупотреблений — создание новых пакетов с бессмысленными именами для размещения данных. Следует учитывать, что официального подтверждения от RubyGems о связи этих инцидентов в доступных источниках не приводится.
Оценка воздействия
Непосредственная угроза для разработчиков, использующих RubyGems, в данном случае минимальна — пакеты не предназначены для установки в проекты и не содержат традиционного вредоносного кода. Однако сам прецедент демонстрирует серьёзную проблему: пакетные реестры могут использоваться как инфраструктура для операций, не связанных с распространением программного обеспечения. Это создаёт нагрузку на модерацию, засоряет реестр и потенциально подрывает доверие к экосистеме.
Для операторов порталов ModernGov систематический сбор публичных данных сам по себе не является компрометацией, но может указывать на разведывательную активность — особенно в части контактных данных должностных лиц.
Рекомендации
- Администраторам RubyGems-зависимостей: проверьте, не появились ли в зависимостях проектов неизвестные пакеты с бессмысленными именами и минимальным количеством скачиваний. Используйте инструменты анализа зависимостей для выявления аномальных пакетов.
- Операторам порталов ModernGov: проанализируйте логи веб-серверов на предмет систематических автоматизированных запросов к страницам заседаний, повесток дня и контактных данных. Рассмотрите внедрение ограничения частоты запросов для защиты от массового скрапинга.
- Командам безопасности пакетных реестров: инцидент подчёркивает необходимость мониторинга не только вредоносного содержимого пакетов, но и аномальных паттернов публикации — массовая генерация пакетов с инкрементацией версий и встроенными учётными данными.
- Владельцам API-ключей RubyGems: убедитесь, что ваши ключи не скомпрометированы. Ротируйте ключи, если есть подозрения на утечку, и включите двухфакторную аутентификацию для публикации пакетов.
Кампания GemStuffer — нетипичный случай злоупотребления пакетным реестром, где RubyGems используется не как вектор атаки на разработчиков, а как бесплатная инфраструктура хранения данных. Независимо от того, является ли это тестированием концепции или частью более масштабной операции, инцидент указывает на необходимость расширения моделей обнаружения угроз в пакетных экосистемах за рамки традиционного поиска вредоносного кода — с включением анализа поведенческих паттернов публикации и содержимого пакетов.