Дослідники компанії Socket виявили кампанію під назвою GemStuffer, у межах якої до репозиторію RubyGems було завантажено понад 150 пакетів з нетиповою метою — використовувати пакетний реєстр не для розповсюдження зловмисного коду серед розробників, а як канал зберігання та отримання даних, зібраних з порталів місцевого самоврядування Великої Британії. Кампанія зачіпає як екосистему 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 використовується не як вектор атаки на розробників, а як безкоштовна інфраструктура зберігання даних. Незалежно від того, чи є це тестуванням концепції, чи частиною масштабнішої операції, інцидент вказує на необхідність розширення моделей виявлення загроз в пакетних екосистемах за межі традиційного пошуку зловмисного коду — із включенням аналізу поведінкових патернів публікації та вмісту пакетів.