Как исправить уязвимости npm вручную?

Когда я бегу npm install это говорит found 33 vulnerabilities (2 low, 31 moderate) run `npm audit fix` to fix them, or `npm audit` for details,

Тем не мение, npm audit fix выходы up to date in 11s fixed 0 of 33 vulnerabilities in 24653 scanned packages 33 vulnerabilities required manual review and could not be updated

Это делает review значит, это не должно быть исправлено пользователем?

Когда я бегу npm audit это дает мне список таблиц, похожих на ┌───────────────┬──────────────────────────────────────────────────────────────┐ │ Low │ Prototype Pollution │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ Package │ lodash │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ Patched in │ >=4.17.5 │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ Dependency of │ browser-sync [dev] │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ Path │ browser-sync > easy-extender > lodash │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ More info │ https://nodesecurity.io/advisories/577 │ └───────────────┴──────────────────────────────────────────────────────────────┘

В этом примере раздел исправления связанной страницы говорит Update to version 4.17.5 or later., Однако в /node_modules/browser-sync/package.json Есть строки:

"devDependencies": {
    "lodash-cli": "4.17.5",
}

и больше нет зависимости от lodash. Так что это должно быть уже v4.17.5. Я тоже проверил /node_modules/lodash/lodash.json у которого есть var VERSION = '4.17.10'; линия. В /node_modules/lodash/package.json Есть эти строки:

  "_from": "lodash@^4.17.4",
  "_id": "lodash@4.17.10",

Я считаю, что версия указана в "_id", а не в "_from", поэтому версии верны, но уязвимости все еще появляются в списке аудита.

Я все еще новичок в node.js, и эти сообщения меня сильно смущают. Есть ли способ исправить это вручную или избавиться от тех сообщений, с которыми я ничего не могу сделать?

9 ответов

Решение

lodash-cli в devDependencies не влияет на то, как browser-sync работает в вашем проекте, devDependencies игнорируются, когда пакет устанавливается как зависимость.

Какие audit В докладе говорится, что это easy-extender который имеет lodash зависимость:

browser-sync > easy-extender > lodash        

Это зависит от Lodash 3, в то время как проблема была исправлена ​​в Lodash 4. Проблема может быть решена путем разветвления easy-extender, обновив и установив его вместо пакета из открытого реестра NPM. Но нет реальной проблемы с этой зависимостью.

audit Важность отчета должна оцениваться вручную. Даже если у вложенной зависимости есть риск для безопасности, это не означает, что была использована функция, представляющая этот риск. Это также не означает, что даже если он используется, он представляет реальный риск из-за того, как он используется.

browser-sync это инструмент разработки, который не используется в рабочей среде, существует не так много сценариев, где его уязвимости можно было бы использовать. А Prototype Pollution вовсе не является уязвимостью, это просто уведомление о том, что пакет не следует передовым методам, его можно игнорировать.

Как правило, это способ исправить обнаруженные уязвимости:

  • Сделать проверку вменяемости
  • Если это реальная проблема, проверьте хранилище уязвимого пакета на наличие проблем и PR.
  • Если их нет, отправьте вопрос
  • Разветвите репозиторий или используйте существующий PR в качестве git-зависимости, пока он не будет исправлен в выпуске NPM
  • В случае вложенных зависимостей, делайте это на нескольких уровнях

В большинстве случаев ожидается, что вы не продвинетесь дальше проверки здравомыслия.

Если вы абсолютно уверены, что хотите пропустить аудит, вы можете сделать это, добавив --no-audit

 npm install --no-audit

'npm audit fix' увеличит версию зависимости в package.json, что может привести к нарушению кода. Итак, лучший способ - открыть package-lock.json и обновить версии зависимостей / подзависимостей до требуемой версии. Сохраните package-lock.json в репозитории.

Иногда уязвимости исходят от пакетов разработки. В этом случае игнорируйте эти уязвимости, поскольку они не обнаруживаются в производственной среде.

использовать это

исправление аудита npm --force --production

может решить вашу проблему

npm install npm@latest -g, просто используйте эту команду, надеюсь, она решит вашу проблему.

Вы также можете использовать силу, как npm audit fix --force.

Настоящим уязвимостям (и рискам) с точки зрения безопасности присвоены уникальные идентификаторы CVE и/или GHSA. Пакеты JavaScript теперь можно сканировать на наличие таких уязвимостей с помощью нескольких широкомасштабных инструментов сканирования безопасности, таких как Anchore Grype, Trivy или Snyk, которые могут указать вам путь к проблеме.package.jsonфайл и покажет вам версию установленного пакета, а также идентификатор CVE/GHSA. Эти сканеры также можно применять для автоматического сканирования всех контейнеров Docker до того, как будет разрешено их развертывание (например, как часть конвейеров Jenkins).

Ручное исправление CVE в JS-пакете (еслиnpm audit fixне может сделать это автоматически) состоит из либо обновления, например, с помощьюnpm i <package>@<patch_version>если исправление безопасности уже существует (что можно проверить с помощьюnpm outdated <package>), возможно, несколько раз (на всех уровнях вложенности) или путем внесения в белый список номера CVE и комбинации пакета до того, как такое исправление станет доступным (если оно находится в категории «не исправит»). Иногда саму систему необходимо обновить, еслиnodeдвоичный файл — это затронутый файл — вы можете сделать это, используяnvm install <major_ver> && nvm alias default <major_ver>.

Я попробовал это, и у меня это сработало, выполните следующие команды:

      > npm audit fix    
> npm set audit false

Большая часть проблем в моей системе была связана с пакетом npm. Я старался,

npm un npm

Вам не нужно устанавливать заново.

Просто запустите программу еще раз. У меня это сработало.

Другие вопросы по тегам