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-нм пластины, дефицит памяти и голод ИИ по мощностям

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

Фотореалистичный кадр из-за плеча разработчика в затемнённом офисе: на большом мониторе — панель наблюдаемости с каскадом трассировок в бирюзовых, янтарных и фиолетовых полосах, графиком и списком задач, на втором экране справа — код с подсветкой синтаксиса; на столе клавиатура, кружка и витой кабель — к новости о выходе Microsoft Agent Harness и Foundry Hosted Agents в общий доступCyber News
8 августа 2026 г.

Agent Harness и Hosted Agents стали общедоступны: Microsoft делает ставку на рантайм для ИИ-агентов

Microsoft перевела в общий доступ Agent Harness и Foundry Hosted Agents — производственный рантайм и хостинг для ИИ-агентов. Главный тезис: около 98% кода агента — это «обвязка», а не сама модель.

Читать →
Фотореалистичный кадр чистой комнаты завода по производству полупроводников: техник в белом защитном комбинезоне у литографической установки, ряды технологического оборудования с зелёными и янтарными индикаторами уходят вглубь цеха; в углу пометка «Иллюстрация · изображение сгенерировано ИИ» — к новости о заводе Terafab компаний Tesla и SpaceXCyber News
8 августа 2026 г.

Terafab: Tesla и SpaceX подтвердили завод чипов за $16,8 млрд — Маск строит собственный кремний

Tesla и SpaceX официально выбрали площадку под Terafab — завод полупроводников в Техасе. Первая фаза оценивается в $16,8 млрд, а весь проект — это ставка Илона Маска на собственный кремний вместо зависимости от TSMC и Samsung. Разбираем, что подтвердили, для кого будут эти чипы и почему автопроизводитель вдруг строит фабрику размером с крупнейшее здание в мире.

Читать →
Крупный план реального монитора на столе разработчика: на экране — детальная админка интернет-магазина с сеткой товаров и графиками аналитики, рядом клавиатура и второй экран с кодом в мягком боке. Фотореалистичный редакционный кадр, тёмная графитовая среда с тёплым светом; насыщенный синий — внутри свечения интерфейса.Cyber News
6 августа 2026 г.

WooCommerce 11.0: кеширование товаров ускоряет магазин, а гостевые заказы привязываются к аккаунту

WooCommerce 11.0 вышла 4 августа: 551 pull request, кеширование объектов товаров ускоряет карточки на 9–12%, гостевые заказы теперь привязываются к аккаунту по email, а Action Scheduler обновлён до 4.0. Разбираем, что это даёт владельцам магазинов и на что смотреть разработчикам.

Читать →