Вредоносная версия пакета Bitwarden CLI похищает ключи SSH и облачные секреты разработчиков

information security

В экосистеме управления паролями и разработки произошёл инцидент, который ставит под угрозу тысячи DevOps-инженеров и компаний, использующих автоматизированные пайплайны. Версия 2026.4.0 популярного пакета @bitwarden/cli в реестре npm (еженедельно загружается 78 тысяч раз) оказалась вредоносной. Это не просто случайно затесавшаяся уязвимость, а продуманная многоступенчатая атака на цепочку поставок, нацеленная на кражу учётных данных разработчиков, включая SSH-ключи, токены облачных провайдеров и конфигурационные файлы протокола MCP (Model Context Protocol, используемого для интеграции AI-агентов).

Описание

Инцидент примечателен тем, что злоумышленники, судя по всему, смогли обойти механизмы доверенной публикации Bitwarden, заразив сам конвейер непрерывной интеграции и доставки. Вредоносная версия была опубликована под легитимным именем @bitwarden, что делает атаку особенно опасной для тех, кто привык доверять этому вендору. Сам червь получил название "Shai-Hulud: The Third Coming" - прямая отсылка к предыдущим волнам атак Shai-Hulud, которые ранее уже поражали экосистему npm и PyPI. Эксперты связывают эту атаку с недавним взломом инфраструктуры компании Checkmarx, в ходе которого злоумышленники получили доступ к проекту на Docker Hub и расширению для VS Code. Скорее всего, те же самые права были использованы для компрометации пайплайна публикации Bitwarden.

Технически атака начинается с того, что при установке пакета (npm install) автоматически срабатывает предустановочный хук, указывающий на новый файл bw_setup.js. Никакого взаимодействия с пользователем не требуется - вредоносный код выполняется сразу после установки. Это так называемая первая стадия. Файл bw_setup.js представляет собой кроссплатформенный загрузчик: он определяет операционную систему и архитектуру жертвы, затем скачивает легитимную среду выполнения Bun прямо из репозитория GitHub проекта oven-sh/bun и использует её для запуска полезной нагрузки второй стадии.

Вторая стадия - это файл bw1.js размером около 10 мегабайт. Код сильно запутан (обфусцирован), но после деобфускации выясняется, что перед нами полноценный сборщик учётных данных и червь для самовоспроизводства. Поведение практически один в один повторяет предыдущие волны Shai-Hulud, а внутри кода жёстко прописана строка "Shai-Hulud: The Third Coming", которая используется как описание для публичного репозитория GitHub, создаваемого для выгрузки украденных данных. Вся атака стилизована под вселенную "Дюны": названия репозиториев-хранилищ генерируются из случайных слов вселенной (например, fremen-sandworm-441, harkonnen-melange-7), а внутри payload обнаружен встроенный анти-AI манифест, который червь пытается записать в конфигурационные файлы оболочки жертвы.

Список файлов, которые сканирует вредоносная программа, включает практически все критически важные для разработчика хранилища секретов: приватные ключи SSH (~/.ssh/id_*), файл known_hosts, AWS-ключи (~/.aws/credentials), учётные данные GCP (~/.config/gcloud/credentials.db), токены аутентификации npm, токены Claude Code, конфигурации MCP-серверов для Claude и Kiro (которые могут содержать API-ключи и учётные данные баз данных), удалённые репозитории Git, сохранённые пароли Git, переменные окружения из .env и даже историю команд bash и zsh. Кроме того, вредоносная программа использует учётные данные облачных окружений для доступа к AWS SSM Parameter Store, AWS Secrets Manager, Azure Key Vault и GCP Secret Manager. Любой разработчик, запустивший этот пакет на облачном рабочем месте или в CI-среде, рискует потерять всю инфраструктуру секретов.

Вредоносное ПО связывается с двумя командными серверами. Основной расположен по адресу hxxps://audit.checkmarx[.]cx/v1/telemetry - это не легитимный домен Checkmarx, а подставной, зарегистрированный в доменной зоне острова Рождества (.cx). Сообщается, что этот URL используется для отправки телеметрии при каждом заражении. Запасной канал - поисковый запрос к API GitHub по коммитам, содержащим строку "beautifulcastle". Если основной C2 недоступен, червь ищет в этих коммитах подписанное заменяющее имя хоста.

Механизм распространения червя Shai-Hulud построен на злоупотреблении доверием к публичным репозиториям. Украденные данные выгружаются в новый публичный репозиторий, созданный от имени жертвы. Если жертва не состоит в организации GitHub, её токен также публикуется в открытом коммите GitHub, который служит "тайником": другие заражённые машины могут найти и повторно использовать этот токен для финансирования собственной выгрузки. Для жертв, состоящих в организациях, токен сохраняется в зашифрованных данных только внутри репозитория.

Последствия этой атаки крайне серьёзны. Так как пакет @bitwarden/cli используется для автоматизации работы с хранилищем паролей Bitwarden в скриптах и пайплайнах, любая организация, автоматически обновляющая зависимости без проверки контрольных сумм, уже могла быть скомпрометирована. Атака демонстрирует, что доверие к легитимным издателям не гарантирует безопасности, если скомпрометирован процесс сборки и публикации. Разработчикам рекомендуется немедленно проверить версии установленного пакета, заблокировать указанные домены C2 на межсетевых экранах и провести аудит токенов Git и облачных секретов на предмет утечки в публичные репозитории.

Индикаторы компрометации

  • Package: @bitwarden/cli (version 2026.4.0)
  • Preinstall file: bw_setup.js
    • SHA256: 37f34aa3b86db6898065f3ca886031978580a15251f2576f6d24c3b778907336
  • Payload file: bw1.js
    • SHA256: 18f784b3bc9a0bcdcb1a8d7f51bc5f54323fc40cbd874119354ab609bef6e4cb
  • GitHub repo description: Shai-Hulud: The Third Coming
  • Exfiltration endpoint: audit.checkmarx[.]cx:443/v1/telemetry
  • Public commit messages starting with LongLiveTheResistanceAgainstMachines‍
Комментарии: 0