Stealer Backdoor в node-ipc — npm-зависимости снова стали угрозой для разработчиков

14 мая 2026 года исследователи Socket и StepSecurity сообщили о новых вредоносных версиях популярного npm-пакета node-ipc. Проблема опасна не только для тех, кто использует пакет напрямую: зависимость могла попасть в проект транзитивно, а вредоносный код был нацелен на SSH-ключи, облачные токены, CI/CD-секреты и локальные конфиги разработчика.

Stealer Backdoor в node-ipc
Stealer Backdoor в node-ipc

Значимость этого события в текущий момент

node-ipc — это JavaScript-библиотека для межпроцессного взаимодействия в Node.js-приложениях. Такие пакеты редко оказываются в центре внимания обычного разработчика: они могут находиться глубоко внутри дерева зависимостей и устанавливаться автоматически вместе с другими библиотеками.

14 мая 2026 года Socket сообщил о вредоносной активности в трёх свежих версиях node-ipc:

  • node-ipc@9.1.6
  • node-ipc@9.2.3
  • node-ipc@12.0.1

Позже технический разбор опубликовала StepSecurity. По данным исследователей, в эти версии был добавлен обфусцированный stealer/backdoor — то есть скрытый код, который пытался собрать и передать злоумышленникам чувствительные данные из окружения разработчика или CI/CD-сервера.

Главная опасность в том, что атака была направлена не на конечных пользователей сайта, а на саму инфраструктуру разработки. Если злоумышленник получает .env, SSH-ключи, облачные токены, npm-токены или секреты CI/CD, он может двигаться дальше: публиковать вредоносные версии других пакетов, заходить в облачные аккаунты, читать приватные репозитории или подменять сборки.

Что именно произошло

По данным Socket и StepSecurity, вредоносные версии были опубликованы в npm 14 мая 2026 года. Они затронули сразу несколько веток версий, что увеличивало шанс автоматического попадания в проекты с широкими semver-диапазонами.

Особенно опасным был сценарий, когда проект не фиксирует точную версию пакета, а использует диапазоны вроде ^12.0.0, ~12.0.0, ^9 или похожие правила. В таком случае при обновлении lock-файла, новой установке зависимостей или сборке в CI проект мог подтянуть заражённую версию.

StepSecurity отдельно отмечает, что node-ipc@12.0.1 оказался привязан к npm-тегу latest. Это означает, что установка без жёсткой фиксации версии могла привести к загрузке именно скомпрометированного релиза.

Чем этот backdoor отличался от обычного вредоносного npm-пакета

Многие атаки на npm используют install-скрипты: preinstall, install или postinstall. Такие скрипты запускаются прямо во время установки пакета, поэтому их часто проверяют защитные инструменты.

В случае node-ipc подход был менее очевидным. По данным StepSecurity, вредоносный код не запускался через install-hook. Он был добавлен в CommonJS-файл node-ipc.cjs как IIFE — самовызывающаяся функция. Проще говоря, код срабатывал в момент, когда приложение выполняло:

require('node-ipc')

Это важная деталь. Пакет мог установиться без заметного поведения, а вредоносная активность начиналась позже — при запуске приложения, тестов, скриптов или CI-задачи, где этот модуль реально загружался.

Какие данные пытались украсть

Исследователи описывают поведение как credential stealer: код искал и собирал секреты, которые обычно лежат на машине разработчика или внутри CI/CD-окружения.

В зону риска попадали:

Тип данныхПочему это опасно
SSH-ключиМогут дать доступ к серверам и приватным репозиториям
.env-файлыЧасто содержат API-ключи, пароли БД, токены сервисов
AWS, Azure, GCP credentialsПозволяют получить доступ к облачной инфраструктуре
Kubernetes-конфигиМогут открыть путь к кластерам и production-сервисам
GitHub CLI config и токеныРиск доступа к репозиториям, Actions и пакетам
Terraform stateМожет раскрывать структуру инфраструктуры и секретные значения
CI/CD-секретыПозволяют атаковать цепочку сборки и деплоя
Конфиги AI-инструментовНовая цель атак, потому что AI-агенты всё чаще получают доступ к коду и токенам

SafeDep в своём техническом разборе указывает, что payload был размером около 80 КБ и пытался собирать большое количество категорий чувствительных файлов. Передача данных, по данным исследователей, могла выполняться через DNS-туннелирование и внешний C2-домен, замаскированный под легитимную Azure-инфраструктуру.

Почему npm-зависимости снова стали слабым местом

Этот инцидент показывает старую проблему в новой форме: современная разработка строится на огромной цепочке чужого кода.

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

Особенно уязвимы проекты, где:

  • зависимости обновляются автоматически;
  • lock-файлы не контролируются строго;
  • CI/CD-сборки имеют доступ к production-секретам;
  • npm-токены обладают лишними правами;
  • разработчики запускают npm install на рабочих машинах с SSH-ключами, облачными профилями и .env-файлами;
  • безопасность проверяет только install-скрипты, но не анализирует содержимое опубликованного пакета.

История node-ipc делает инцидент особенно заметным

node-ipc уже попадал в крупный supply chain-скандал. В 2022 году пакет обсуждался из-за так называемого protestware: тогда вредоносная логика была связана с геополитическим контекстом и затрагивала пользователей из России и Беларуси.

Новый инцидент отличается по мотивации и механике. По оценке StepSecurity, атака 2026 года выглядит как отдельная операция, направленная на кражу учётных данных, а не как повторение прежней protestware-истории. Это принципиально другой риск: если в 2022 году главным сценарием было повреждение файлов, то сейчас речь идёт о компрометации секретов, инфраструктуры и цепочек публикации.

Как проверить, затронут ли проект

Первое, что нужно сделать, — проверить дерево зависимостей.

npm ls node-ipc

Для поиска конкретных вредоносных версий можно использовать:

npm ls node-ipc --all 2>/dev/null | grep -E '9\.1\.6|9\.2\.3|12\.0\.1'

Также стоит проверить lock-файлы:

grep -E 'node-ipc.*(9\.1\.6|9\.2\.3|12\.0\.1)' package-lock.json
grep -E 'node-ipc@(9\.1\.6|9\.2\.3|12\.0\.1)' yarn.lock
grep -E 'node-ipc.*9\.1\.6|9\.2\.3|12\.0\.1' pnpm-lock.yaml

Если одна из версий найдена, проект нужно считать потенциально скомпрометированным. Важный момент: отсутствие явного node-ipc в package.json ещё не означает безопасность. Пакет мог попасть транзитивно через другую зависимость.

Что делать, если заражённая версия была установлена

Если в проекте или CI/CD-окружении обнаружены node-ipc@9.1.6, node-ipc@9.2.3 или node-ipc@12.0.1, не стоит ограничиваться простым обновлением пакета. Stealer нацелен именно на секреты, поэтому нужно исходить из худшего сценария: всё, что было доступно процессу, могло быть прочитано.

Минимальный план действий:

  1. Удалить заражённую версию и закрепить безопасную.
  2. Пересобрать lock-файл.
  3. Очистить node_modules и выполнить чистую установку.
  4. Проверить, запускался ли код с заражённым пакетом.
  5. Ротировать все секреты, которые были доступны окружению.
  6. Проверить облачные логи, GitHub Actions/GitLab CI, npm publish activity и историю деплоев.
  7. Проверить подозрящие сетевые обращения и временные директории.
  8. Перевыпустить SSH-ключи и deploy keys, если они могли находиться на машине.

Для ветки 9.x StepSecurity рекомендует откатиться на последнюю известную чистую версию 9.2.1, для 12.x — на 12.0.0.

npm install node-ipc@12.0.0

или, если проект зависит от 9.x:

npm install node-ipc@9.2.1

После этого важно заново зафиксировать зависимости в lock-файле и убедиться, что вредоносные версии больше не подтягиваются транзитивно.

Что поменять в процессе разработки

Главный вывод из истории с node-ipc: защита npm-проектов не должна сводиться к команде «обнови зависимости». Нужна дисциплина вокруг цепочки поставки кода.

Практические меры:

  • фиксировать версии через lock-файлы и не обновлять их автоматически без проверки;
  • использовать npm ci в CI/CD вместо непредсказуемого npm install;
  • ограничивать права токенов в CI/CD;
  • не хранить production-секреты на локальных машинах разработчиков;
  • разделять токены для чтения, публикации и деплоя;
  • включать 2FA для npm-аккаунтов;
  • проверять новые версии зависимостей перед обновлением;
  • использовать allowlist или cooldown-период для свежих npm-релизов;
  • регулярно строить SBOM и понимать, какие пакеты реально входят в проект;
  • мониторить сетевую активность CI/CD-раннеров.

Особенно важно пересмотреть подход к секретам. Если CI/CD-пайплайн устанавливает зависимости из публичного npm и одновременно имеет доступ к production-ключам, то любая скомпрометированная зависимость получает слишком большой радиус поражения.

Почему это касается даже небольших проектов

Может показаться, что такие атаки важны только для крупных компаний. На практике небольшие проекты часто более уязвимы: у них меньше автоматизированных проверок, слабее контроль зависимостей и больше секретов хранится прямо на рабочей машине.

Для одиночного разработчика компрометация npm-зависимости может означать потерю:

  • доступа к VPS;
  • токена GitHub;
  • ключей к платёжному сервису;
  • Telegram Bot API-токена;
  • данных из .env;
  • доступа к домену, CDN или облачному хранилищу.

То есть даже маленький pet-проект может стать входной точкой для более серьёзной атаки.

Что пока неизвестно

На момент публикации исследователи продолжают анализ. До конца может быть не ясно:

  • сколько проектов успели установить заражённые версии;
  • какие реальные данные были успешно выведены;
  • был ли аккаунт мейнтейнера скомпрометирован или использован иным способом;
  • появились ли производные атаки через украденные токены;
  • затронуты ли другие пакеты, связанные с тем же аккаунтом публикации.

Поэтому правильная реакция — не ждать окончательного отчёта, а быстро проверить свои проекты и инфраструктуру.

Итог

Инцидент с node-ipc — это не просто ещё одна вредоносная версия в npm. Он показывает, что атаки на open source всё чаще нацелены не на приложение, а на разработчика, CI/CD и секреты, которые позволяют управлять инфраструктурой.

Если проект использует Node.js, стоит прямо сейчас проверить lock-файлы, дерево зависимостей и историю CI-запусков за 14–15 мая 2026 года. Даже если node-ipc не используется напрямую, он мог попасть транзитивно. А если заражённая версия действительно запускалась, обновления пакета недостаточно: нужно ротировать секреты и считать среду потенциально скомпрометированной.

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

Вам также может понравиться