Cyber News

npm 12 отключает install-скрипты по умолчанию: конец эпохи автозапуска в цепочке поставок

M
Markabus
·26 июля 2026 г.
Фотореалистичный ночной кадр рабочего места разработчика: на мониторе — терминал, где поток зелёных строк установки пакетов обрывается блоком янтарных и красных строк и курсором; на переднем плане в расфокусе клавиатура, кабели и USB-хаб с индикаторами — иллюстрация к новости о том, что npm 12 больше не запускает install-скрипты автоматически

GitHub меняет одно из самых старых и опасных умолчаний в мире JavaScript. В новой мажорной версии пакетного менеджера — npm 12 — команда npm install перестаёт автоматически запускать скрипты установки из зависимостей, а заодно по умолчанию блокирует установку пакетов напрямую из Git-репозиториев и по произвольным URL. Об изменениях предупредили ещё в июньском changelog, а официально о выходе версии объявили 8 июля 2026 года; выкатывание в тег latest идёт в течение месяца. Для экосистемы, которую весь прошлый год сотрясали атаки на цепочку поставок (supply chain — цепочка поставок программного обеспечения), это, пожалуй, самое значимое изменение поведения npm за годы.

Что именно меняется

npm 12 переводит установку пакетов с модели «неявного доверия» на модель «явного доверия»: то, что раньше выполнялось само собой, теперь требует прямого разрешения. Ключевых изменений по умолчанию три.

1. Install-скрипты больше не запускаются автоматически

Раньше при обычном npm install любой пакет в дереве зависимостей мог выполнить свои скрипты жизненного цикла (lifecycle scripts) — preinstall, install и postinstall — прямо на машине разработчика или на сервере сборки. Именно этот механизм годами оставался главным вектором заражения: достаточно было протащить вредоносный код в популярный пакет, и он исполнялся автоматически у всех, кто его ставил.

В npm 12 такие скрипты по умолчанию не выполняются. Чтобы разрешить их для конкретных доверенных пакетов, появились новые команды: npm approve-scripts --allow-scripts-pending покажет список всех зависимостей, которые хотят что-то выполнить при установке, npm approve-scripts вносит выбранные пакеты в белый список (allowlist), а npm deny-scripts — явно запрещает остальные.

2. Git-зависимости — только с флагом --allow-git

npm 12 больше не разрешает зависимости, указывающие на Git-репозитории (ни прямые, ни транзитивные — то есть подтянутые в глубине дерева), пока это не разрешено флагом --allow-git. Причина в тонкой, но опасной лазейке: файл .npmrc внутри Git-зависимости мог подменить путь к исполняемому файлу Git и запустить произвольную команду — даже тогда, когда разработчик считал себя защищённым старым флагом --ignore-scripts.

3. Загрузка по прямым URL — только с флагом --allow-remote

Аналогично блокируются зависимости, скачиваемые с произвольных адресов — например, из HTTPS-архивов (tarball). Теперь для них нужен явный --allow-remote. Это закрывает ещё один способ протащить в сборку код в обход официального реестра.

Почему npm пошла на слом обратной совместимости

Смена умолчаний ломает совместимость — а на такой шаг мейнтейнеры идут только под давлением реальной угрозы. И 2025 год эту угрозу продемонстрировал наглядно.

В сентябре 2025-го через фишинг учётной записи мейнтейнера были захвачены сразу около двух десятков сверхпопулярных пакетов, включая debug и chalk. Совокупно на скомпрометированные библиотеки приходилось порядка 2,6 млрд загрузок в неделю — то есть под удар попала значительная часть всей экосистемы Node.js разом. Чуть позже прокатилась волна самораспространяющегося червя Shai-Hulud, который использовал заражённые пакеты, чтобы красть токены и публиковать новые вредоносные версии от имени жертв. По оценкам исследователей, за один только 2025 год в npm были опубликованы сотни тысяч вредоносных пакетов.

Общая проблема во всех этих историях одна: средний проект тянет за собой десятки транзитивных зависимостей, и любая из них при установке могла молча выполнить код. Отключение автозапуска скриптов бьёт ровно по этому механизму — даже если вредоносный пакет попал в дерево, без явного разрешения он ничего не запустит.

Что это значит для разработчиков и владельцев сайтов

Хорошая новость: для безопасности это большой шаг вперёд. Плохая: часть привычных сборок сломается, и к этому нужно готовиться заранее.

На install-скрипты опираются вполне легитимные пакеты — прежде всего те, что компилируют нативные модули или подтягивают бинарники на этапе установки: node-gyp, sharp, esbuild, puppeteer, prisma и им подобные. После обновления до npm 12 такие зависимости без явного разрешения могут не собраться или не доустановиться. Особенно чувствительны к этому конвейеры сборки (CI/CD): «чистая» установка на сервере, где раньше всё работало само, теперь может упасть, если нужные пакеты не внесены в белый список и не закоммичены в репозиторий.

Практический вывод простой: не стоит ждать, пока обновление прилетит само. Разумнее заранее пройтись по своим проектам, определить, каким пакетам действительно нужен запуск скриптов, и зафиксировать этот список в системе контроля версий — чтобы и локальная разработка, и сборка на сервере вели себя предсказуемо.

Как подготовиться уже сейчас

Готовиться можно, не дожидаясь мажорного релиза. Обновитесь до npm 11.16.0 или новее — эта ветка ещё сохраняет старое поведение, но уже показывает предупреждения о том, что именно сломается в 12-й версии. Затем выполните npm approve-scripts --allow-scripts-pending, чтобы увидеть полный список зависимостей, претендующих на запуск скриптов, и осознанно решить по каждой: доверяете — в белый список, нет — под запрет.

Важно не поддаться соблазну выдать «разрешение всем сразу»: массовый allowlist ради того, чтобы «просто заработало», обнуляет весь смысл нововведения. Утверждайте только конкретные пакеты в проверенных версиях и обязательно коммитьте обновлённую конфигурацию, чтобы она применялась и в CI. Для Git- и URL-зависимостей, если они вам действительно нужны, используйте флаги --allow-git и --allow-remote точечно.

Более широкий контекст: доверенная публикация

Отключение скриптов — не разовая мера, а часть большой перестройки безопасности npm, которую GitHub ведёт с конца 2025 года. Ей предшествовали отзыв старых «классических» токенов, обязательная двухфакторная аутентификация с аппаратными ключами для публикации и переход на короткоживущие сессии вместо вечных учётных данных. Отдельно появилась доверенная публикация (OIDC Trusted Publishing) — механизм, который позволяет публиковать пакеты из конвейеров CI/CD вообще без хранимых токенов, опираясь на криптографическое подтверждение источника сборки.

График закручивания гаек известен и дальше. Уже в начале августа 2026 года гранулярные токены доступа (GAT), настроенные в обход 2FA, потеряют право на чувствительные операции с аккаунтом и пакетами. А с января 2027-го прямая публикация такими токенами станет невозможной вовсе: выкладка перейдёт на staged-релизы, требующие подтверждения человеком через двухфакторную аутентификацию. Логика единая — убрать из процесса всё, что может сработать «само по себе» без явного согласия ответственного человека.

Что дальше

npm 12 закрепляет разворот всей индустрии к принципу «явного доверия» в цепочке поставок: инструмент по умолчанию делает безопасное, а удобное-но-рискованное поведение приходится включать осознанно. Для разработчиков это означает несколько часов работы на аудит зависимостей и настройку CI сейчас — в обмен на то, что один случайно затянутый вредоносный пакет больше не сможет молча выполнить код на их машинах и серверах. Тем, кто держит сайты и сервисы на Node.js, стоит проверить свои сборки заранее: обновление уже выкатывается, и лучше встретить его подготовленными, чем ловить упавший деплой.

Частые вопросы

Q.Сломает ли npm 12 мои существующие сборки?

Может сломать те, что опираются на install-скрипты — например, пакеты с нативной компиляцией (node-gyp, sharp, esbuild, puppeteer, prisma). Без явного разрешения такие зависимости не выполнят свои скрипты. Заранее пройдите npm approve-scripts, внесите доверенные пакеты в белый список и закоммитьте конфигурацию, чтобы CI вёл себя предсказуемо.

Q.Как разрешить скрипты для доверенных пакетов?

Выполните npm approve-scripts --allow-scripts-pending, чтобы увидеть все зависимости, которые хотят запускать скрипты установки. Затем добавьте нужные командой npm approve-scripts, а лишние заблокируйте через npm deny-scripts. Разрешайте точечно конкретные версии, а не «всем сразу».

Q.Зачем вообще понадобилось это изменение?

Автозапуск install-скриптов годами оставался главным вектором атак на цепочку поставок. В 2025 году так были захвачены популярнейшие пакеты (включая debug и chalk с миллиардами загрузок в неделю) и распространялся червь Shai-Hulud. Отключение скриптов по умолчанию убирает этот механизм автоматического исполнения чужого кода.

Q.Что делать прямо сейчас, если я ещё на npm 11?

Обновитесь до npm 11.16.0 или новее: эта ветка сохраняет старое поведение, но показывает предупреждения о будущих изменениях. Так можно заранее увидеть, что сломается в 12-й версии, и подготовить allowlist до перехода.

Источники

Предыдущая
Anthropic выпустила Claude Opus 5: почти уровень Fable 5 за половину цены — и новый регулятор «усилий»
Следующая
Qualcomm повышает цены на чипы на двузначный процент: 2-нм пластины, дефицит памяти и голод ИИ по мощностям

Читайте также

Стопка распечатанных судебных документов на тёмном рабочем столе, за ней открытый ноутбук с плотным текстом на экране. Иллюстрация · изображение сгенерировано ИИCyber News
3 сентября 2026 г.

Минюст США встал на сторону OpenAI: обучение моделей на чужих текстах объявили добросовестным использованием

2 сентября правительство США подало в суд Южного округа Нью-Йорка заявление о заинтересованности: обучение больших языковых моделей на защищённых текстах — это fair use. Разбираем аргументы Минюста, ответ издателей, конфликт с европейским AI Act и то, что делать владельцу сайта до 15 сентября.

Читать →
Рабочее место разработчика ночью: монитор с логом длительного прогона ИИ-агента и подсвеченным синтаксисом кодом, рядом механическая клавиатура и закрытый ноутбук. Иллюстрация · изображение сгенерировано ИИ.Cyber News
2 сентября 2026 г.

Claude Fable 5.1 и Mythos 5.1: кеш подешевел на 75% — и три изменения в API, которые ломают код

Anthropic выпустила Claude Fable 5.1 и закрытую Mythos 5.1. Чтение из кеша подешевело вчетверо, агентские бенчмарки выросли вдвое — но три изменения в API ломают существующий код.

Читать →
Крупный план экрана ноутбука с открытым менеджером расширений браузера: большинство карточек расширений погашено и неактивно. Иллюстрация · изображение сгенерировано ИИCyber News
1 сентября 2026 г.

Chrome окончательно удалил Manifest V2: 31 августа расширения исчезли из Web Store

Google зачистила Chrome Web Store от всех расширений на Manifest V2. Установленные на Chrome 138 останутся, но без обновлений. Разбираем таймлайн, лимиты declarativeNetRequest и что делать разработчикам.

Читать →