Конец вседозволенности в выполнении кода
npm 12 наконец-то захлопывает дверь в «дикий запад» установки пакетов, завершая опасную эру, когда npm install одновременно служил для бесконтрольного и скрытого выполнения кода. В течение многих лет скрипты pre-install и post-install, наряду с их аналогами install, автоматически запускались для каждой зависимости, превращая рутинную задачу в основной вектор для коварных атак на цепочку поставок. Такое поведение по умолчанию превращало простую загрузку пакета в игру с высокими ставками.
Модель неявного доверия лежала в основе всей экосистемы JavaScript, позволяя любому пакету выполнять произвольный код во время установки без явного согласия пользователя. Злоумышленники мастерски использовали это слабое место. Самораспространяющийся червь Shai-Hulud, например, скомпрометировал сотни пакетов для эксфильтрации учетных данных и автономного распространения, в то время как его вариант «Mini Shai-Hulud» от мая 2026 года нацелился на известные проекты, такие как TanStack, используя GitHub Actions.
Сообщество годами обсуждало эту критическую уязвимость, находясь между насущными потребностями в безопасности и огромной проблемой поддержания обратной совместимости в обширной, зависящей от скриптов экосистеме. Теперь npm 12 разрубает этот Гордиев узел. Он отключает автоматическое выполнение скриптов по умолчанию, принуждая к явному процессу одобрения через npm approve-scripts. Этот давно назревший переход от неявного доверия к явному разрешению наконец-то ставит безопасность на первое место, открывая более безопасное, хотя и немного менее удобное, будущее.
Ваш новый привратник: npm approve-scripts
npm install в версии 12 больше не выполняет слепо произвольный код из ваших зависимостей. Дни, когда скрипты pre-install, install и post-install запускались по умолчанию, окончательно прошли, положив конец критическому вектору для атак на цепочку поставок, таких как Shai-Hulud и недавние компрометации TanStack. Эта всеобъемлющая блокировка распространяется даже на необходимые нативные сборки node-gyp и скрипты prepare, полученные из Git, файловых или ссылочных зависимостей, эффективно нейтрализуя любое неожиданное выполнение кода до его начала.
Встречайте npm approve-scripts, вашего нового привратника. Эта команда вводит явный, поддающийся аудиту рабочий процесс, позволяющий разработчикам просматривать каждый скрипт и выборочно включать только те, которым они действительно доверяют. После одобрения npm сохраняет эти разрешения непосредственно в вашем файле package.json, создавая прозрачную, версионируемую запись разрешенного кода, который выполняется во время установки. Это заменяет предыдущую опасную автоматизацию обдуманным, информированным согласием.
Это не просто новая команда; это глубокий философский сдвиг для всей экосистемы JavaScript. npm решительно переходит от модели неявного доверия – где любая зависимость могла запускать что угодно – к модели явного разрешения. Разработчики вновь получают абсолютный, детальный контроль над тем, какой именно код выполняется на их машинах, превращая npm install из потенциальной угрозы в преднамеренную, безопасную операцию. Скриптопокалипсис заканчивается не тихим стоном, а твердым, поддающимся аудиту «Нет».
Блокировка дополнительных векторов атаки
В то время как скрипты pre-install и post-install были наиболее заметными векторами для атак на цепочку поставок, проницательные противники никогда не клали все яйца в одну корзину. Они также использовали менее очевидные пути, такие как прямые Git dependencies и удаленные URL-тарболы, чтобы внедрять вредоносный код в ничего не подозревающие проекты. Злоумышленники широко использовали эти методы в инцидентах, таких как вариант Mini Shai-Hulud, который нацеливался на пакеты в пространстве имен TanStack, часто внедряя вредоносные файлы .npmrc через эти косвенные маршруты.
npm 12 захлопывает эти второстепенные двери простым, явным требованием. Разработчики теперь должны использовать --allow-git для разрешения зависимостей на основе Git и --allow-remote при установке пакетов из тарболов на основе URL. Это не просто неудобство; это критическая точка трения, призванная заставить принимать осознанные решения, устраняя неявное доверие к внешним источникам и значительно сужая поверхность атаки.
Никто не сможет сослаться на незнание, когда npm 12 выйдет в июле; предупреждения об этих breaking changes активны с npm v11.16.0+. Этот льготный период предоставляет командам широкие возможности для аудита своих конвейеров сборки и обновления объявлений зависимостей, избегая внезапных сбоев. Для получения более подробной информации о предстоящих изменениях ознакомьтесь с Upcoming breaking changes for npm v12 - GitHub Changelog.
Нравится статья? Получайте такие каждое утро на почту.
одно письмо в день · отписка в два клика · без сторонних трекеров
Необходимый шаг, но достаточно ли его?
Наконец, npm признает реальность. Бесконтрольное выполнение скриптов, основной вектор атак на цепочку поставок, заканчивается с npm 12 после многих лет повсеместной эксплуатации. Этот давно назревший переход к явному одобрению скриптов, наконец-то догоняющий более заботящиеся о безопасности альтернативы, превращает npm install из наивного упражнения на доверие в охраняемую операцию. Это необходимая эволюция, хотя она и наступит в июле 2026 года, спустя годы после того, как прозвучали первые тревожные сигналы.
Даже с этими долгожданными изменениями битва за целостность цепочки поставок продолжается. Многие эксперты по безопасности, включая меня, просто выступают за pnpm, который может похвастаться превосходными настройками по умолчанию, такими как блокировка экзотических подзависимостей и задержка принятия новых пакетов. Проактивная позиция pnpm, которая давно отстаивает более ограничительную, безопасную позицию из коробки, предлагает убедительную альтернативу для проектов, требующих немедленной, надежной защиты.
Эти обновления значительно сужают поверхность атаки, сокращая векторы скриптов pre-install и post-install, которые подпитывали инциденты, такие как Shai-Hulud и компрометация TanStack. Явная блокировка Git dependencies и удаленных тарболов дополнительно закрывает хорошо известные пути атаки. Однако злоумышленники неустанно адаптируются. Ожидайте перехода к другим уязвимостям, возможно, к эксплуатации вредоносных файлов .npmrc, неправильных конфигураций CI/CD или сложной социальной инженерии. Бдительность разработчиков, тщательная проверка каждой зависимости и процесса сборки, остается конечным, незаменимым брандмауэром в этом развивающемся ландшафте угроз.
Часто задаваемые вопросы
Каково самое большое изменение в NPM 12?
Самое значительное изменение заключается в том, что npm install больше не будет автоматически запускать скрипты pre-install, install или post-install для зависимостей. Теперь пользователи должны явно одобрять их.
Как запускать скрипты для доверенных зависимостей в NPM 12?
Вам нужно использовать новую команду npm approve-scripts. Она предложит вам одобрить скрипты из ваших зависимостей, и ваш выбор будет сохранен в вашем package.json.
Почему NPM вносит эти изменения в безопасность сейчас?
Эти изменения являются прямым ответом на волну изощренных атак на цепочки поставок, таких как червь Shai-Hulud, которые использовали автоматическое выполнение скриптов для кражи учетных данных и распространения вредоносного ПО.
Другие менеджеры пакетов, такие как PNPM или Yarn, уже настолько безопасны?
Да, другие менеджеры пакетов, такие как PNPM и Yarn, уже некоторое время реализуют аналогичное поведение по умолчанию в области безопасности, например, блокировку автоматических скриптов установки.

