Менеджер паролей с открытым исходным кодом Bitwarden, обслуживающий более десяти миллионов пользователей и пятидесяти тысяч организаций, стал жертвой атаки на цепочку поставок, затронувшей версию его интерфейса командной строки (CLI) 2026.4.0. Этот инцидент входит в более широкую кампанию, ранее выявленную исследователями после компрометации инфраструктуры компании Checkmarx. Учитывая масштаб распространения Bitwarden - он входит в тройку корпоративных менеджеров паролей по уровню внедрения, - угроза затрагивает как рядовых пользователей, так и крупный бизнес, использующий CLI для автоматизации управления учётными данными.
Описание
Исследователи из компании Socket, специализирующейся на анализе безопасности открытых компонентов, обнаружили вредоносную активность в npm-пакете @bitwarden/cli версии 2026.4.0. Вредоносный код содержался в файле bw1.js, который входил в состав опубликованного пакета. Атака была осуществлена через скомпрометированное действие GitHub Actions в конвейере непрерывной интеграции и доставки (CI/CD) Bitwarden. Этот вектор полностью соответствует закономерностям, ранее задокументированным в рамках кампании, начавшейся с инцидента в Checkmarx. Сам инцидент не затронул другие компоненты экосистемы Bitwarden, такие как расширение для браузера Chrome или MCP-сервер, что позволяет локализовать угрозу именно на уровне CLI.
Технический анализ вредоносной полезной нагрузки (payload) показывает её глубокую связь с ранее обнаруженным кодом mcpAddon.js, который использовался в атаке на Checkmarx. Файл bw1.js содержит идентичный адрес командного центра (C2) - audit.checkmarx[.]cx/v1/telemetry, а также применяет ту же функцию обфускации __decodeScrambled с начальным значением 0x3039. Эксфильтрация данных происходит через API GitHub (путём создания коммитов) и через реестр npm (путём кражи токенов и перепубликации пакетов). Внутри полезной нагрузки найдены встроенные gzip-архивы с base64-кодированием, содержащие сценарий на Python для извлечения данных из памяти процесса GitHub Actions Runner.Worker, загрузчик setup.mjs для повторной публикации npm-пакетов, шаблон рабочего процесса GitHub Actions, жёстко зашифрованные RSA-ключи и идеологический манифест.
Особое внимание уделяется сбору учётных данных. Вредоносный код извлекает токены GitHub из памяти Runner.Worker и переменных окружения, учётные данные AWS из файлов ~/.aws/ и окружения, токены Azure через утилиту azd, учётные данные GCP через gcloud config config-helper, файлы конфигурации npm (.npmrc), SSH-ключи, переменные окружения, а также конфигурационные файлы Claude и MCP. Для эксфильтрации злоумышленники создают публичные репозитории под скомпрометированными учётными записями. Имена таких репозиториев строятся по шаблону "{слово}-{слово}-{три цифры}" в стилистике вселенной "Дюна". Зашифрованные результаты коммитятся, а токены встраиваются в сообщения коммитов с маркером "LongLiveTheResistanceAgainstMachines". Распространение атаки через цепочку поставок осуществляется путём кражи npm-токенов, идентификации доступных для записи пакетов и их перепубликации с внедрёнными preinstall-хуками. Кроме того, вредоносный код инжектирует рабочие процессы GitHub Actions для захвата секретов репозиториев.
Кампания содержит ряд примечательных технических особенностей:
- Обнаружен "аварийный выключатель" для русскоязычной локали: если системная локаль начинается с "ru", код завершает работу без каких-либо действий. Проверка выполняется через Intl.DateTimeFormat().resolvedOptions().locale и переменные окружения LC_ALL, LC_MESSAGES, LANGUAGE и LANG.
- Среда выполнения - интерпретатор Bun версии 1.3.13, загружаемый из релизов GitHub.
- В файле bw1.js предусмотрен механизм блокировки одновременного запуска: используется жёстко прописанный путь /tmp/tmp.987654321.lock.
- Для закрепления в системе вредоносный код инжектирует себя в файлы ~/.bashrc и ~/.zshrc.
Отдельного внимания заслуживает идеологическая составляющая, отличающая данную атаку от инцидента в Checkmarx. Если в случае с Checkmarx атака была приписана группе TeamPCP, а вредоносный код маскировался под легитимное описание "Checkmarx Configuration Storage", то здесь разработчики встроили прямое пропагандистское сообщение. Описание репозитория заменено на "Shai-Hulud: The Third Coming", а отладочные строки содержат фразу "Would be executing butlerian jihad!". Такое различие в операционных сигнатурах может указывать на другого оператора, использующего общую инфраструктуру, на отколовшуюся группировку с более сильными идеологическими мотивами или на эволюцию публичной позиции кампании.
Для организаций, установивших скомпрометированный npm-пакет Bitwarden CLI, сложившаяся ситуация должна рассматриваться как событие компрометации учётных данных и нарушения безопасности инфраструктуры непрерывной интеграции. Первоочередные шаги включают немедленное удаление затронутого пакета из систем разработчиков и сред сборки, ротацию всех токенов GitHub, npm-токенов, облачных учётных данных, SSH-ключей и секретов CI/CD, которые могли быть доступны этим средам. Рекомендуется проверить GitHub на предмет несанкционированного создания репозиториев, неожиданных файлов рабочих процессов в .github/workflows/, подозрительных запусков, загрузок артефактов и публичных репозиториев, соответствующих шаблону Dune-тематики. В облачных окружениях следует проанализировать журналы доступа на предмет необычного использования секретов и токенов, а также проверки на наличие новых выданных учётных данных. В долгосрочной перспективе снижение радиуса поражения будущих инцидентов в цепочке поставок возможно за счёт ограничения областей действия токенов, использования короткоживущих учётных данных, ужесточения прав доступа в GitHub Actions и мониторинга новых публичных репозиториев, создаваемых вне стандартных процессов релиза.
Индикаторы компрометации
Malicious Package
- @bitwarden/cli2026.4.0
Network Indicators
- 94.154.172.43
- https://audit.checkmarx.cx/v1/telemetry
File System Indicators
- /tmp/tmp.987654321.lock
- /tmp/_tmp_<Unix Epoch Timestamp>/
- package-updated.tgz