Angular vs React:2019年セキュリティ対決
2019年10月30日
0 分で読めますSnykの「JavaScriptフレームワークのセキュリティ状況レポート 2019」へようこそ。
こちらからレポートをダウンロードできます。
まずは、AngularとReactのコアプロジェクトで見つかったさまざまなセキュリティ脆弱性を見ていきましょう。次に、それぞれの脆弱性の深刻度の内訳を確認し、両者の違いを検証します。最後に、両プロジェクトについて、脆弱性の公表から修正までの期間と、アップグレード版が公開されるまでの期間(修正までの時間、リリースまでの時間)をそれぞれ確認します。
Angularコアプロジェクト:セキュリティ脆弱性の概要
Angularのコアプロジェクトを調査するにあたり、AngularJSとも呼ばれるv1.xブランチのセキュリティ脆弱性を詳しく調べました。AngularJSは、現在も広く使われている古いバージョンであり、公式サポートと保守は2021年6月30日まで続きました(AngularJS 1.7 LTS)。
Angular v1.xとAngular v2.0以降をそれぞれ表すnpmパッケージ、angularと@angular/coreの月間ダウンロード数をグラフにしました。調査したデータによると、Angular v1.xは依然としてAngular市場で大きな割合を占め、全バージョンのAngularダウンロード数の28%に達しています。Angularは1.x以降、多数のメジャーバージョンをリリースしてきましたが、実際には今も毎月数百万回、この古いバージョンがダウンロードされています。

上のグラフは、ほかのAngularの選択肢と比べてAngular 1.xがいかに人気かを示しています。Angular 2.0以降のバージョンは黄色の線でまとめて表示されています。グラフからわかるように、Angular v1.xだけで、これまでのAngularの新旧すべてのダウンロード数の約3分の1(正確には28%)を占めています。
Angular 1.xが今も使われ続けているのは、中規模から大規模の企業が保守を続けているレガシーアプリケーションがあるためだと考えられます。こうした組織では、技術の変更や移行に多大なコストがかかります。一方で、アプリケーションは定期的に保守し、リリースし続ける必要があります。
この想定は、Angularフレームワークのようなオープンソースコンポーネントについて、古いバージョンも含めてセキュリティ脆弱性を追跡することが極めて重要であると、いっそう強く示しています。本番環境にデプロイされたアプリケーションで特定された脆弱性に迅速に対処し、時間の経過とともに企業のセキュリティ態勢が悪化しないようにするためです。
こうした点を踏まえて調査した結果、Angular v1.xの6つのリリースブランチにわたり、合計19件の脆弱性が見つかりました。以下のグラフに、マイナーバージョンごとの内訳を示します。

AngularとReact:セキュリティ問題の発見には優れた脆弱性データベースが不可欠
SnykはAngular v1.xのセキュリティ脆弱性を23件追跡していますが、いずれにもCVE参照番号はありません。これは、公式に認められたCVEプログラムを通じて公表されていないためです。これは必ずしもAngular側の不備というわけではなく、一般的な状況です。CVEは商用ベンダーを想定して設計されており、申請には多くの時間と専門知識が必要なため、オープンソースでは必ずしもうまく機能しません。
CVEがない脆弱性を追跡できるのは、独自の手法でオープンソースの活動を管理・追跡する専門アナリストに限られます。この選択肢を提供しているソリューションはほとんどありません。
npm auditなどのツールも追跡を行いますが、CVEのない脆弱性の多くを見逃します。たとえば、npmクライアントに標準でバンドルされているnpm auditは、Angular v1.xの23件の脆弱性もReactのすべての脆弱性も検出できません。そのため、npm auditだけに頼ると、開発者に誤った安心感を与えるおそれがあります。

これとは対照的に、SnykのAngular 1.x脆弱性データベースでは、たとえばAngular 1.2.32について11件のセキュリティ脆弱性が報告されています。
バージョン | 公開日 | ライセンス | 直接的な脆弱性 |
|
| MIT | 中 3件 |
|
|
| |
|
|
| |
|
| 重大 3件 |
Angularプロジェクトに対するSnykのスキャン結果を見てみましょう。

これらの脆弱性は、Snyk UIまたはSnyk CLIツールで報告されます。さらに、Snyk UIはGitHubなどのシステムとのインテグレーションを通じて、脆弱なパッケージをアップグレードする修正PRを開発者向けに自動作成します。
Reactも同様の状況です。npm auditは、React関連の脆弱性3件すべてを見逃します。公に知られている3件の脆弱性(reactコアライブラリに影響するものが2件、react-domコアライブラリに影響するものが1件)のうち、国家脆弱性データベース(https://nvd.nist.gov)で追跡されるCVEが割り当てられているのは、後者の1件だけです。

Reactコアプロジェクト:概要
このレポートでは、react、react-dom、prop-typesの各ライブラリを「コア」Reactモジュールとみなしました。これらは一体となって、Reactで構築されるWebアプリケーションの基盤となることが多いためです。
これらのコアモジュールでは、脆弱性が合計3件見つかりました。reactに2件、react-domに1件です。
3件はいずれもクロスサイトスクリプティング(XSS)脆弱性です。npmパッケージのReactにおける2件のXSS脆弱性はかなり古く、2013年にさかのぼる0.5.xバージョンと、2015年に公表された0.14より前のバージョンに影響します。
一方、react-domにおけるXSS脆弱性はv16.xリリースブランチに関するもので、2018年8月、約1年前に公表された比較的新しい脆弱性です。ただし、この脆弱性が発生するには、サーバーサイドレンダリングのコンテキストでreact-domライブラリを使用するなど、ほかの前提条件も必要です。それでも、不要なセキュリティリスクを避けるため、セキュリティ修正を常に最新の状態に保ち、オープンソースコンポーネントをできるだけ早くアップグレードすることをおすすめします。
注目:Preact — Reactの代替
Reactコアプロジェクトの3件の脆弱性に加えて、Preactの中程度の深刻度の信頼できないデータのデシリアライズに関するセキュリティ脆弱性も追跡しました。軽量で高速なことから、ReactよりPreactを好む開発者も多いため、詳しく調べる価値があると考えました。この中程度の深刻度のPreact脆弱性は、2019年3月と4月にリリースされた10.0.0プレリリースブランチのバージョンに影響します。
デジタル版のレポート全文をダウンロードすることを強くおすすめします。また、以下の一般的なセクションはブログ記事としても公開しています。



