Ваш код подозрителен по умолчанию. NPM превратила загрузку пакета в досмотр с пристрастием
Каждый день в npm появляются тысячи новых пакетов кода, и до последнего времени они становились доступны для установки почти сразу после публикации — теперь же перед этим их будут проверять на вредоносность. Платформа npm, принадлежащая GitHub, объявила о запуске автоматического сканирования пакетов в момент публикации и ввела новое требование к метаданным для пакетов с «двойным назначением».
Под такими пакетами понимается код, у которого есть легитимное применение в сфере безопасности, но который по своему поведению похож на вредоносный. Это, например, инструменты для тестирования на проникновение, сканеры уязвимостей или программы, имитирующие действия злоумышленников для проверки защиты систем. Автоматические системы часто путают такой код с настоящим вредоносным ПО, поэтому npm решила выделить подобные пакеты в отдельную категорию с особыми правилами публикации.
Согласно новым правилам, каждый новый пакет теперь проходит проверку, прежде чем становится доступным для установки. По результатам сканирования пакет либо публикуется как обычно, либо отправляется на ручную проверку, либо блокируется полностью. Это добавляет задержку между публикацией и появлением пакета в реестре — обычно около пяти минут, но в периоды пиковой нагрузки или для крупных пакетов ожидание может растянуться до 15 минут и более. Разработчикам, чьи скрипты рассчитаны на немедленную доступность пакета после публикации, стоит учитывать эту задержку.
Если пакет заблокирован, автор получает уведомление с возможностью подать апелляцию. В зависимости от серьёзности и достоверности обнаруженной угрозы к учётной записи автора могут применяться дополнительные меры в соответствии с действующей политикой npm.
Отдельная проблема — пакеты с легитимным, но потенциально опасным функционалом, например инструменты для тестирования на проникновение или анализа безопасности. Автоматические системы нередко принимают такой код за вредоносный. Для подобных случаев npm ввела новое поле contentPolicy в файле package.json, а также обязательный текстовый файл DISCLOSURE, где автор должен описать назначение и легитимное применение своего кода. Эти сведения использует команда npm по доверию и безопасности при ручной проверке, однако сама по себе такая декларация не гарантирует публикацию пакета.
Публиковать пакеты с заявленным двойным назначением можно только способами, обеспечивающими двухфакторную аутентификацию — например, через доверенную публикацию по протоколу OIDC, интерактивную сессию с 2FA или поэтапную публикацию. Токены доступа, позволяющие обходить двухфакторную проверку, для прямой публикации таких пакетов использовать нельзя. Кроме того, после первой декларации двойного назначения удалить поле contentPolicy или файл DISCLOSURE в последующих версиях пакета уже не получится — такие публикации будут отклонены.
Новые правила внедряются постепенно. Авторам пакетов с двойным назначением, которые ещё не добавили нужные метаданные, npm уже рассылает уведомления по электронной почте, чтобы их пакеты не оказались заблокированы автоматически. Разработчикам, распространяющим через npm код с элементами анализа безопасности, стоит заранее подготовить описание для файла DISCLOSURE и перейти на публикацию через методы с обязательной двухфакторной аутентификацией.