Киберпреступность

Фальшивые dev-пакеты прошли сразу в пять экосистем: исследователи нашли новую волну Contagious Interview

Маша Даровская
By Маша Даровская , IT-редактор и автор
Фальшивые dev-пакеты прошли сразу в пять экосистем: исследователи нашли новую волну Contagious Interview
Обложка © Anonhaven

Исследователи Socket сообщили о новой волне кампании Contagious Interview: на этот раз вредоносные пакеты нашли сразу в пяти экосистемах открытого ПО — npm, PyPI, Go Modules, crates.io и Packagist. По данным компании, пакеты маскировались под обычные инструменты разработчика, например библиотеки для логирования, отладки, HTTP-запросов и работы с лицензиями, но на деле выступали загрузчиками вредоносного кода.

В публикации перечислены конкретные имена пакетов и модулей, которые исследователи связали с этой активностью: dev-log-core, logger-base, logkitx в npm; logutilkit, apachelicense, fluxhttp, license-utils-kit в PyPI; github.com/golangorg/formstash в Go Modules; logtrace в crates.io; и golangorg/logkit в Packagist.

браз npm aokisasakidev1, когда его набор пакетов еще был активен

На скриншоте выше показан образ npm aokisasakidev1, когда его набор пакетов еще был активен.

Исследователи также пишут, что злоумышленники действовали под псевдонимами в GitHub, в том числе golangorg.

На момент захвата учетная запись содержала log-base, dev-log, и logger-base (связанные со вредоносной строкой загрузчика npm, привязанной к dev-log-core); logutilkit(вредоносный пакет PyPI logutilkit); formstash( вредоносный модуль Go github[.]com/golangorg/formstash); и logkit( вредоносный пакет Packagist golangorg/logkit). Вредоносный крейт Rust logtrace также связан с той же учетной записью GitHub и личностью. Вместе эти пакеты демонстрируют операцию, охватывающую JavaScript, Python, Go, Rust и PHP с одного псевдонима.

Скриншот учетной записи злоумышленника golangorg на GitHub, показывающий текущие общедоступные репозитории, связанные с исследуемым нами кластером.

Пакеты вредоносного ПО разработаны так, чтобы имитировать легитимные инструменты разработчиков (такие как debug, debug-logfmt, pino-debug, baraka, license, http, libprettylogger, и openlss/func-log), при этом незаметно функционируя как загрузчики вредоносного ПО, расширяя устоявшуюся тактику Contagious Interview до скоординированной операции по распространению вредоносного ПО в рамках всей экосистемы.

Главная особенность этой волны — повторяющийся сценарий загрузки второго этапа заражения. По данным Socket, многие пакеты не содержали весь вредоносный функционал прямо в основном коде, а сначала обращались к внешней инфраструктуре, получали downloadUrl, скачивали ZIP-архив вроде ecw_update.zip, распаковывали его во временный каталог и запускали платформозависимый полезный груз. Такой подход усложняет обнаружение: на первый взгляд пакет может выглядеть как обычная библиотека, а вредоносная логика срабатывает уже во время работы конкретной функции.

Анализ связывает эту активность с инфраструктурой, включая apachelicense[.]vercel[.]app, ngrok-free[.]vercel[.]app, logkit.onrender[.]com, logkit-tau[.]vercel[.]app, 66[.]45[.]225[.]94, и шаблонами доставки на основе Google Drive.

Исследователи отдельно подчеркивают, что вредоносный код часто был спрятан не в установочном сценарии, а внутри на вид безобидных методов. Например, в Python-пакетах запуск скрывался в функциях с названиями вроде find_by_key(), а в Rust-крейте logtrace — внутри метода Logger::trace(). В Go-модуле formstash, который внешне был похож на реальный парсер multipart-данных, нашли посторонний вспомогательный код для загрузки и запуска следующего этапа.

По оценке Socket, основная цель этой активности — кража данных и удаленный доступ к машине разработчика. В статье говорится о попытках похищать учетные данные, данные браузеров, содержимое менеджеров паролей и криптокошельков. Для Windows-варианта license-utils-kit компания описывает более тяжелый сценарий: удаленное выполнение команд, кейлоггинг, сбор файлов, кражу данных браузера и кошельков, а также разворачивание средств удаленного доступа.

В пакетах PyPI публичные сообщения от Bad Packages также выявили хеши доказательств второго этапа 9a541dffb7fc18dc71dbc8523ec6c3a71c224ffeb518ae3a8d7d16377aebee58, bb2a89001410fa5a11dea6477d4f5573130261badc67fe952cfad1174c2f0eddа

Zscaler обнаружил дополнительную полезную нагрузку RAT на основе Python с хешем SHA-256 7c5adef4b5aee7a4aa6e795a86f8b7d601618c3bc003f1326ca57d03ec7d6524.

То, что речь идет не о единичном эпизоде, подтверждают и другие источники. Microsoft в марте 2026 года писала, что Contagious Interview — это продолжающаяся с 2022 года кампания, в которой злоумышленники используют доверие к процессу найма: под видом тестовых заданий и репозиториев для собеседований они убеждают разработчиков запускать пакеты, команды и задачи из IDE. Microsoft также отмечает, что такие атаки нацелены на разработчиков, потому что у них часто есть доступ к исходному коду, токенам, ключам подписи, CI/CD и облачной инфраструктуре.

Есть и внешнее подтверждение по отдельным артефактам. Для крейта logtrace уже опубликована запись в базе RustSec: пакет удалили из crates.io как содержащий вредоносный код. 

Socket пишет, что отслеживает кампанию с 2024 года и сейчас связывает с ней уже более 1700 вредоносных артефактов. На отдельной странице кампании компания указывает 1705 затронутых пакетов и активность как минимум в пяти экосистемах — cargo, composer, npm, pypi и go. При этом последняя активность на странице кампании отмечена 7 апреля 2026 года, то есть история остается живой, а не архивной.

Microsoft рекомендует запускать тестовые задания и репозитории от рекрутеров только в изолированной среде — например, в отдельной виртуальной машине без доступа к рабочим секретам и продакшен-ресурсам. Отдельно советуют проверять сторонние репозитории до запуска скриптов, установки зависимостей и доверия к задачам IDE, а также внимательно относиться к шаблонам «скачай и сразу выполни».

*

- Contagious Interview — это название кампании, в которой разработчиков атакуют через поддельные вакансии, тестовые задания и репозитории для «собеседования». Microsoft пишет, что она активна как минимум с декабря 2022 года.

- Второй этап заражения — это дополнительный вредоносный модуль, который не всегда лежит внутри самого пакета. Пакет может сначала скачать его с внешнего сервера уже после запуска. Именно это и описывает Socket для новой волны.

- Загрузчик — промежуточный вредоносный код, который сам по себе может делать немного, но умеет подтянуть основной полезный груз, запустить его и закрепиться в системе. В этой истории как раз такие загрузчики и прятали под видом обычных библиотек.

Есть новость? Станьте автором.

Мы сотрудничаем с независимыми исследователями и специалистами по кибербезопасности. Отправьте нам новость или предложите статью на рассмотрение редакции.

Вопросы по теме

Что произошло?
Исследователи нашли новую волну Contagious Interview, в которой вредоносные пакеты публиковались сразу в пяти экосистемах: npm, PyPI, Go Modules, crates.io и Packagist.
Под что маскировались пакеты?
Под обычные инструменты для разработки: библиотеки для логирования, отладки, лицензий и HTTP-утилиты.
Что делали эти пакеты?
Они обращались к внешней инфраструктуре, получали ссылку на скачивание, подтягивали ZIP-архив и запускали следующий этап заражения.
Что именно пытались украсть?
По данным Socket и Microsoft, злоумышленников интересовали учетные данные, данные браузеров, менеджеров паролей, криптокошельков, а также ключи и другие секреты разработчиков.
Что делать разработчикам и командам?
Запускать тестовые задания и чужие репозитории в отдельной изолированной среде, не давать IDE бездумно доверять репозиторию и не выполнять «быстрые» команды из переписки без проверки.