AngularとReactのセキュリティ脆弱性を徹底比較(2019年)
2019年10月30日
0 分で読めますSnykの「JavaScriptフレームワークのセキュリティ状況レポート 2019」へようこそ。
本セクションでは、AngularとReactについて、深刻度やCVSSスコアなどの長年にわたる推移を見ながら、セキュリティ脆弱性がもたらす影響を検証します。さらに、各フレームワークの脆弱性の修正とリリースにかかる時間を調査し、その推移を紹介します。
AngularとReact:脆弱性の深刻度を比較
ReactベースおよびAngularベースのフロントエンドプロジェクトで見つかったセキュリティ問題がもたらす全体的なリスクをさらに深く理解するために、それぞれの深刻度スコアを見てみましょう。
CVSSとは?
そのために、まずはスコアリングシステム(CVSS)を簡単に確認しましょう。ソースコードの一般的なバグに「高」や「中」などの深刻度が割り当てられるのと同様に、セキュリティバグ(セキュリティ脆弱性)にも深刻度が割り当てられ、組織にとっての潜在的なリスクの判断に役立てられます。
セキュリティ脆弱性の深刻度は、Common Vulnerability Scoring System(CVSS)によって評価されます。これはFIRST組織が事実上の標準として採用しており、Common Vulnerabilities and Exposures(一般にCVEと呼ばれる脆弱性情報)のスコアリングに広く使用されています。
脆弱性を簡単に比較できるよう、CVSSでは数値スコアを範囲に分け、それぞれの範囲に深刻度を割り当てています。
CVSSの詳細と課題については、https://snyk.io/blog/scoring-security-vulnerabilities-101-introducing-cvss-for-cve/をご覧ください。
本レポートでは、次の表に示すCVSS v2のスコアリングを使用しています。
深刻度 | スコア |
|---|---|
0.1 - 3.9 | 低 |
4.0 - 6.9 | 中 |
7.0 - 10.00 | 高 |
AngularとReact:CVSSの結果
Reactのコアパッケージで発見された脆弱性はごくわずかですが、いずれもクロスサイトスクリプティング(XSS)で、数年おきに継続して公開されています。CVSSスコアは6.5~7.1で、つまり、すべて深刻度が「中」から「高」の脆弱性です。
次の図は、Reactコアプロジェクトの脆弱性の深刻度を時系列で示しています。

Angular v1.xのセキュリティ脆弱性を見ると、Angular v1.5で最も多く、合計7件(深刻度「高」が3件、「中」が4件)確認されています。幸いなことに、バージョンが成熟するにつれて、深刻度と件数の両方が減少しています。2019年には、どのAngularバージョンでも新たに公開された脆弱性は確認されていません。
次の図は、Angular v1.xの脆弱性件数を深刻度別、年別に示しています。

Angular 1.xの全バージョンで公開された脆弱性の種類は多様ではなく、それ自体は大きな懸念ではありません。むしろ、セキュリティリスクは別の側面に現れています。特に注目すべきなのは、バージョンをまたいで繰り返し公開されている、最も一般的な脆弱性の深刻度です。実際、クロスサイトスクリプティング(XSS)は、フロントエンド全般にとって大きなセキュリティ上の懸念事項です。Angularも例外ではありません。今回のデータでは、Angular 1.xの各バージョンでXSS脆弱性が合計10件見つかりました。

修正までの時間、リリースまでの時間
オープンソースプロジェクトのセキュリティ態勢を評価するうえで重要なのは、メンテナーやコントリビューターがセキュリティ脆弱性に迅速に対応して修正し、ユーザー向けにリリースを公開できるかどうかです。AngularとReactのコアプロジェクトについて、すでに対処された既知の脆弱性の履歴を追跡し、これらの指標を調査しました。
まずAngular v1.xを見てみましょう。次の図は期間の昇順で並んでおり、AngularJSで最初の脆弱性が報告された2013年6月から2018年6月までを対象としています。脆弱性がプロジェクトに公に報告されてから修正されるまでの日数と、ユーザーがアップグレードできるよう、修正を含むバージョンがチームからリリースされるまでの日数を示しています。修正までの時間が短ければ、開発チームがセキュリティ報告に迅速に対応できたことを示します。リリースまでの時間が短ければ、ユーザーがアップグレードできる正式な修正版をチームが速やかに提供できたことを示します。

ご覧のとおり、Angularで最初に報告された脆弱性は、コードリポジトリでは1日以内に修正されました。しかし、その修正がユーザー向けの正式リリースとして公開されるまでには74日かかりました。
Angular v1.xのリリースでは、セキュリティ脆弱性の修正に平均7.47日、セキュリティ修正を含むリリースの公開に平均20.5日かかりました。
前ページのデータには、例外が1件あります。JSONPコールバック攻撃の脆弱性で、実際の修正による解決までに570日かかり、ソースコードリポジトリに修正がコミットされてから正式リリースされるまでに64日かかりました。
Reactの脆弱性は大幅に少なく、コアプロジェクトに影響するセキュリティ脆弱性はわずか3件です。そのうち2件はReactチーム内で報告、対処されているため、修正までの時間は0日で、正式リリースの公開には1日しかかかっていません。3件目は、React v0.4およびv0.5にさかのぼるクロスサイトスクリプティング(XSS)の脆弱性です。修正までにかなりの時間(176日)を要し、その後、セキュリティ修正版のリリースまでさらに27日かかりました。
デジタル版のレポート全文をダウンロードすることを強くおすすめします。また、以下の一般向けセクションはブログ記事としても公開しています。
