Компрометация Jscrambler раскрыла риск для секретов разработчиков

Вредоносные NPM-релизы Jscrambler могли украсть ключи, токены и облачные учетные данные установивших их систем.

2026-07-19 GIGATAP Team #security
#supply-chain-security#npm#credential-theft

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

Что изменилось в инциденте Jscrambler#

Как сообщает SecurityWeek, злоумышленник получил доступ к учетным данным для публикации в NPM и 11 июля отправил измененный пакет Jscrambler. В него добавили хук preinstall, который запускался во время установки и загружал дополнительные бинарные файлы на хост.

В отчете указаны вредоносные версии пакета Jscrambler: 8.16, 8.17, 8.18 и 8.20. Jscrambler сообщает, что версия 8.22 стала первой чистой версией. Также затронуты следующие интеграционные пакеты:

  • Jscrambler-webpack-plugin 8.6.2
  • gulp-Jscrambler 8.6.2
  • grunt-Jscrambler 8.5.2
  • Jscrambler-metro-plugin 9.0.2

По данным NPM, приведенным Jscrambler, до удаления и замены вредоносных релизов их скачали 1 479 раз.

Доступная информация не подтверждает, что каждая близкая по номеру версия была вредоносной. Не следует автоматически считать затронутыми все релизы между указанными версиями или полагать, что версия 8.22 очищает все связанные плагины. Проверьте каждую зависимость по актуальным рекомендациям Jscrambler.

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

Почему нужно менять учетные данные после такого инцидента#

Вредоносный код запускался во время установки и был ориентирован на данные, которые позволяют атакующему выйти далеко за пределы одной рабочей станции разработчика.

По данным отчета, хук preinstall запускал setup.js, который загружал платформенный бинарный файл из intro.js. Бинарники на Rust были рассчитаны на Linux, macOS и Windows. Сообщается о сборе учетных данных разработчиков и облачных сервисов, API-секретов, криптовалютных кошельков и seed-фраз, данных браузеров, системных хранилищ ключей, данных инструментов совместной работы, сессий Steam, а также конфигураций AI coding assistant и MCP server.

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

Главная проблема инцидентов в цепочке поставок заключается в том, что lockfile может сохранить конкретную версию, но не делает ее безопасной после компрометации аккаунта издателя. Повторная установка из старого lockfile может снова запустить тот же вредоносный lifecycle hook.

Что проверить#

Начните с систем, где могли быть установлены указанные версии: рабочие станции разработчиков, CI runners, контейнеры сборки, машины релизов и кэшированные окружения проектов. Прямого поиска зависимостей в проекте недостаточно, потому что пакет мог приходить через другие инструменты Jscrambler.

Условие Действие Причина
Установлен указанный релиз Jscrambler Удалите его и замените на подтвержденную безопасную версию Вредоносный код выполнялся при установке
На хосте были токены, облачные ключи или ключи публикации Отзовите и замените секреты Вредоносная программа целилась в учетные данные и могла обращаться к cloud и orchestration API
Пакет запускался в CI или системе сборки Проверьте логи, артефакты, образы и доступные секреты Среды сборки часто содержат широкие права доступа
Есть только старый lockfile или кэш Проверьте закрепленные версии перед установкой Воспроизводимая сборка может снова установить опасную зависимость

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

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

Для первичной проверки можно временно отключить выполнение package lifecycle scripts, но сначала протестируйте такой подход в своем процессе сборки. Некоторые легитимные пакеты зависят от install scripts. Цель — не навсегда отключить механизм, а не допустить повторный запуск известного вредоносного preinstall.

Чего нельзя утверждать без проверки#

Инцидент связан с компрометацией ключей публикации пакетов, а не с доказанным взломом всех продуктов Jscrambler или всех окружений клиентов. Указанные 1 479 скачиваний — это количество загрузок пакетов, а не подтвержденное число зараженных систем или пострадавших пользователей.

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

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

Компрометация цепочки поставок меняет привычные границы доверия#

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

Для безопасности это означает необходимость снижать потенциальный ущерб. Проверка зависимостей, разделение секретов, короткоживущие CI-учетные данные и контролируемые среды сборки не предотвращают каждую вредоносную публикацию, но ограничивают последствия одной скомпрометированной установки.

FAQ#

Какие версии Jscrambler признаны вредоносными?#

SecurityWeek указывает версии пакета Jscrambler 8.16, 8.17, 8.18 и 8.20, а также конкретные затронутые релизы webpack, gulp, grunt и Metro-плагинов. Jscrambler назвал версию 8.22 первой чистой версией основного пакета.

Достаточно ли просто обновить пакет?#

Нет. Обновление удаляет известную вредоносную зависимость, но не удаляет код, который уже выполнился во время установки, и не делает украденные секреты безопасными. Затронутые системы нужно проверить, а доступные им токены, ключи и API-данные заменить.

Нужно ли проверять CI-системы, если разработчики не устанавливали пакет вручную?#

Да. CI runner или образ сборки могут устанавливать NPM-зависимости и иметь доступ к ключам развертывания, облачным ресурсам, репозиториям или подписи кода. Проверьте, попадали ли затронутые версии в сборки и какие секреты были доступны в этот момент.