はじめに
gulp関連のパッケージをnpmでインストールした時に、vulnerability(脆弱性)の警告が出ました。
コマンド実行時に表示される案内の通りnpm audit fixを実行しましたが、パッケージの依存関係の都合上、自動的に更新がされませんでした。
パッケージの依存関係に関することなので、どうしようもないかもしれません。ですが、そのまま放置しておくのも落ち着かないので、解決に向けて対応してみました。
注意事項
パッケージの依存バージョンをいじります。各パッケージのバージョン対応の状況により、意図した動作をしなくなるかもしれません。くれぐれも自己責任でお願いいたします。
なお、各パッケージの提供元で脆弱性への対応がされているかもしれませんので、先に確認されることをおすすめします。
では解消していきましょう!
状況の確認をする
npm auditで脆弱性の詳細を確認します。
=== npm audit security report ===
┌──────────────────────────────────────────────────────────────────────────────┐
│                                Manual Review                                 │
│            Some vulnerabilities require your attention to resolve            │
│                                                                              │
│         Visit https://go.npm.me/audit-guide for additional guidance          │
└──────────────────────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High          │ Prototype Pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ dot-prop                                                     │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in    │ >=5.1.1                                                      │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ npm                                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ npm > libnpx > update-notifier > configstore > dot-prop      │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://npmjs.com/advisories/1213                            │
└───────────────┴──────────────────────────────────────────────────────────────┘この例ではパッケージdot-propでプロトタイプ汚染攻撃に対する脆弱性があるとのこと。そして、バージョン5.1.1以降で修正がなされているようです。他に、依存しているパッケージとパスが表示されています。
基本的な対応方針は、脆弱性があるパッケージに依存しているパッケージ内にて、脆弱性が修正されたバージョンに更新することです。
参考:ところでプロトタイプ汚染攻撃とは?
初めて聞く攻撃です。
ふむふむ…… 🙁
npm lsでパッケージの依存関係をツリー表示してみる
今回の場合、npm ls dot-propしてみると、パッケージの依存関係がツリー表示されます。
└─┬ npm@6.14.7
   (中略)
      └── dot-prop@4.2.0脆弱性で警告が出ているのはここですね。
package.jsonのdependenciesを修正する
厳密には修正ではなく改変。dot-propに関する記述を探して、導入するパッケージのバージョンを指定します。
"dot-prop": "^5.1.1",脆弱性が修正されたバージョン以降が導入されるようにしておきます。
チルダとキャレットのことについては、こちらを参考にしました。いつもど忘れする。

パッケージの入れ替え
npm uninstallで一度パッケージをアンインストールします。その後、改めてインストールします。
found 0 vulnerabilities脆弱性が無事ゼロになりました。
npm ls dot-propでバージョンが変わっているかを確認します。
└─┬ npm@6.14.7
   (中略)
      └── dot-prop@5.2.0変わってますね。
まとめ
npm audit fixで自動修復できない脆弱性について、マニュアル解決をしてみました。
これまでnpm audit fixを実行し、自動修復できなければ放置していました。試しに使うケースなどでは、そのまま放置していても問題は無いかと思います。ただし、公開前提のプロジェクトなどでは、可能な限り脆弱性には対応しておきたいものです。



