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


97

私が実行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",

バージョンは「_from」ではなく「_id」に表示されていると思います。バージョンは正しいですが、脆弱性は引き続き監査リストに表示されます。

私はまだnode.jsを初めて使用しているので、これらのメッセージは私を混乱させます。手動で修正したり、これらのメッセージを削除したりする方法はありますか?何もできませんか?


回答:


34

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

どのようなauditレポートと言うことは、それはだということであるeasy-extender持っているlodash依存関係を:

browser-sync > easy-extender > lodash        

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

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

browser-syncは本番環境で使用されていない開発ツールであり、その脆弱性が悪用される可能性のあるシナリオはそれほど多くありません。また、Prototype Pollutionは脆弱性ではなく、パッケージが適切な方法に従わないことに注意するだけで、無視できます。

通常、これは報告された脆弱性を修正する方法です。

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

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

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


パスセクションには注意を払いませんでしたが、実際にはlodashv3.10.1を使用しています。しかし、browser-syncは単なる例であり、リストの最後のものです。したがって、2つの低脆弱性を無視できますが、31の中程度の脆弱性を無視できますか?で何も変更するべきではないと思うnode_modulesので、フォークと修正はそれらを取り除く唯一の方法ですか?そして、新しいユーザーとして、私はそれを行う能力がありませんか?それらについてパッケージ開発者に発行する必要がありますか?
Jakupov

4
しかし、31の中程度のものを無視できますか?-これが「サニティチェック」の目的です。判断してください。これらのレポートが実際に言っていることに注意を払うほど、セキュリティ面でより優れた開発者になることができます。それらについてパッケージ開発者に発行する必要がありますか?-おそらく(少なくとも黙っauditて)すべきです、答えはそれに答えます。人々はnpm audit何とかせずに生きました。それらがアプリに実際のセキュリティ問題を引き起こす可能性は非常に低いですが、それらが何であるか、アプリでどのように使用されているかを知らなければ、それを保証することはできません。
Estus Flask 2018

ありがとう!コメントを書くのに時間がかかったので、コメントする前に編集された部分を見ませんでした。
Jakupov

6

監査をスキップしたいことが絶対に確実な場合は、-no-auditを追加してスキップできます。

 npm install --no-audit

3

'npm audit fix'は、package.jsonの依存関係のバージョンをインクリメントし、コードの破損につながる可能性があります。したがって、より良い方法は、package-lock.jsonを開き、依存関係/サブ依存関係のバージョンを必要なバージョンに更新することです。package-lock.jsonをリポジトリに保持します。

脆弱性は開発パッケージに由来する場合があります。その場合、これらの脆弱性は本番環境で検出されないため、無視してください。


-3

私のシステムで発生した問題のほとんどは、npmパッケージが原因でした。私は試した、

npm un npm

再インストールする必要はありません。

プログラムをもう一度実行してください。それは私のために働いた。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.