Перейти к основному содержимому

Malicious Package Blocker

Malicious Package Blocker останавливает установку npm, pnpm, yarn или bun, если имя и версия пакета есть в наборе данных OpenSSF Malicious Packages. Bun проверяется только когда включён shim_bun.

Он ищет имена в подписанном локальном файле (malware.db). Это не сканер файлов. Он не проверяет содержимое tarball.

Это не module firewall. Module firewall применяет ваши списки allow и deny. Этот blocker применяет публичную ленту известных вредоносных имён.

Проверки работают в режиме shim. Они включены по умолчанию в Community Builds и Certified Builds.

Пример​

Когда именованная установка попадает в ленту OpenSSF, shim печатает строку блокировки и установка не продолжается:

npm install left-pad
NVM blocked left-pad — recognized as malware (OpenSSF). (NVM4602)

Та же строка появляется для pnpm, yarn, vlt и (когда включён shim_bun) bun. Попадание по списку организации использует organization malware block вместо причины OpenSSF.

Как это работает​

Совпадение — терминальная ошибка. Эта команда установки не продолжается. Каждое заблокированное имя печатает NVM blocked <name> — <reason>. (NVM4602). OpenSSF использует recognized as malware (OpenSSF). Локальный шаблон организации использует organization malware block.

Что проверяется​

СборкаПроверяется
Community BuildИменованный пакет в npm install <name> (и эквиваленты pnpm / yarn). Прямые зависимости package.json при голом npm install. Без lockfile. Без транзитивных зависимостей.
Certified BuildsПроверки Community, плюс lockfile проекта. Lockfile — это разрешённый граф, включая транзитивные зависимости. Certified Builds также проверяют этот lockfile при запуске node в каталоге проекта.

Community Builds не читают lockfile. Community Builds не проверяют транзитивные зависимости. Community Builds не проверяют при запуске node.

Если malware.db отсутствует, refresh при установке и hourly sync скачивают его. Отсутствующий или недоверенный файл после неудачи всё равно блокирует, кроме случая AirGapped и полного отсутствия доверенного файла.

Certified MSI снимает снимок live-ленты при сборке (utils\malware.db + utils\head.cose в Program Files). Это только fallback. Live-лента важнее, когда доступна. Shim берёт пару из data-root только если head.cose проходит проверку и state_hash совпадает; иначе читает seed из Program Files. Не копируйте malware.db вручную, пока есть live-пара или seed.

Certified Builds могут сначала выполнить проход package manager только для lockfile. В stderr может появиться scanning.... Повторное использование метки эту строку не показывает.

Пропустить проверки​

Установите skip_malware_checks в true, чтобы отключить поиск в shim.

nvm config set skip_malware_checks=true

HKLM SkipMalwareChecks важнее HKCU. Файл определений всё равно обновляется, если проверки пропущены.

Разрешить ложное срабатывание​

MalwareAllowList — только HKLM. См. справочник политики реестра.

Каждая строка — один шаблон. Сравнение по байтам. Регистр не складывается.

  • left-pad разрешает все версии этого имени.
  • [email protected] разрешает только эту версию.
  • @scope/* разрешает все пакеты в этой области.
  • * внутри имени — подстановка.

Пустой список ничего не разрешает. Совпадение снимает блок OpenSSF, и установка продолжается. Этот список не снимает блок организации.

Списки организации (Certified Builds)​

Certified Builds также читают:

КлючЭффект
MalwareBlockListШаблоны HKLM, которые всегда блокируют. Community Builds игнорируют этот список.
MalwareTrustConflictprevent (по умолчанию) всё равно блокирует попадание OpenSSF, если имя явно доверено или одобрено. continue пропускает такое доверие или одобрение. Community Builds игнорируют этот ключ.

Встроенные семена доверия менеджеров пакетов (npm, npx, yarn, yarnpkg, corepack, pnpm, vlt) для этой проверки доверием не считаются.

Блок malware не пишет package_manager.install. NVM4602 — запись, когда включён Advanced Logging.

Проверить имя​

nvm malware status left-pad
nvm malware status left-pad --json

Строка allowed с текстом overruled всё равно значит попадание OpenSSF (или оргсписка). Эта политика пропустила имя. См. nvm malware status.

Уведомления​

Попадание всегда печатается в терминале.

Если консоль в фоне, Windows также показывает уведомление. Заголовок — Malicious package blocked только для OpenSSF, Organization malware block только для локального списка, и Package blocked при смеси источников. Тело называет не более трёх пакетов, затем and N more. Сигнал — Notification.Reminder. disable_announcements это уведомление не скрывает.

На Community Build в домене Active Directory, Entra или Google Workspace в теле добавляется: Certified keeps a record of blocks like this for your security tools.

Certified Builds также могут показать Malware definitions updated после успешного изменения определений. Don't show again ставит notify_malware_definitions в false. См. уведомления на рабочем столе.

Кэш​

Метки лежат в .cache/malware-scan. malware.db лежит в корне данных NVM.

nvm cache list malware
nvm cache remove malware
nvm cache remove malware --prompt

nvm cache remove all удаляет метки и malware.db. Удаление учитывает allow_download_cache_removal. См. кэш загрузок и nvm cache remove malware.

События​

Эти события требуют дополнение Advanced Logging. Они используют Windows Event ID 120 в NVM for Windows/Operational.

КодСобытие
NVM4601malware.definitions_updated
NVM4602malware.package_blocked — пакет, версия, команда, source, reason

См. журналирование событий и коды ошибок.