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

96

Когда бегу, 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, и эти сообщения меня очень смущают. Есть ли способ исправить это вручную или избавиться от этих сообщений, с которыми я ничего не могу сделать?

Якупов
источник

Ответы:

33

lodash-cliin 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
  • В случае вложенных зависимостей сделайте это на нескольких уровнях вложенности.

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

patch-packageможет помочь исправить вложенные зависимости на месте, но это не повлияет на auditотчет.

Фляга Эстуса
источник
Я не обратил внимания на раздел Path, и он действительно использует lodash v3.10.1, спасибо. Но браузер-синхронизация - это всего лишь пример, последний из списка. Итак, я могу игнорировать 2 слабые уязвимости, но могу ли я игнорировать 31 умеренную? Полагаю, мне не следует ничего изменять node_modules, так что развеивание и исправление - единственный способ избавиться от них? И как новый пользователь я не могу этого сделать? Стоит ли сообщать о них разработчикам пакетов?
Jakupov
4
а можно ли игнорировать 31 умеренный? - в этом суть «проверки на здравомыслие», судите сами. Чем больше внимания вы уделяете тому, что на самом деле говорится в этих отчетах, тем лучшим разработчиком вы можете стать с точки зрения безопасности. Стоит ли сообщать о них разработчикам пакетов? - Вы, вероятно, должны (по крайней мере, замолчать audit), ответ отвечает на это. Люди npm auditкак-то жили без . Шансы на то, что они вызовут реальные проблемы с безопасностью приложения, очень низки, но я не могу этого гарантировать, не зная, что это такое и как они используются в вашем приложении.
Estus Flask
Благодарность! Потребовалось время, чтобы написать комментарий, поэтому не видел отредактированную часть, прежде чем комментировать.
Jakupov
5

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

 npm install --no-audit
Тжад Кларк
источник
2

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

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

Ник
источник
-3

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

npm un npm

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

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

Гаурав Рана
источник