はじめに
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
を実行し、自動修復できなければ放置していました。試しに使うケースなどでは、そのまま放置していても問題は無いかと思います。ただし、公開前提のプロジェクトなどでは、可能な限り脆弱性には対応しておきたいものです。