EMZETT.
Войти

npm audit

Коротко: Встроенная команда npm, сверяющая установленные зависимости проекта с базой данных известных уязвимостей безопасности.

Подробнее: Результат отсортирован по серьёзности (критическая/высокая/средняя/низкая). npm audit fix автоматически исправляет всё, что возможно без несовместимых изменений; npm audit fix --force исправляет и остальное, но при этом может принудительно перевести пакеты на несовместимые версии. «No fix available» означает, что сами сопровождающие пакета ещё не выпустили исправленную версию.

Наш контекст: Обнаружено при пересоздании package-lock.json — 22 уязвимости, 15 исправлено автоматически без несовместимых изменений; остальные 15 зависят от инструментов сборки Capacitor (важны только для мобильного приложения, исправления нет) и намеренно не форсировались.

Подробности

Что именно проверяется

npm audit проверяет не только зависимости, перечисленные непосредственно в package.json, но и полное дерево зависимостей, включая все транзитивные зависимости (пакеты, которые, в свою очередь, импортируются вашими пакетами) — так что уязвимость может быть глубоко спрятана в пакете, о котором вы даже не слышали, но который установлен косвенно. Сама команда ничего не устанавливает; она лишь сравнивает версии, зафиксированные в package-lock.json, с публичной базой известных уязвимостей (база рекомендаций реестра npm, которая, в свою очередь, основана на публично сообщённых CVE — Common Vulnerabilities and Exposures).

Уровни серьёзности и что они означают

Четыре уровня серьёзности (критическая/высокая/средняя/низкая) обычно отражают систему оценки CVSS (Common Vulnerability Scoring System), которая используется для стандартизированной оценки уязвимостей безопасности во всей отрасли. Критические и высокие уязвимости обычно касаются таких вещей, как удалённое выполнение кода или обход аутентификации, тогда как низкие оценки часто касаются теоретических проблем или тех, что можно эксплуатировать только при очень особых условиях. Важно: оценка относится к пакету, рассматриваемому изолированно — можно ли уязвимость реально эксплуатировать в ВАШЕМ проекте, зависит от того, достигается ли вообще уязвимый путь кода с непроверенными/внешними данными.

Пределы npm audit fix --force

Важно с npm audit fix --force: команда действительно пытается исправить уязвимость, но для этого может перейти на новую мажорную версию пакета — а мажорные версии, согласно семантическому версионированию, явно НЕ гарантируют обратной совместимости. После принудительного исправления полная проверка тестами/сборкой поэтому обязательна, а не необязательна, прежде чем доверять результату. На практике --force может даже привести к переходу пакета на версию, ломающую другие зависимости в том же проекте (конфликты peer dependency) — команда оптимизирует прежде всего «уязвимость исчезла», а не «проект продолжает работать».

Когда исправления нет

Уязвимость без доступного исправления («no fix available») обычно означает одно из двух: либо сопровождающие затронутого пакета ещё не закрыли дыру, либо пакет больше не поддерживается — во втором случае часто единственный вариант — заменить пакет активно поддерживаемой альтернативой. Прежде чем игнорировать неисправленную уязвимость, стоит кратко проверить, достижим ли уязвимый путь кода в вашем проекте вообще — многие сообщённые уязвимости касаются очень конкретных вызовов функций пакета, которые проект может вообще не использовать, что может делать реальный риск низким несмотря на формально существующую уязвимость.

Непрерывный мониторинг вместо разовой проверки

Поскольку новые уязвимости постоянно обнаруживаются и о них сообщается, разовый запуск npm audit — лишь снимок: проект, чистый на момент установки, может через недели показывать новые сообщения, хотя в вашем собственном коде ничего не изменилось. Многие команды поэтому интегрируют npm audit (или эквивалентные инструменты вроде GitHub Dependabot) в свои конвейеры CI, чтобы автоматически и регулярно проверять новые уязвимости, а не полагаться на случайные ручные запуски.

См. также: GitHub