はじめに
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",
脆弱性が修正されたバージョン以降が導入されるようにしておきます。
チルダとキャレットのことについては、こちらを参考にしました。いつもど忘れする。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZ0eHQ9cGFja2FnZS5qc29uJTIwJUUzJTgxJUFFJUUzJTgzJTgxJUUzJTgzJUFCJUUzJTgzJTgwJTI4fiUyOSUyMCVFMyU4MSVBOCVFMyU4MiVBRCVFMyU4MyVBMyVFMyU4MyVBQyVFMyU4MyU4MyVFMyU4MyU4OCUyOCU1RSUyOSZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1jbGlwPWVsbGlwc2lzJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9YjZkODU1Zjk4NzA0NmFmZGVmNDAzOGQ1YWUyMTU2N2Y&mark-x=142&mark-y=112&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwc290YXJvayZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9OTVhOGFiMzg5MzBjNTJiOGQzZjY4NmIxYmU1OTVmYjI&blend-x=142&blend-y=491&blend-mode=normal&s=6db3acb09b1acee4b8cd175fe460ccaf)
パッケージの入れ替え
npm uninstall
で一度パッケージをアンインストールします。その後、改めてインストールします。
found 0 vulnerabilities
脆弱性が無事ゼロになりました。
npm ls dot-prop
でバージョンが変わっているかを確認します。
└─┬ npm@6.14.7
(中略)
└── dot-prop@5.2.0
変わってますね。
まとめ
npm audit fix
で自動修復できない脆弱性について、マニュアル解決をしてみました。
これまでnpm audit fix
を実行し、自動修復できなければ放置していました。試しに使うケースなどでは、そのまま放置していても問題は無いかと思います。ただし、公開前提のプロジェクトなどでは、可能な限り脆弱性には対応しておきたいものです。