Роботам тут не рады. Платформа npm больше не доверяет автоматическим сборкам без одобрения человека
Компания GitHub, которой принадлежит платформа npm, сообщила о двух новых мерах защиты для экосистемы JavaScript. Обновления должны усложнить атаки, при которых злоумышленники пытаются подменять популярные пакеты через автоматические сборки и сторонние источники. Изменения затронули как процесс публикации пакетов, так и установку зависимостей.
Главным нововведением стал режим поэтапной публикации (staged publishing), который теперь доступен всем пользователям npm CLI версии 11.15.0 и новее. Вместо мгновенной публикации готовый пакет сначала отправляется в специальную очередь. После загрузки версия остаётся недоступной для установки, пока сопровождающий проекта вручную не подтвердит выпуск через npm CLI или сайт npmjs.com.
В GitHub пояснили, что механизм усиливает проверку присутствия человека при каждой публикации. Подтверждение требует двухфакторной аутентификации, даже если сборка создаётся автоматически через CI/CD или систему доверенной публикации (trusted publishing) с OIDC. Разработчики рассчитывают, что новая схема усложнит атаки на инфраструктуру сборки и снизит риск распространения вредоносных обновлений через скомпрометированные процессы CI/CD.
Компания рекомендует использовать staged publishing вместе с trusted publishing. В таком режиме CI/CD сможет только загружать пакет в очередь, а финальное одобрение останется за владельцем проекта. Для перехода на новую модель потребуется обновить рабочие процессы и заменить команду npm publish на npm stage publish.
Одновременно GitHub расширила контроль над источниками зависимостей. В версии npm 11.15.0 появились флаги --allow-file, --allow-remote и --allow-directory. Настройки позволяют ограничивать установку пакетов из локальных директорий, файловых архивов и удалённых URL-адресов. Ранее аналогичная возможность существовала только для Git-источников через параметр --allow-git.
Каждый параметр поддерживает два режима: all и none. Настройки можно применять как через командную строку, так и в файлах .npmrc и package.json. В npm напомнили, что в следующем крупном релизе CLI параметр --allow-git по умолчанию переключится с all на none.
Новые ограничения для файлов, директорий и удалённых источников пока остаются необязательными, однако разработчики уже сейчас могут включить более строгую модель безопасности. Чем меньше автоматизированные процессы действуют без контроля, тем труднее превратить удобство разработки в канал для незаметной атаки.