Skip to main content

Angular vs React:2019年セキュリティ対決

著者
JavaScript Report feature

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 v1.xのダウンロード数が約150万~200万件で推移し、新しいバージョンのダウンロード数が2018年6月から2019年7月にかけて300万件から530万件に増加していることを示す折れ線グラフ。

上のグラフは、ほかのAngularの選択肢と比べてAngular 1.xがいかに人気かを示しています。Angular 2.0以降のバージョンは黄色の線でまとめて表示されています。グラフからわかるように、Angular v1.xだけで、これまでのAngularの新旧すべてのダウンロード数の約3分の1(正確には28%)を占めています。

Angular 1.xが今も使われ続けているのは、中規模から大規模の企業が保守を続けているレガシーアプリケーションがあるためだと考えられます。こうした組織では、技術の変更や移行に多大なコストがかかります。一方で、アプリケーションは定期的に保守し、リリースし続ける必要があります。

この想定は、Angularフレームワークのようなオープンソースコンポーネントについて、古いバージョンも含めてセキュリティ脆弱性を追跡することが極めて重要であると、いっそう強く示しています。本番環境にデプロイされたアプリケーションで特定された脆弱性に迅速に対処し、時間の経過とともに企業のセキュリティ態勢が悪化しないようにするためです。

こうした点を踏まえて調査した結果、Angular v1.xの6つのリリースブランチにわたり、合計19件の脆弱性が見つかりました。以下のグラフに、マイナーバージョンごとの内訳を示します。

バージョン別のAngular 1.xの脆弱性を示す棒グラフ:1.1は1件、1.2は4件、1.3は3件、1.4は1件、1.5は7件、1.6は3件。

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だけに頼ると、開発者に誤った安心感を与えるおそれがあります。

npmがangular@1.2.32をインストールし、1つのパッケージを監査して脆弱性が0件と表示されているターミナル。

これとは対照的に、SnykのAngular 1.x脆弱性データベースでは、たとえばAngular 1.2.32について11件のセキュリティ脆弱性が報告されています。

バージョン

公開日

ライセンス

直接的な脆弱性

angular 1.6.0-rc.1


(プレリリース)


2016年11月21日

MIT

中 3件


angular 1.6.0-rc.0


(プレリリース)


2016年10月27日


MIT


中 3件


2016年10月11日


MIT


中 6件


2016年10月11日


MIT

重大 3件
中 7件
低 1件

Angularプロジェクトに対するSnykのスキャン結果を見てみましょう。

Angularのnpm auditレポートを表示するターミナル。重大度の高いクロスサイトスクリプティングの脆弱性と、その修正方法が示されています。

これらの脆弱性は、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件だけです。

npmでReactパッケージをインストールし、29個のパッケージを監査して、脆弱性が0件と表示されたターミナル出力

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プレリリースブランチのバージョンに影響します。


デジタル版のレポート全文をダウンロードすることを強くおすすめします。また、以下の一般的なセクションはブログ記事としても公開しています。

続きを読む

blog feature ai violet
Blog

VulnBump:AIエージェントはビルドを壊さずに脆弱な依存関係を修正できるか?

VulnBumpは、実際の依存関係アップグレード307件を対象にAIエージェントをテストします。脆弱性が解消され、ビルドとテストが成功した場合にのみ、修正としてカウントされます。

blog feature snyk container custom base recommendations
Blog

Evo Agentic AppSecのご紹介:AI開発のスピードに対応するセキュリティ

AI駆動型開発のスピードに、従来のセキュリティワークフローは追いついていません。SnykのAgentic AppSecは、セキュリティエージェントが脆弱性を継続的に検出、修正、検証し、人が基準を定められるようにします。

Blog

フロンティアモデルは脆弱性を発見した。攻撃者だけがエクスプロイトチェーンを見つけた。

静的解析で欠陥は見つかりましたが、ライブ攻撃テストで侵害につながる連鎖を実証できたのは唯一でした。Evo COS、Claude Security、Claude Code Securityを比較します。