433,000サイトの77%が脆弱なJavaScriptライブラリを使用
Tim Kadlec
2017年11月21日
0 分で読めます先週、初の年次オープンソースセキュリティの現状レポートを公開しました。レポートで明らかになったことの一つは、約433,000サイトを分析した結果、その77%が既知のセキュリティ脆弱性を持つフロントエンドJavaScriptライブラリを少なくとも1つ使用していることです。この数値は3月に報告したものと一致していますが、Google ChromeのLighthouseがSnykを使って脆弱なJavaScriptライブラリを検査するようになったことで、より徹底した調査が可能になりました。
LighthouseのデータはHTTP Archiveの一環として収集されており、BigQueryを使ってクエリできます。そのため、Lighthouseの監査データを非常に大規模に調べることができます。
脆弱性のあるサイト数を調べる
BigQueryで利用できる最新のデータ(10月15日分)には、439,176件の異なるURLから収集されたデータが含まれています。Lighthouseを実行できなかったURLや、何らかの理由で監査が完了しなかったURLを除くと、クエリ対象となるサイトは418,112件です。
まず、これらのサイトのうち、既知の脆弱性があるサイトの数を調べます。レポートに対してクエリを実行すると、結果が得られます。
結果は3月に実施した小規模な調査とほぼ一致しています。サイトの77.3%(323,132件)が監査に不合格でした。つまり、サイトの77.3%に既知のセキュリティ脆弱性を持つクライアントサイドJavaScriptライブラリが少なくとも1つ含まれています。新しいHTTP Archiveサイトでは、この数値の経時変化が報告される予定です。
さらに詳しく調べて、これらのライブラリに含まれる既知の脆弱性の数を確認できます。

既知の脆弱性が1つでもあれば、複数の脆弱性を抱えている可能性が高いことが分かりました。脆弱性のあるサイトの51.8%には、既知のセキュリティ脆弱性が複数あります。大半のサイトでは脆弱性が1つか2つですが、裾野の広がりは深刻です。サイトの9.2%では、ライブラリに既知のセキュリティ脆弱性が合計4つ以上あります。
脆弱性が見つかる頻度の高いライブラリ
Lighthouseの監査データを使うと、脆弱性が見つかる頻度の高いライブラリも把握できます。
まず、脆弱かどうかにかかわらず、検出頻度の高いライブラリをクエリで確認できます。次のクエリでは、最もよく見つかるライブラリを10件取得します。
ライブラリ | 検出回数 | 採用率 |
|---|---|---|
jQuery | 344,643 | 82.4% |
jQuery UI | 83,075 | 19.9% |
Modernizr | 63,122 | 15.1% |
Bootstrap | 57,154 | 13.7% |
yepnope | 41,537 | 9.9% |
FlexSlider | 33,002 | 7.9% |
Underscore | 17,633 | 4.2% |
Google Maps | 14,312 | 3.4% |
Moment.js | 14,038 | 3.4% |
SWFObject | 13,521 | 3.2% |
予想どおり、jQueryがトップです。これは3月に確認した結果と一致しており、皆さんの予想どおりでしょう。jQueryのように広く普及したライブラリは、まだほかにありません。ただし注意点があります。現在、Reactは実際より少なく報告されています。更新された検出スクリプトがLighthouseに取り込まれると、数値は増加し(脆弱性のあるサイト全体の割合も多少増える可能性があります)。
次に、既知の脆弱性を含むことが判明したライブラリを見てみましょう。
上位のいくつかは、先ほどのリストとよく似ています。
ライブラリ | 脆弱性が見つかった回数 | 検出された当該ライブラリ全体に占める割合 |
|---|---|---|
jQuery | 318,786 | 92.5% |
jQuery UI | 74,486 | 89.7% |
Moment.js | 10,245 | 73.0% |
AngularJS | 7,609 | 84.8% |
Handlebars | 3,129 | 60.7% |
Mustache | 1,925 | 51.0% |
YUI 3 | 559 | 40.3% |
jQuery Mobile | 413 | 3.7% |
Knockout | 407 | 19.6% |
React | 181 | 10.2% |
割合を見ると、状況は楽観できません。Webで圧倒的な人気を誇るライブラリjQueryは、本番環境で使われているバージョンの92.5%に既知のセキュリティ脆弱性があります。実際、既知の脆弱性を含むことが最も多い10のライブラリのうち、6つは本番環境で使われているバージョンの過半数に脆弱性があります。
このリストにあるすべてのライブラリには、こうした脆弱性を含まないバージョンが存在するにもかかわらず、このような状況です。
ライブラリ | 既知の脆弱性がない最古のバージョン | リリース日 |
|---|---|---|
jQuery | 3.0.0 | 2016年6月 |
jQuery UI | 1.10.0 | 2013年1月 |
Moment.js | 2.15.2 | 2016年10月 |
AngularJS | 1.6.1 | 2016年12月 |
Handlebars | 4.0.0 | 2015年9月 |
Mustache | 2.2.1 | 2015年12月 |
YUI 3 | 3.10.3 | 2016年6月 |
jQuery Mobile | 1.2.0 | 2012年10月 |
Knockout | 3.0.0 | 2013年10月 |
React | 0.14.0 | 2015年10月 |
脆弱性が見つかることの多いフロントエンドライブラリは、いずれも既知の脆弱性がないバージョンがリリースされてから、すでに1年から5年が経過しています。実際には、フロントエンドのライブラリやフレームワークは、本番環境に導入された後、更新されないことがよくあります。
希望の兆し
今の状況は厳しく、否定のしようがありません。このデータは、77%のサイトすべてが悪用可能だという意味ではありません(脆弱なメソッドを回避している可能性もあります)。しかし、それはわずかな慰めにすぎません。開発者がメソッドを1回呼び出すだけで、77%のサイトが脆弱になる可能性があるのです。2017年に目の当たりにしたように、オープンソースの脆弱性は深刻に受け止める必要があります。
一方で、明るい面もあります。本番環境には数多くの脆弱性がありますが、ライブラリ自体ではすでに修正されています。主要なライブラリはいずれも、既知のセキュリティ脆弱性がないバージョンを提供しています。あとは、それらを本番環境に導入するだけです。
状況を改善するには、いくつかのことが必要です。第一に、ツールの改善と普及です。オープンソースセキュリティの現状に関する調査によると、オープンソースを使う人の38%は、パッケージを最新の状態に保つための自動化ツールをまったく使っていません。フロントエンドのJavaScript利用に絞って調べれば、導入率はさらに低いだろうと思います。
この数値は改善されるはずです。npmとYarnの改善によって、開発者にとってフロントエンドのパッケージ管理はずっと簡単になりました。堅実なパッケージ管理のワークフローと、Snykのように依存パッケージの検出、予防、修正、監視を支援するツールを組み合わせれば、Webのセキュリティ向上に大きく役立ちます。
第二に、この問題に対する一般的な認知と理解を高める必要があります。オープンソースのセキュリティ確保に伴う課題を明らかにし、改善策を見つけるために、「オープンソースセキュリティの現状」レポートを公開しました。
Lighthouse(およびSonar)に脆弱なライブラリを監査する機能があることも役立ちます。こうしたツールにより、開発者は構築するサイトの問題を簡単に見つけられます。また、HTTP ArchiveとBigQueryのおかげで、問題の広がりを把握するためのデータにも簡単にアクセスできます。
現時点のデータは心強いものではありませんが、認知度とツールの向上によって、将来的には解決できる問題です。