1. ホーム
  2. node.js

[解決済み] npmの脆弱性を手動で修正する方法とは?

2022-07-23 05:44:56

質問

を実行すると 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": "[email protected]",

私は、バージョンは "_id" で表示され、 "_from" では表示されないと考えています。したがって、バージョンは正しいですが、脆弱性はまだ監査リストに表示されます。

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

どのように解決するのですか?

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

audit のレポートによると、それは easy-extender を持っていること lodash に依存します。

browser-sync > easy-extender > lodash        

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

audit レポートの重要性は手動で評価されるべきです。ネストされた依存関係がセキュリティリスクを持つとしても、そのリスクをもたらす機能が使われたとは限りません。また、たとえ使用されたとしても、それがどのように使用されるかに起因する実際のリスクを導入することを意味しません。

browser-sync は開発ツールであり、本番では使用されないので、その脆弱性が悪用されるシナリオはそれほど多くありません。また プロトタイプの汚染 は脆弱性ではなく、パッケージが良い習慣に従っていないことを示す通知であり、無視することができます。

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

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

ほとんどの場合、健全性チェックより先に進まないことが予想され、唯一の問題は、"脆弱性" が監査レポートを乱雑にし、実際の脆弱性を隠してしまうことです。

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

Yarn 1 と 2 では、ネストされた依存関係において、特定の依存関係のバージョンを強制することが可能で、それには resolutions フィールド とすると、監査報告書に影響します。次のようにすることも可能でしょう。 を NPM でネイティブに行うことができるかもしれません。 ができるかもしれません。現在、NPM での代替はサードパーティの npm-force-resolutions ユーティリティがありますが、これはあまり制御できません。 の解決を強制しています。 .

一緒に動作するように設計されていないネストした依存関係を強制的に使用することで、いつ壊れてもおかしくないことに注意してください。これは特に npm-force-resolutions これは鈍器であり、一度に多くのネストした依存関係に影響を与えることができます。