В npm-экосистеме распространяется червь, похищающий учетные данные разработчиков

Атака на цепочку поставок NPM

В npm-реестре обнаружен самораспространяющийся вредоносный код, который начинал атаку с пакетов keyv и cachable, а затем расширился на более чем 440 пакетов, опубликовав свыше двух тысяч зараженных версий. Сильнее всего пострадала экосистема ServiceTitan - затронуто около ста пакетов этой платформы. Вредоносная программа относится к семейству "Mini Shai-Hulud" и прослеживается до червя, код которого ранее был опубликован группой TeamPCP.

Описание

По данным анализа, вредоносная программа нацелена не только на реестр npm, но и на всю цепочку доверия вокруг разработчика или сборочного сервера. Она проникает на рабочие станции и в системы непрерывной интеграции, где собирает широкий спектр учетных данных: токены для GitHub и npm, доступы к облачным платформам AWS, Azure, Google Cloud, а также к системам управления секретами вроде Vault, контейнерным платформам Kubernetes и Docker, инструментам Terraform и к Slack. Похищенное не просто скапливается на сервере злоумышленников, а немедленно используется для расширения атаки.

Механизм заражения срабатывает еще на этапе установки пакета, до того как приложение начнет выполнять код. Специальный скрипт загружает и запускает основной вредоносный файл, используя нестандартную среду выполнения. Это делается намеренно, чтобы затруднить обнаружение: многие защитные решения настроены на поиск аномалий в привычных для Node.js процессах и пропускают подозрительную активность, скрытую внутри массивного запутанного кода.

Сам вредоносный файл имеет внушительный размер и сильно обфусцирован. Разбор показывает десятки тысяч закодированных строк, разбитых на части. После восстановления становится видно, что программа активно ищет файлы конфигураций, ключи SSH, данные для облачных сервисов и локальные секреты. Она также считывает переменные окружения и анализирует содержимое процессов, извлекая токены, которые никогда не попадают в исходные файлы, но присутствуют в памяти или временных данных на общих сборочных серверах.

Особую опасность представляет способность червя использовать найденные учетные данные для немедленного проникновения в смежные системы. Скомпрометированный токен GitHub превращается во вредоносный автоматизированный процесс, токен npm - в отравленное обновление пакета, облачный ключ открывает доступ к секретам приложений, а токен Kubernetes дает доступ к внутренним ресурсам кластера. Таким образом, одна украденная учетная запись становится трамплином для следующей атаки. Это отличает данный червь от обычных похитителей данных, которые чаще всего продают украденное или используют его точечно.

Собранные данные передаются на управляющий сервер, адрес которого может меняться. В качестве запасного канала червь использует публичные репозитории GitHub, куда загружает файлы с закодированными данными о жертвах. На данный момент обнаружено более 160 таких хранилищ. Использование GitHub дает злоумышленникам надежную инфраструктуру, обычный с виду сетевой трафик и возможность долгое время оставаться незамеченными.

Вредоносный код также умеет выполнять произвольные команды, которые приходят с управляющего сервера. Это превращает зараженную машину в удаленно управляемый инструмент: оператор может запускать на ней любые действия с правами процесса установки. Такая возможность позволяет не только продолжать сбор данных, но и использовать инфицированные системы для новых атак.

Распространение червя не ограничивается публикацией отравленных пакетов. Он умеет менять содержимое репозиториев, добавляя вредоносные файлы в папки настроек, в том числе для сред разработки и инструментов на базе искусственного интеллекта, и внедрять фальшивые сценарии в автоматизированные процессы GitHub. Это особенно опасно для проектов, где разработчики доверяют автоматически выполняемым задачам, не проверяя их содержимое.

По предварительным данным, атака началась с компрометации аккаунта одного из сопровождающих пакетов keyv и cachable на npm. Пострадавший до сих пор не может восстановить доступ к своей учетной записи и получить ответ от служб поддержки GitHub и npm. Он публично описывает происходящее в социальных сетях, чтобы привлечь внимание к проблеме.

Специалистам, подозревающим заражение, рекомендуется немедленно изолировать затронутые машины и сборочные серверы, сохраняя логи для последующего разбирательства. Все учетные данные, которые могли быть доступны процессу установки, следует ротировать с чистого устройства, а временные сборочные серверы - пересоздать из доверенных образов. Также необходимо проверить GitHub-репозитории на наличие новых публичных хранилищ с подозрительными файлами, неожиданных коммитов в большом количестве веток и изменений в автоматизированных процессах. В npm стоит пересмотреть все пакеты, связанные с пострадавшими учетными записями, обращая внимание на неожиданные версии и дополнительные зависимости.

Этот инцидент показывает, что атаки через менеджеры пакетов превратились в сложные операции, направленные не на отдельный репозиторий, а на инфраструктуру разработки в целом. Компрометация одного аккаунта может привести к цепочке проникновений в десятки проектов и систем, поэтому безопасность современной разработки зависит от комплексной защиты не только кода, но и всех связанных с ним инструментов и сервисов.

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

URL

  • http://169.254.169.254/latest/api/token
  • http://169.254.169.254/latest/meta-data/iam/security-credentials/
  • http://169.254.170.2
  • https://npm-cache.com/router

SHA256

  • 9fc2570b7cef51c1b8df116d144d11ff4096357be7d2c4c6367cfc2509cf1bcc
  • fd3ca4007b225fdf8de7af4345a19179d5efa8c4bb9205f88cda806e5684b1eb

Комментарии: 0