FlawOpen

flawopen.com/Incidents/tensorlake-npm-install-hook-compromise-october-2026

● Tensorlake · CWE-506 · October 8, 2026 · Критический
Исследования · FlawOpen

Tensorlake npm 0.5.144: вредоносный install-hook

Вредоносная версия ИИ-SDK Tensorlake добавила загрузчик preinstall. Команда подтвердила прямые изменения в main и усилила публикацию; GitHub рекомендует считать скомпрометированными хосты, где код запускался. Исследователи связывают структуру загрузчика с семейством ChainDrop/Shai-Hulud; advisory GitHub эту атрибуцию не подтверждает.[1], [2], [3], [4], [5]

💡 Простыми словами (ELI5)

Установка этого пакета была похожа на подключение устройства, которое сразу начинает работать: нажимать кнопку или пользоваться им не требовалось. 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]
Атрибуция семейства кампании
StepSecurity и Socket связывают структуру загрузчика с ChainDrop/Shai-Hulud. В malware-advisory GitHub семейство не указано; эту атрибуцию делают исследователи.[4], [5], [1]

Связи со стандартами

  • Ссылка CWE для слабого места, описанного в этом руководстве: CWE-506

Хронология инцидента

7 октября 2026

В отчёте команды сказано, что commits отправили напрямую в main из учётной записи администратора репозитория.[2], [3]

8 октября 2026

Release workflow опубликовал вредоносный tensorlake@0.5.144; команда сообщила, что npm позднее удалил его.[1], [2]

8 октября 2026

Команда влила PR #1016, восстановила последний чистый commit, добавила контроль install-скриптов и выпустила чистую версию 0.5.145.[3], [7]

Пошаговый сценарий атаки

Шаг 1

Доверие к репозиторию обошли

В PR об инциденте сообщается о прямых commits в main из admin-учётной записи, минуя обычную проверку pull request. Затем публикацию вручную запустили из этого репозитория.[2], [3]

Шаг 2

Пакет запускал код при установке

Исследователи обнаружили preinstall-hook, запускавший загрузчик в tensorlake@0.5.144. Код наследовал права процесса установки; импорт SDK заранее не требовался.[1], [4], [5], [6]

Шаг 3

Учётные данные и сохранение доступа хоста оказались под угрозой

Согласно malware-advisory GitHub, затронутый хост следует считать полностью скомпрометированным. StepSecurity и Socket сообщают о краже учётных данных и persistence, включая monitor, который мог реагировать на отзыв токена. Эти детали нужно приписывать исследователям; не утверждайте, что все возможности сработали на каждом хосте.[1], [4], [5]

Шаг 4

Команда восстановила контроль публикаций

Команда отменила вредоносные 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 ci
БЕЗОПАСНЫЙ ИСПРАВЛЕННЫЙ ВАРИАНТ
steps:
  - run: node scripts/check-no-install-scripts.mjs
  - run: npm ci --ignore-scripts

Чек-лист по защите системы для инженеров

Источники