В начале сентября 2026 года в Terraform Registry появились два пакета, которые почти невозможно отличить от легитимных. Разница — в одном символе. Цена ошибки — полный доступ к машине разработчика.
Исследователи безопасности из Aikido зафиксировали случай, который они сами называют первым известным примером систематического распространения вредоносного ПО через Terraform Registry. Инфраструктурный код — то, что по определению выполняется с высокими привилегиями и на машинах, где лежат ключи от облаков, — оказался идеальной платформой для атаки на цепочку поставок.
Ловушка в одну букву
В начале сентября в реестре появились два провайдера: gocommunity-io/dockerd и kreuzwenker/docker. Второй имитирует популярный kreuzwerker/docker, у которого около 56 миллионов загрузок. Разница — одна буква в имени автора. Для человека, который копирует имя пакета из документации или из головы, это практически неразличимо. Для автоматических систем проверки — тоже, потому что формально это разные пакеты с разными хэшами.
Terraform-провайдер — это не просто библиотека. Это плагин, через который Terraform управляет внешними сервисами. Он запускается прямо на машине разработчика или в CI/CD-среде, а значит, получает доступ к тем же учётным данным, что и сам Terraform: токены облачных провайдеров, SSH-ключи, доступы к репозиториям. Именно это делает такие атаки столь опасными.
Код, который прячется до поры до времени
Вредоносная логика в обоих провайдерах почти не выдаёт себя. Она срабатывает только тогда, когда SHA-256 от объединённых значений containerName и networkID совпадает с заранее заданным хэшем. До этого момента код выглядит абсолютно безобидно — и автоматические сканеры, и ручной просмотр не находят ничего подозрительного.
После срабатывания триггера программа расшифровывает путь к спрятанному архиву, извлекает содержимое, расшифровывает файлы через AES и запускает полученный Go-код отдельной командой. Это классическая двухстадийная схема: сначала безобидная обёртка, потом — полезная нагрузка.
RAT, который говорит через Slack и блокчейн
На второй стадии загружается RAT — троян удалённого доступа. Он собирает сведения об операционной системе, архитектуре, имени компьютера, пользователе и наличии Node.js. Затем связывается с управляющей инфраструктурой.
Самое интересное — каналы связи. Команды приходят по двум независимым путям: через Slack и через смарт-контракт в тестовой сети Arbitrum Sepolia. RAT опрашивает блокчейн примерно раз в три секунды, а Slack — раз в десять секунд. Сообщения шифруются отдельными ключами для каждого заражённого клиента. Такая схема затрудняет анализ: в обычной песочнице провайдер может вообще не показать вредоносного поведения, если проверяющая сторона не воспроизведёт нужные параметры запуска.
Go-модули как запасной аэродром
Параллельно злоумышленники распространяли тот же код через Go-модули gocommunity.io/orderedbtree и gogets.dev/btreex. Во втором случае архив замаскировали под SQL-файл, а запуск тоже привязали к специальному входному значению. Авторы кампании подделали даты коммитов, поэтому часть истории проекта выглядела старше реальной публикации пакета в сентябре.
Для маскировки операторы создали домены gocommunity[.]io и gogets[.]dev, которые изображали новые экосистемы пакетов Go. Похожая тактика уже охватывала npm, PyPI, Go Modules и другие площадки, где вредоносные зависимости выдавали за обычные инструменты разработки. Новые домены, по оценке Aikido, должны были повысить доверие к поддельным пакетам.
След ведёт к Lazarus Group
Следы инфраструктуры и общий публичный ключ связывают новые образцы с кампанией Graphalgo. ReversingLabs в феврале связала Graphalgo с северокорейской Lazarus Group, которая заманивала разработчиков фиктивными вакансиями и тестовыми заданиями. Aikido говорит о техническом пересечении новых пакетов с этой кампанией, а не о самостоятельной атрибуции каждого эпизода.
В открытых сообщениях управляющего Slack-канала Aikido выделила 18 уникальных имён хостов. Среди них три Windows-машины, пять Linux-систем и десять компьютеров с macOS. Масштаб выглядит ограниченным, а выборочные условия запуска указывают скорее на точечную операцию. Ранее злоумышленники уже подменяли Terraform-модули через скомпрометированную инфраструктуру Coder.
Что делать, если вы использовали эти пакеты
Aikido советует считать скомпрометированной всю машину или CI/CD-исполнитель, где запускался любой из четырёх компонентов. Простого удаления пакета недостаточно. Компания рекомендует:
- изолировать систему;
- заменить связанные токены GitHub, GitLab и реестров пакетов;
- обновить облачные учётные данные и SSH-ключи;
- проверить историю действий;
- удалить вредоносные зависимости;
- переустановить систему.
Почему это важно
Эта история — не просто очередной инцидент. Она показывает, как атаки на цепочку поставок становятся всё более скрытными и целевыми. Разработчики привыкли доверять пакетам из официальных реестров, но даже Terraform Registry и Go Modules уже не гарантируют безопасности. Одна буква в имени пакета может стоить всей инфраструктуры. А два канала связи — Slack и блокчейн — делают обнаружение и блокировку управляющей инфраструктуры крайне сложной задачей.
Единственная защита — внимательность к деталям и готовность к быстрой ротации всех секретов при малейшем подозрении. И, возможно, стоит пересмотреть подход к тому, какие пакеты и от кого вы запускаете на своих машинах.
