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 за половину цены — и новый регулятор «усилий»

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

Фотореалистичная визуализация светящегося «ядра интеллекта» с синим свечением и голографическими графиками бенчмарков — к новости о выходе Claude Opus 5Cyber News
25 июля 2026 г.

Anthropic выпустила Claude Opus 5: почти уровень Fable 5 за половину цены — и новый регулятор «усилий»

24 июля Anthropic представила Claude Opus 5 — модель, которая приближается к флагманскому Fable 5 на агентных и кодовых задачах, но стоит вдвое дешевле. Разбираем цену, режим Fast, регулятор усилий и что это меняет для разработчиков.

Читать →
Фотореалистичный кадр серверной AI-стойки rack-scale в тёмном дата-центре с жидкостным охлаждением и разноцветными LED; в углу пометка «Иллюстрация · изображение не отражает реальный продукт» — к новости об AMD Helios, MI450 и EPYC VeniceCyber News
25 июля 2026 г.

AMD представила Helios: готовая стойка на MI450 и EPYC «Venice» — прямой вызов Nvidia

На мероприятии Advancing AI в Сан-Франциско AMD показала Helios — готовую стойку на 72 ускорителях Instinct MI455X и процессорах EPYC «Venice», с ценником 5–5,5 млн долларов и заказчиками в лице Anthropic и Microsoft. Разбираем, чем это грозит доминированию Nvidia.

Читать →
Голографический макет смартфона с интерфейсом мобильного приложения парит над тёмным столом разработчика рядом с полупрозрачными панелями кода с подсветкой синтаксиса; тёплый отблеск на алюминиевом ноутбуке, синее свечение внутри голограммы.Cyber News
25 июля 2026 г.

Claude Code научился видеть iOS-симулятор: ИИ сам собирает, запускает и тестирует приложения

Anthropic добавила в десктопный Claude Code для macOS живую панель симулятора iOS. ИИ теперь сам собирает приложение, запускает его, нажимает на кнопки, читает экран и по результату правит код — без слоя «компьютерного зрения» и без участия человека на каждой итерации.

Читать →