flawopen.com/Incidents/tensorlake-npm-install-hook-compromise-october-2026
Tensorlake npm 0.5.144: вредоносный install-hook
Вредоносная версия ИИ-SDK Tensorlake добавила загрузчик preinstall. Команда подтвердила прямые изменения в main и усилила публикацию; GitHub рекомендует считать скомпрометированными хосты, где код запускался. Исследователи связывают структуру загрузчика с семейством ChainDrop/Shai-Hulud; advisory GitHub эту атрибуцию не подтверждает.[1], [2], [3], [4], [5]
Установка этого пакета была похожа на подключение устройства, которое сразу начинает работать: нажимать кнопку или пользоваться им не требовалось. npm запустил вредоносный preinstall-hook с правами устанавливающего процесса ещё до импорта SDK.[3], [6], [1]
Ключевые понятия и термины
preinstall-hook- Скрипт, который npm может выполнить во время установки. В опубликованном manifest Tensorlake 0.5.144 этот hook запускал загрузчик; импорт SDK не требовался.[1], [6]
аттестация происхождения- Сведения о том, где и как собран артефакт. Команда сообщила, что у вредоносной публикации была npm-provenance; это не доказывает безопасность исходного кода.[2], [3]
контроль install-скриптов- Проверка CI, завершающаяся ошибкой, если опубликованный manifest объявляет install-скрипты. После инцидента Tensorlake добавила её вместе с npm ci --ignore-scripts.[3]
Связи со стандартами
- Ссылка CWE для слабого места, описанного в этом руководстве: CWE-506
Хронология инцидента
Пошаговый сценарий атаки
Учётные данные и сохранение доступа хоста оказались под угрозой
Согласно malware-advisory GitHub, затронутый хост следует считать полностью скомпрометированным. StepSecurity и Socket сообщают о краже учётных данных и persistence, включая monitor, который мог реагировать на отзыв токена. Эти детали нужно приписывать исследователям; не утверждайте, что все возможности сработали на каждом хосте.[1], [4], [5]
Команда восстановила контроль публикаций
Команда отменила вредоносные commits, добавила npm ci --ignore-scripts и проверку manifest, усилила защиту репозитория и публикации, а пакет заменила версией 0.5.145. В GHSA нет исправленной версии, поскольку это malware advisory, а не обычный диапазон уязвимого кода.[3], [7]
Исходный код: Уязвимый vs Защищённый вариант
Это сравнение CI соответствует влитой PR #1016; в нём нет вредоносного пакета или exploit. Проверка выполняется до установки и отклоняет install-hooks в опубликованных manifest; ignore-scripts не позволяет npm ci запускать lifecycle-скрипты зависимостей. Команда сообщила, что её тесты и сборка SDK с этой настройкой прошли. Она может повлиять на пакеты, которым нужны hooks; явно вызванные команды, например npm test, всё равно запускают свои скрипты. Изолируйте последующие сборки и не считайте provenance проверкой исходного кода. Это частичный пример: помимо проверки объявленных install-hooks контроль сопровождающего также отклоняет неожиданные файлы в typescript/lib/.[3], [6]
steps:
- run: npm cisteps:
- run: node scripts/check-no-install-scripts.mjs
- run: npm ci --ignore-scriptsЧек-лист по защите системы для инженеров
- ✓Ищите tensorlake@0.5.144 в manifest, lock-файлах, кэшах и build-журналах. Advisory указывает именно эту версию npm; одно название пакета не доказывает заражение.[1]
- ✓Если установка выполнялась, изолируйте хост от сети и сохраните доказательства. Удаление зависимости не доказывает исчезновение persistence или других изменений; при сомнениях восстановите систему из доверенного образа.[1], [4], [5]
- ✓Оставьте хост изолированным и согласуйте с командой реагирования выявление и удаление persistence, которая, по сообщениям исследователей, могла сработать при отзыве токена, прежде чем отзывать или менять токены. Следуйте актуальным рекомендациям и выполняйте ответные действия с чистых систем.[4], [5]
- ✓После обработки описанной persistence командой реагирования с чистой системы отзовите и смените credentials, доступные процессу установки. Проверьте доступные репозитории и публикации пакетов, а также CI-артефакты и audit-журналы на несанкционированные изменения.[4], [5], [3]
- ✓В CI запускайте проверенный контроль install-скриптов до установки, используйте npm ci --ignore-scripts при совместимости, изолируйте нужные build-скрипты, запретите обходы admin/direct-push и требуйте независимое одобрение публикаций.[3], [6]
- ✓По состоянию на 2026-10-12 проверьте, установила ли ваша среда один из шести связанных пакетов версии
0.5.144: `tensorlake-native-*family:tensorlake-native-linux-x64-gnu,tensorlake-native-linux-x64-musl,tensorlake-native-linux-arm64-gnu,tensorlake-native-linux-arm64-musl,tensorlake-native-darwin-arm64,tensorlake-native-win32-x64. В этот день npm registry вернул метаданные версии для каждого пакета; считайте их всё ещё опубликованными и включите в инвентаризацию уязвимых установок. Это подтверждает только доступность в реестре, но не наличие вредоносной нагрузки инцидента в связанном пакете. В объединённом PR #1016 сопровождающий сообщил, что на тот момент эти версии ещё нужно было удалить.[3], [8], [9], [10], [11], [12], [13]
Источники
- GitHub Advisory Database — GHSA-rqxj-g25x-4v9v
- Tensorlake — issue об инциденте #1014
- Tensorlake — PR реагирования #1016
- StepSecurity — технический анализ
- Socket — технический анализ
- npm v10 — npm ci и ignore-scripts
- Tensorlake — чистый релиз 0.5.145
- npm registry — tensorlake-native-linux-x64-gnu@0.5.144
- npm registry — tensorlake-native-linux-x64-musl@0.5.144
- npm registry — tensorlake-native-linux-arm64-gnu@0.5.144
- npm registry — tensorlake-native-linux-arm64-musl@0.5.144
- npm registry — tensorlake-native-darwin-arm64@0.5.144
- npm registry — tensorlake-native-win32-x64@0.5.144