web-dev-qa-db-ja.com

npmの脆弱性を手動で修正する方法は?

npm installを実行すると、found 33 vulnerabilities (2 low, 31 moderate) run `npm audit fix` to fix them, or `npm audit` for detailsと表示されます。

ただし、npm audit fixup 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": "[email protected]",

そのバージョンは「_from」ではなく「_id」で表示されるため、バージョンは正しいものの、脆弱性は監査リストに表示されます。

私はまだnode.jsの初心者であり、これらのメッセージは私をとても混乱させます。手動で修正する方法やそれらのメッセージを取り除く方法はありますか、私は何もできませんか?

32
Jakupov

devDependencieslodash-cliは、プロジェクトでのbrowser-syncの動作に影響しません。パッケージが依存関係としてインストールされている場合、devDependenciesは無視されます。

auditレポートによると、lodash依存関係を持つのはeasy-extenderです。

browser-sync > easy-extender > lodash        

それは Lodash 3に依存 、問題はLodash 4で修正されました。この問題は、easy-extenderをフォークして更新し、NPMパブリックレジストリのパッケージの代わりにインストールすることで修正できます。しかし、この依存関係に実際の問題はありません。

auditレポートの重要度は手動で評価する必要があります。ネストされた依存関係にセキュリティリスクがある場合でも、このリスクを引き起こす機能が使用されたという意味ではありません。これはまた、たとえそれが使われたとしても、それがどのように使われるかによって本当のリスクをもたらすという意味ではありません。

browser-syncは本番環境では使用されない開発ツールです。脆弱性が悪用されるシナリオはそれほど多くありません。そして、Prototype Pollutionはぜい弱性ではなく、パッケージが優れた慣行に従っていないという単なる通知であり、無視することができます。

一般的に、これは報告された脆弱性を修正する方法です。

  • 健全性チェックを行う
  • それが実際の問題である場合、既存の問題およびPRの脆弱なパッケージのリポジトリを確認してください
  • ない場合は、問題を送信してください
  • NPMリリースで修正されるまで、リポジトリをフォークするか、既存のPRを git依存関係 として使用する
  • ネストされた依存関係の場合、ネストのいくつかのレベルでこれを行います

ほとんどの場合、健全性チェックを超えて進むことはないと予想されます。

patch-package は、ネストされた依存関係をその場でパッチするのに役立ちますが、これはauditレポートには影響しません。

11
Estus Flask