Исследователи безопасности обнаружили новую масштабную атаку на экосистему npm, получившую обозначение CanisterSprawl. Этот инцидент является прямым продолжением кампании CanisterWorm, о которой сообщалось в прошлом месяце. Злоумышленники, связанные с группировкой TeamPCP, скомпрометировали учётные записи легитимных издателей пакетов и используют те же продвинутые техники для кражи данных разработчиков и самораспространения.
Описание
Атака затронула пакеты компании Namastex Labs, известной под брендом Automagik и специализирующейся на инструментах искусственного интеллекта. Скомпрометированными оказались CLI-пакет "@automagik/genie" (версии с 4.260421.33 по 4.260421.39) и встроенный сервер PostgreSQL для разработки "pgserve" (версии 1.1.11-1.1.13). Примечательно, что у "pgserve" версии 1.1.12 и 1.1.13 были опубликованы без соответствующих Git-тегов в репозитории, где публичные теги заканчиваются на v1.1.10, что является явной аномалией в процедуре релиза.
Дополнительное исследование индикаторов компрометации выявило и более ранние жертвы атаки. В их числе пакеты "@fairwords/websocket", "@fairwords/loopback-connector-es", а также компоненты дизайн-системы "@openwebconcept". Все эти вредоносные версии объединяет общий встроенный открытый RSA-ключ, что указывает на единый центр происхождения кода и общую инфраструктуру сборки, используемую злоумышленниками.
Механизм заражения копирует подходы предыдущей атаки, но использует иную инфраструктуру. В частности, обнаружена новая канистра (смарт-контракт) в блокчейне Internet Computer Protocol с идентификатором "cjn37-uyaaa-aaaac-qgnva-cai", хотя злоумышленники по-прежнему комбинируют её с классическими вебхуками на внешние серверы.
Четыре функции вредоносной нагрузки
Вредоносный код, внедряемый в пакеты, выполняет на этапе установки четыре основные задачи. Прежде всего, происходит массовый сбор секретов из окружения жертвы. Злоумышленников интересуют переменные окружения, связанные с типичными наименованиями токенов, учётных данных облачных провайдеров, CI/CD-систем и платформ LLM. Кроме того, из локальной файловой системы извлекаются конфигурационные файлы ".npmrc", ".git-credentials", ключи SSH, данные аутентификации для AWS, Azure, GCP, Kubernetes и Docker, а также файлы Terraform, Vault, пароли к базам данных и всё содержимое локальных ".env"-файлов.
Вторая функция - кража данных браузеров и криптокошельков. Нагрузка пытается получить доступ к хранилищу учётных данных браузера Chrome, включая настройки криптовалютных расширений MetaMask и Phantom. Сканируются также локальные файлы кошельков Solana, Ethereum, Bitcoin, Exodus и Atomic Wallet.
Собранные данные эксфильтруются двумя путями: через HTTPS-вебхук на подставной домен "telemetry.api-monitor.com" и через канистру ICP по протоколу Internet Computer. Если в пакете присутствует встроенный открытый RSA-ключ, похищенная информация перед отправкой шифруется по гибридной схеме с использованием алгоритмов AES-256-CBC и RSA-OAEP-SHA256. Без ключа данные упаковываются в открытом виде.
Четвёртая и наиболее опасная особенность - самораспространение. Нагрузка содержит код, извлекающий npm-токены с компьютера жертвы, определяющий пакеты, к которым у разработчика есть доступ на публикацию. После скачивания архивов этих пакетов в них внедряется вредоносный хук "postinstall", после чего заражённые версии перепубликуются. Но атака не ограничивается npm: в коде найдена логика для экосистемы PyPI - генерация Python-пейлоада на основе ".pth"-файла, запускающегося при старте интерпретатора Python. При обнаружении учётных данных заражённый пакет загружается в реестр PyPI через инструмент Twine.
Почему атака оказалась возможной
Несколько признаков указывают на то, что злоумышленники не создавали вредоносные пакеты с нуля, а взломали учётные записи легитимных мейнтейнеров. Затронутые пакеты принадлежат реальному публичному проекту компании Namastex Labs, которая имеет активные репозитории на GitHub, ведёт открытую разработку и позиционирует свои решения на рынке ИИ-инструментов. У пакета "@automagik/genie", несмотря на относительную новизну, отмечено около 6 744 еженедельных загрузок, а у "pgserve" - примерно 1 300. Такие объёмы скачиваний делают атаку особенно опасной для конечных потребителей - разработчиков, использующих эти компоненты для кодинга, оркестрации ИИ-агентов или в качестве встроенной базы данных.
Объём утечки чувствительных данных из заражённых сред разработчиков пока неизвестен. Но тот факт, что канистра ICP, использованная в пакетах, связанных с Namastex, отличается от фигурировавшей в истории CanisterWorm, свидетельствует об операционной гибкости злоумышленников. Расследование продолжается: вредоносные версии продолжают появляться в реестре npm, и точные масштабы компрометации релизных путей пока не установлены. Идентичность техник, происхождение кода и видимый почерк операторов оставляют мало сомнений в том, что атаки совершает одна группа - TeamPCP. А использование общего RSA-ключа в двух разных волнах заражений лишь подтверждает централизованное управление этой кампанией.
Индикаторы компрометации
Domains
- telemetry.api-monitor.com
URLs
- https://telemetry.api-monitor.com/v1/drop
- https://telemetry.api-monitor.com/v1/telemetry
SHA256
- 834b6e5db5710b9308d0598978a0148a9dc832361f1fa0b7ad4343dcceba2812
- 87259b0d1d017ad8b8daa7c177c2d9f0940e457f8dd1ab3abab3681e433ca88e
- c19c4574d09e60636425f9555d3b63e8cb5c9d63ceb1c982c35e5a310c97a839
Package Versions
- @automagik/genie@4.260421.33
- @automagik/genie@4.260421.34
- @automagik/genie@4.260421.35
- @automagik/genie@4.260421.36
- @automagik/genie@4.260421.37
- @automagik/genie@4.260421.38
- @automagik/genie@4.260421.39
- pgserve@1.1.11
- pgserve@1.1.12
- pgserve@1.1.13
- @fairwords/websocket@1.0.38
- @fairwords/websocket@1.0.39
- @fairwords/loopback-connector-es@1.4.3
- @fairwords/loopback-connector-es@1.4.4
- @openwebconcept/design-tokens@1.0.3
- @openwebconcept/theme-owc@1.0.3