Как исправить уязвимости 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
Вам не нужно устанавливать заново.
Просто запустите программу еще раз. У меня это сработало.