npm убирает install-скрипты и ограничивает токены: что делать

После серии атак на пакеты npm в 2025–2026 годах GitHub, которому принадлежит npm, меняет правила публикации и установки. Install-скрипты теперь выключены по умолчанию, токены в обход двухфакторной аутентификации поэтапно теряют права, а для безопасной публикации через CI появилось окно в два дня. Разработчикам и командам стоит подготовить сборку заранее, чтобы обновления не сломали выпуск пакетов.
Что меняется
Главных изменений несколько.
| Что | Как было | Как стало |
|---|---|---|
| Install-скрипты | preinstall и postinstall запускались автоматически | В npm 12 выключены по умолчанию, нужно явно разрешить |
| Git- и remote-зависимости | Ставились без ограничений | По умолчанию не ставятся без явного разрешения |
| Токены в обход 2FA | Могли выполнять любые операции | С августа 2026 теряют чувствительные действия с аккаунтом и пакетами |
| Публикация токеном | Долгоживущий токен публиковал напрямую | С января 2027 токены теряют прямую публикацию |
| Trusted publishing | — | Новая настройка должна опубликоваться в течение 2 дней, иначе истекает |
Логика простая: убрать из процесса долгоживущие секреты и автоматический запуск чужого кода при установке. Именно через них проходили атаки на цепочку поставок.
Почему это важно
Install-скрипты — удобный, но опасный механизм: при установке пакета запускается его код ещё до того, как вы что-то вызвали. Через них заражённые пакеты крали секреты. Отключение по умолчанию закрывает этот путь, но может сломать пакеты, которым скрипты нужны для сборки (например, с нативными модулями).
Токены в обход 2FA — вторая частая дыра. Если такой токен утекал, злоумышленник публиковал заражённую версию пакета. GitHub переводит публикацию на trusted publishing через OIDC: временные учётные данные, привязанные к конкретному запуску CI, без долгоживущего секрета.

Что делать команде
- Проверьте, не сломается ли установка. Обновите npm до актуальной версии, запустите обычную установку и посмотрите предупреждения. Если пакету нужны скрипты сборки, разрешите их командой `npm approve-scripts` и сохраните список в `package.json`.
- Переведите публикацию на trusted publishing. Настройте доверенного издателя для GitHub Actions, GitLab CI/CD или CircleCI. Самостоятельные раннеры пока не поддерживаются.
- Учтите окно в два дня. Новая настройка доверенного издателя должна успешно опубликоваться в течение двух дней, иначе она истекает и её придётся создавать заново.
- Откажитесь от долгоживущих токенов публикации. После января 2027 они потеряют прямую публикацию. Для установки приватных пакетов используйте токены только на чтение.
- Включите требование 2FA. В настройках доступа к публикации выберите обязательную двухфакторную аутентификацию и запрет токенов.
Для тех, кто просто пользуется пакетами
Если вы не публикуете свои пакеты, а только используете чужие, главное изменение — install-скрипты. После обновления npm установка может потребовать явно разрешить скрипты для некоторых зависимостей. Это нормально: так вы хотя бы раз осознанно смотрите, какому пакету разрешаете выполнять код при установке.
Наше мнение
Мы считаем эти изменения правильными, хотя они добавят работы. Годы атак на npm показали, что удобство автоматической публикации и запуска скриптов обходится слишком дорого. Командам стоит перейти на trusted publishing не потому, что «заставляют», а потому что долгоживущий токен публикации — это мина, которая рано или поздно утечёт.
Заказчику полезно задать подрядчику несколько вопросов: как публикуются пакеты проекта, используются ли ещё долгоживущие токены, включена ли двухфакторная аутентификация на публикацию. Ответы покажут, насколько серьёзно в команде относятся к цепочке поставок.
Короткий план перехода
Порядок, который советует и сам GitHub: сначала настроить и проверить доверенного издателя, затем ограничить токены, и только потом отозвать те, что больше не нужны. Так вы не останетесь без возможности публиковать в середине перехода. Для установки приватных зависимостей оставьте отдельный токен только на чтение.
Сроки, о которых стоит помнить
По материалам The Hacker News и документации npm, этапы такие: в начале августа 2026 года токены в обход 2FA теряют чувствительные операции с аккаунтами, пакетами и организациями; после января 2027 года они теряют и прямую публикацию, оставляя только чтение и подготовку релиза с ручным подтверждением. Если ваша сборка до сих пор публикует пакеты долгоживущим токеном, перейти на trusted publishing стоит до января 2027 года, иначе выпуск сломается.
Почему GitHub пошёл на такие меры
Изменения — прямая реакция на волну атак на npm 2025–2026 годов, когда через подменённые пакеты и украденные токены заражали тысячи зависимостей. Удобные механизмы — автоматический запуск скриптов при установке и долгоживущие токены публикации — оказались и самыми удобными для атакующих. GitHub выбрал путь «безопасно по умолчанию»: теперь опасное поведение нужно включать осознанно, а не отключать после инцидента. Для команд это означает разовую работу по перенастройке, но в обмен закрывается целый класс атак.
Какие секреты пора сменить
Простая проверка по датам: для каждого секрета укажите дату последней смены и допустимый срок жизни в днях. Если секрет мог утечь (инцидент у хостинга, CI, подрядчика), меняйте его сразу, независимо от срока. Даты в формате ГГГГ-ММ-ДД. Расчёт выполняется на вашем устройстве, введённые данные никуда не отправляются.
Материалы для проверки
Если нужна реализация
Состав работ зависит от текущего проекта и подтверждённой причины. Можно обсудить диагностику или разработку подходящего решения.
Вопросы и ответы
Отключение install-скриптов сломает мой проект?
Может, если пакеты собирают нативные модули при установке. После обновления npm запустите установку, посмотрите предупреждения и разрешите нужные скрипты командой npm approve-scripts, сохранив список в package.json.
Что такое trusted publishing?
Способ публикации пакетов без долгоживущего токена: CI получает временные учётные данные через OIDC, привязанные к конкретному запуску. Поддерживаются GitHub Actions, GitLab CI/CD и CircleCI.
Почему новая настройка издателя «истекает»?
Чтобы ограничить окно, в которое незавершённой настройкой можно злоупотребить, GitHub требует первую успешную публикацию в течение двух дней. Если не успели — удалите настройку и создайте заново.
Я только устанавливаю пакеты, не публикую. Что мне делать?
Главное — install-скрипты. После обновления npm установка может попросить разрешить скрипты для части зависимостей. Разрешайте осознанно и фиксируйте версии в lock-файле.
Нужно ли отключать старые токены прямо сейчас?
Сначала настройте и проверьте trusted publishing, потом ограничьте токены и только затем отзывайте лишние. Так вы не потеряете возможность публиковать в процессе перехода.
Эти изменения касаются только публичных пакетов?
Нет, правила аутентификации и install-скриптов касаются и приватных пакетов. Разница в том, что для приватных установок нужен токен только на чтение, а публикация переводится на доверенного издателя.