~/guides/npm-v12-import-time-blind-spot

JSON

npm v12 блокирует install-скрипты, но не спасает от AsyncAPI-style атак

Разница между install-time и import-time supply chain payload, и почему allowScripts не покрывает второй тип угрозы.

npm v12 стал самым значительным редизайном безопасности npm за всю историю проекта, блокируя install-скрипты по умолчанию. Но компрометация AsyncAPI 14 июля 2026 года показала конкретный класс атак, который этот механизм не покрывает вообще — потому что вредоносный код срабатывает не при установке, а при реальном использовании пакета в коде.

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

Install-time: код выполняется во время npm install, до старта приложения
Import-time: код выполняется при require()/import пакета в реальном коде

allowScripts контролирует именно install-time — блокирует или разрешает конкретные install/postinstall скрипты по версии пакета. Import-time payload не является install-скриптом формально, это обычный код модуля, который выполняется в момент, когда ваше приложение реально импортирует пакет — то есть тогда, когда пакет и так должен работать.

Почему это принципиально сложнее заблокировать

Критерий Install-time payload Import-time payload
Блокируется allowScripts Да Нет
Момент срабатывания При npm install При реальном использовании в коде
Видит переменные окружения Сборочной среды Работающего приложения, включая продакшн
Как обнаружить заранее Проверка scripts в package.json Требует анализа самого кода модуля

Практический вывод для команд

Блокировка install-скриптов через npm v12 остаётся полезной и важной мерой — она закрывает самый распространённый исторический вектор атак. Но она не заменяет базовую гигиену: точное версионное пиннингование зависимостей, мониторинг security-адвайзори для критичных пакетов, и осознание того, что доверие к пакету не заканчивается на этапе установки.

Как проверить конкретные известные инциденты обоих типов

npm 2026 Supply Chain Incident Checker сверяет зависимости с известными инцидентами независимо от того, install-time они или import-time.

Итоговый чеклист

allowScripts и блокировка install-скриптов в npm v12 не защищают от import-time payload — вредоносного кода, срабатывающего при реальном импорте пакета в приложении.

Import-time payload видит переменные окружения уже работающего приложения, что делает потенциальный ущерб от такой атаки шире, чем от install-time варианта.

Версионное пиннингование и мониторинг адвайзори остаются необходимой практикой поверх защиты, которую даёт npm v12.