はじめに
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-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9cGFja2FnZS5qc29uJTIwJUUzJTgxJUFFJUUzJTgzJTgxJUUzJTgzJUFCJUUzJTgzJTgwJTI4fiUyOSUyMCVFMyU4MSVBOCVFMyU4MiVBRCVFMyU4MyVBMyVFMyU4MyVBQyVFMyU4MyU4MyVFMyU4MyU4OCUyOCU1RSUyOSZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9MGE2YWUyODU3ZTUxZjRhNWQ5YmVhYzdkOWUyZDUwNDA&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBzb3Rhcm9rJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz01MmE4MTJiZmI4NjM3YzE4YTdhYzFmMzcwMzJiNWU3Ng&blend-x=142&blend-y=436&blend-mode=normal&txt64=aW4g44K544K_44O844OV44Kn44K544OG44Kj44OQ44Or5qCq5byP5Lya56S-&txt-width=770&txt-clip=end%2Cellipsis&txt-color=%231E2121&txt-font=Hiragino%20Sans%20W6&txt-size=36&txt-x=156&txt-y=536&s=f26974efe9e23586b11d23aafa10bda5)
パッケージの入れ替え
npm uninstall
で一度パッケージをアンインストールします。その後、改めてインストールします。
found 0 vulnerabilities
脆弱性が無事ゼロになりました。
npm ls dot-prop
でバージョンが変わっているかを確認します。
└─┬ npm@6.14.7
(中略)
└── dot-prop@5.2.0
変わってますね。
まとめ
npm audit fix
で自動修復できない脆弱性について、マニュアル解決をしてみました。
これまでnpm audit fix
を実行し、自動修復できなければ放置していました。試しに使うケースなどでは、そのまま放置していても問題は無いかと思います。ただし、公開前提のプロジェクトなどでは、可能な限り脆弱性には対応しておきたいものです。