77%のサイトで、少なくとも1つの脆弱なJavaScriptライブラリが使用されている
Tim Kadlec
2017年3月29日
0 分で読めます先日、約37%のサイトに既知の脆弱性を含むJavaScriptライブラリが少なくとも1つ存在するという調査結果が発表されました。調査結果について記事を書いた際、実態はほぼ間違いなくもっと深刻だろうと述べました。
実際、そのとおりでした。しかも、はるかに深刻です。
Alexaの上位5,000件のURLを使って独自に調査したところ、その76.6%に脆弱なライブラリが少なくとも1つ含まれていることがわかりました。調査方法が気になる方は、詳細を以下でご覧いただくか、結果まで読み飛ばしてください。
調査方法
調査を行うため、Alexaの上位5,000件のURLを取得しました。アクセス時にエラーになるURLがいくつかあったため、Alexaのリストをさらに下へたどり、正常に読み込めるページを5,000件集めました。
各URLをWebPageTestでテストしました。WebPageTestはChromeで各ページを読み込んだ後、独自のJavaScriptを実行して、いくつかのJavaScriptライブラリのバージョンを特定しました。
たとえば、使用中のjQueryのバージョンを調べるため、ページの読み込み後に次のコードを実行しました。
最初の調査では、以下の各ライブラリをチェックしました。
jQuery
Handlebars
Mustache
React
Angular
Ember
jQuery UI
YUI
Dojo
検出された各バージョンについて、Snykのオープンソース脆弱性データベースと照合し、既知の脆弱性を持つライブラリがどれほどあるかを確認しました。
目を覆いたくなる結果
先ほど述べたとおり、JavaScriptライブラリのセキュリティ状況は驚くほど悪く、取り繕いようがありません。5,000サイトのうち3,831サイト(76.6%)で、既知の脆弱性を少なくとも1つ含むJavaScriptライブラリが使われていました。

すでに高い割合が示されている中でこう言うのも奇妙ですが、最初の調査結果と同様、実態はおそらくさらに深刻です。今回調査したJavaScriptライブラリは9つです。開発者が利用できるJavaScriptフレームワークやライブラリは、数百種類にのぼります。調査対象はその中でも特に人気の高いものなので、割合が大幅に跳ね上がる可能性は低いでしょう。それでも、数ポイント上昇することはほぼ確実です。
また、今回確認したのは、クライアントサイドで使われるサードパーティ製JavaScriptライブラリの既知の脆弱性のみです。サーバーサイドでの使用状況や、独自に作成されたJavaScriptは対象外です。さらに、新たな脆弱性は毎日データベースに追加されており、まだ公表されていないものも含めれば、脆弱性はさらに存在します。
jQuery
予想どおり、今回調査したライブラリの中で最も普及していたのはjQueryです。その圧倒的な優位性は、今やよく知られています。上位5,000件のURLのうち79%でjQueryを検出しました。
jQueryは特に脆弱性の多いライブラリではありません(既知の脆弱性は5件で、いずれも後のバージョンで修正済みです)。それでも、普及率の高さゆえに、jQueryだけでかなりの問題を生み出しています。
実際、jQueryだけを確認した場合でも、75.1%のサイトで少なくとも1つの脆弱性を含むバージョンが使われていました。これは主に、本番環境で使われているjQueryライブラリの多くが非常に古いためです。本番環境で見つかったjQueryのバージョンの17.4%は、5年以上前のものでした。この結果は最初の調査ともよく一致しています。つまり、定期的に更新していないのです。

jQueryユーザーにとってさらに厄介なのは、既知の脆弱性がないのがバージョン3.0.0以降だけだという点です。多くの現行ユーザーにとって、更新はマイナーバージョンを上げるだけでは済まず、互換性を損なう変更への対応が必要になる可能性があります。検出されたjQueryライブラリの約79%は1.xでした。jQuery 3.0.0の正式版が約1年前にリリースされたにもかかわらず、3.xを使っていたサイトはわずか3.6%でした。


jQueryは並外れて普及しており、特に興味深い題材なので、来週の記事でさらに詳しく掘り下げます。
jQuery UI
普及率で次に多かったのはjQuery UIで、テストしたURLの19.3%で見つかりました。ここでも、更新版が公開されているにもかかわらず、ほとんどのユーザーが脆弱なバージョンを使っています。見つかったjQuery UIライブラリの約91%に、少なくとも1つの脆弱性がありました。

ここでも、多くは更新していないことが原因です。jQuery UIを使うサイトの21.8%は、5年以上前のバージョンを使用していました。
Handlebars
テストしたURLの3.4%でHandlebarsが検出されました。そのうち68%は脆弱なバージョンを使っていました。ここでも主な原因は、新しいバージョンへの移行の遅さです。一見すると、Handlebarsは比較的新しいバージョンが使われているように見えます。ライブラリの最新バージョン(4.0.6)は検出されませんでしたが、その1つ前のバージョン(4.0.5)が本番環境で最も多く使われており、Handlebarsの使用例の26.7%を占めていました。

しかし、リリースのペースが落ちているため(2015年11月以降にリリースされたマイナーバージョンは2つだけ)、これらのサイトは依然として約2年前のバージョンを使っています。検出されたHandlebarsのバージョン全体では、40%が3年以上前のものでした。
React、Mustache、Angular、YUI、Dojo
React(1.7%)、Mustache(1.6%)、Angular(1.3%)、YUI(0.7%)、Dojo(0.2%)は、個別の利用状況について信頼できる結論を出すには検出数が少なすぎました。しかし、まとめて見ると、脆弱なバージョンは依然として非常に多く、データ内で見つかったこれらのライブラリのバージョンの56.3%に、少なくとも1つの脆弱性がありました。
希望の持てる結論
現状は決して良好とは言えません。最初の調査結果が楽観的な数字かもしれないとは考えていましたが、77%のサイトで脆弱なライブラリが少なくとも1つ使われているとまでは予想していませんでした。
そして、はっきりさせておくと、この問題を解決する単独の手段はありません。まず必要なのは、セキュリティ意識の向上、より優れたツール、そしてフロントエンドのJavaScript依存関係をより簡単に管理する方法を組み合わせることです(パッケージマネージャーの導入は、バックエンド開発ほど進んでいません)。
しかし、以前にもお伝えしたとおり、私たちは希望を持ち続けています。サードパーティ製JavaScriptのセキュリティ確保は解決可能な問題です。当初考えていたより少し険しい道のりになるだけです。
このような報告内容は機密性が高いため、生データは公開しません。公開すれば、攻撃対象となりうるサイトのリストを事実上、提供することになってしまうからです。ただし、ウェブサイトの所有者の方はお問い合わせいただければ、ご自身のサイトが調査対象に含まれていたか、また脆弱性が見つかったかを確認できます。npmパッケージをお使いの場合は、Snykでアプリケーションをテストすることで、潜在的なセキュリティ上の問題を発見できる可能性があります。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップを視聴して、CTFの課題の解き方を学びましょう。


