npm installを行ったところ、【high severity vulnerability】というメッセージが表示。
どうやら【Prototype Pollution】の危険性があるとのことでした。
実際に解決した方法と、Prototype Pollutionについて英語記事を翻訳して解説していきます。
npm install後のhigh severity vulnerabilityの解決法
まずエラーがでた状況について。
わたしはLaravel8を使っていますが、vue.jsを使うためにnpm installを実行しました。
1 |
npm install |
すると、下記の警告が。
found 1 high severity vulnerabilityrun npm audit fix
to fix them, or npm audit
for details
英語の意味「かなり深刻な脆弱性を発見したよ。」
「修正するには npm audit fix を実行してね。詳細は npm audit を見てね。」
highが赤文字になっていて、不穏な感じ・・・
とりあえず npm audit を実行。
1 |
npm audit |
すると、次のように詳細が表示されました。
High Prototype Pollution
Package object-path
Dependency of resolve-url-loader [dev]
Path resolve-url-loader > adjust-sourcemap-loader > object-path
More info https://npmjs.com/advisories/1573
一番上の【Prototype Pollution】が原因っぽいですね。
とりあえず、「npm audit fix」を行って修正を試みることにします。
1 |
npm audit fix |
すると、結構あっさり修正できた模様。
もういちど npm auditを実行すると、次のような結果になりました。
「脆弱性はゼロだったよ」とのこと。
とりあえず、良かった。
High Prototype Pollutionの詳細と対策
解決したものの、結局これは何だったんだ。
【Prototype Pollution】でググってみると、こんな不穏なタイトルの記事が出てきました。
「プロトタイプ汚染:JavaScriptに影響を与えるキケンで過小評価されている脆弱性」
Prototype PollutionはJavaScriptの人気ライブラリのセキュリティホールを狙った攻撃。
以前からあるものの、2019年前半に物議を醸しだしていたようです。
最悪の場合、Webアプリケーションのクラッシュに至ることも。
Prototype Pollutionはどう攻撃されるか
インスタンスの __proto__ プロパティからアクセスされます。
下記のように__proto__ が含まれている場合、マージをしないようにすればOK。
1 2 3 |
var merge = function(target, source) { for(var attr in source) { if(attr === "__proto__") continue; |
Prototype Pollutionは npm パッケージを通じて入ってくるか
jQuery, lodash, hoekなど、有名なライブラリはプロトタイプ汚染に対処するため、更新されています。
また今回のように【npm-audit】を実施すれば、事前にチェックでき、ほぼ修正も可能です。
修正に時間がかかったり、更新するとプロジェクト全体に影響がある場合などは、英語ですが、下記サイトが役立つようです。
まとめ
今回のまとめLow vulnerabilityの警告がでたら npm audit で原因究明する
High Prototype Pollution は npm audit fix で修正を試みる
これで大体なおるが、この手の問題はまた起こる危険性がある
JavaScriptを使う上では、こういったセキュリティホールの問題は避けて通れないようです。
常に警戒をしておかなきゃ、ということですね。
★今回お世話になったサイトはこちら★
node_modules “What is prototype pollution and why is it such a big deal? “
The Daily Swig “Prototype pollution: The dangerous and underrated vulnerability impacting JavaScript applications“