15 августа 2026 года в репозитории RubyGems обнаружены вредоносные пакеты, которые устанавливают на компьютеры жертв многоступенчатую программу для кражи данных. Все пакеты представляют собой неуклюжие опечатки в названиях популярных Ruby-библиотек: например, brumdler и brundlef имитируют менеджер зависимостей bundler, а ubnlder, ubnuler, i18om, i1l8n и другие - библиотеки i18n, rake и activesupport. Несмотря на простоту подмены, злоумышленникам удалось собрать несколько сотен загрузок до того, как пакеты были удалены.
Описание
Атака начинается ещё на этапе установки. Вместо обычного конфигурационного файла для нативных расширений пакет содержит вредоносный сценарий, который сразу запускает скрытый код. Этот код отправляет на сервер злоумышленников информацию об операционной системе жертвы, а если пользователь работает в Windows, дополнительно загружает файл размером около 22 МБ с GitHub. Скачанный файл представляет собой загрузчик, написанный на Rust, внутри которого в зашифрованном виде находится основная программа-стилер размером около 11 МБ, созданная на Go. Никаких дополнительных загрузок после первого обращения к GitHub не происходит: всё последующее злонамеренное содержимое уже встроено в полученный файл и расшифровывается в памяти.
Кампания, как показало исследование, получила название StubMaker - по имени поддельных файлов сборки, которые создаёт вредоносный установщик. Вместо реальной компиляции расширения он генерирует пустые Makefile и скрипты, которые просто сообщают об успешном завершении. Это позволяет скрыть вредоносную активность: система считает, что установка прошла штатно, хотя на самом деле в этот момент уже происходит заражение.
Особенность кампании в том, что она почти не оставляет следов для защиты. Традиционные системы мониторинга часто ждут второго скачивания исполняемого файла, чтобы объявить тревогу, но здесь второй этап уже находится внутри первого. Поэтому к моменту, когда администраторы видят подозрительный сетевой запрос, основная кража данных уже выполнена. Вредоносная программа не использует механизмов закрепления в системе: она рассчитана на быстрое извлечение максимального объёма информации с последующей передачей злоумышленнику.
Первоначально были выявлены два пакета, опубликованные под аккаунтом gemlewqqhu1. В течение суток появился второй аккаунт mod8rz41mje, который выпустил ещё 15 вредоносных пакетов, включая новую версию одного из ранее удалённых. Анализ показал, что RubyGems.org позволяет перехватить имя уже удалённого пакета: если все версии изъяты, любой аккаунт может заново опубликовать пакет с этим именем, причём у прежнего владельца нет преимущественного права. Именно это, вероятно, произошло с brumdler. Кроме того, во всех 15 пакетах в поле "автор" указаны разные вымышленные имена, которые никак не проверяются репозиторием и не связаны с реальной учётной записью публикатора.
После запуска загрузчик расшифровывает встроенную программу-стилер и внедряет её в процессы браузеров на базе Chromium: Chrome, Edge, Brave, Opera, Vivaldi, Yandex и других. Стилер извлекает сохранённые логины и пароли, файлы cookie и токены сессий, данные банковских карт, историю посещений, а также содержимое расширений и внутренних баз браузеров. Особое внимание уделяется обходу современной защиты Chromium - шифрования, которое привязывает расшифровку секретов к конкретному приложению. Для этого в браузерный процесс внедряется дополнительная библиотека, которая через системный сервис получает ключ расшифровки и передаёт его основной программе.
Помимо браузерных данных, стилер собирает информацию о криптовалютных кошельках - как встроенных в браузер расширений (MetaMask, Coinbase Wallet, Phantom, Solflare и других), так и отдельных приложений (Exodus, Electrum, Atomic, Guarda). Он копирует файлы кошельков и сканирует текстовые файлы на предмет сид-фраз - наборов слов, дающих доступ к средствам. Найденные фразы проверяются по стандартному списку и сохраняются в отдельный файл. Также программа извлекает данные десктопного мессенджера Telegram, включая файлы локальной базы.
Вся собранная информация упаковывается в защищённый паролем архив в памяти и загружается на популярный файлообменник Gofile. После этого ссылка на скачивание архива и сводка о количестве украденных данных отправляются на сервер злоумышленников по незашифрованному протоколу. Интересно, что в архиве также содержатся сведения о системе: версия операционной системы, модель процессора и видеокарты, объём оперативной памяти и публичный IP-адрес жертвы.
По оценке аналитиков, основная цель кампании - быстрый сбор конфиденциальных данных и их передача, а не долговременный доступ к системам. Вредоносный код не создаёт запланированных задач и не добавляет автозагрузку, поэтому после одной успешной кражи он больше не появляется на машине. Тем не менее ущерб может быть серьёзным: похищенные пароли и файлы cookie позволяют получить доступ к почте, соцсетям и корпоративным сервисам, а сид-фразы криптокошельков - к полному контролю над средствами.
При подозрении на заражение специалисты рекомендуют немедленно изолировать устройство от сети. Необходимо отозвать все активные сессии браузеров и Telegram, сменить пароли к сервисам с чистого устройства и считать данные банковских карт скомпрометированными. Криптовалютные средства следует переместить на новые кошельки, созданные на доверенном устройстве, так как хранение сид-фраз на заражённом компьютере больше не считается безопасным. Разработчикам Ruby-проектов стоит проявлять осторожность при установке зависимостей и проверять имена пакетов на предмет опечаток, а также использовать инструменты проверки целостности и регулярно обновлять систему.
Индикаторы компрометации
IPv4
- 193.70.34.101
IPv4 Port Combination
- 193.70.34.101:20099
Domain
- dresslee.com
Domain Port Combination
- dresslee.com:20027
URL
- http://193.70.34.101:20099/vote
- http://dresslee.com:20027/xf39jMJ9P1
- https://github.com/bebraz1/qPzM50V1AKG0rVlH/releases/download/null/main.exe
SHA256
- 1afff50ca4064310d3492c652e1c3168216dcb42063e0b26c223038db46b8731
- 2edf1494951ea52eb86c606212668822081b3c589b821e8ec33cde59b65141a7
- 67719fa6fcaa97936bf678565d6777db5c194e14efeba16864be8dac966e24bc
- 6f088ade49456db2422c3edfbb9998f4a3e9cce7c4c00a7279fb45d672a82b7d
- a280b369c95b04530af11598f15a58328722af0325509fe1c55028c3fa873111