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.