npm install — это RCE Каждый раз, когда пишем npm install, мы запускаем чужой код: в деве, в CI, в проде. И почти никогда не читаем, что там внутри.

npm устроен так, что одна зависимость может притянуть сотни. Где на любом уровне — postinstall, бэкдор, телеметрия или просто баг.

Добавляя “удобный” хелпер (deepClone, dateFormat), можно получить зависимости, у которых на любом уровне может быть: – postinstall, выполняющий shell-скрипт – prepare с подменой файлов перед публикацией – динамический импорт из внешнего URL – замаскированный base64/pako payload – инициализация, собирающая ENV, hostname и proxy-данные

Или просто: – устаревший код, который тормозит рантайм – сломанный код при следующем миноре

Многие пакеты не имеют CI, не проходят аудит. package-lock не спасёт, если у тебя ^ или обновление в dev-зависимости.

Не так давно были заражены: eslint-config-prettier, eslint-plugin-prettier, @pkgr/core. Сотни тысяч проектов могли получить трояна через обычный npm install.

Каждый npm install — это акт доверия. Если ты не читаешь, что ставишь — ты запускаешь произвольный код.

Чем ниже уровень — тем выше цена. Zero Deps — это не мода. Это контроль.