Skip to main content

JavaScriptフレームワークのセキュリティレポート 2019

著者
JavaScript Report Feature

2019年10月30日

0 分で読めます

SnykのJavaScriptフレームワークのセキュリティ状況レポート 2019へようこそ。

本レポートでは、AngularとReactの両方のエコシステムにおけるセキュリティの状況を検証します。どちらが本当のフレームワークかといった、両者の競争に踏み込むことを意図したものではありません。競合するフレームワークとして比較するのではなく、JavaScriptプロジェクトを構築するための有力なフロントエンドエコシステムの選択肢としてそれぞれを取り上げ、セキュリティリスクやベストプラクティス、両者の違いに焦点を当てます。

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

本レポートで取り上げる内容:

  • AngularとReact、それぞれの中核プロジェクトにおけるセキュリティ対策

  • 各エコシステムに含まれる脆弱性を詳細に調査した、両モジュールエコシステムのセキュリティ状況

  • Vue.js、Bootstrap、jQueryなど、その他の一般的なJavaScriptフロントエンドフレームワークの選択肢におけるセキュリティ対策

  • 各選択肢、特にAngularとReactの間にある、セキュリティ上の大きな違い

JavaScriptフレームワークのセキュリティレポート 2019:主なポイント

レポートの調査結果から得られた主なポイントを紹介します。

AngularとReactの中核プロジェクトのセキュリティ

AngularとReactのモジュールエコシステムのセキュリティ

🔘Angularの旧プロジェクトであるAngularJS(Angular v1.x)には、23件のセキュリティ脆弱性があります。

🔘ReactとAngularの両モジュールエコシステムでは、数百万回ダウンロードされている人気のフロントエンドライブラリコンポーネントにセキュリティ脆弱性が見つかっています。その中には、現時点で修正プログラムが提供されていないものもあります。

🔘Angularフレームワークの中核コンポーネントには、セキュリティ脆弱性は確認されませんでした。

🔘AngularとReactの両エコシステムで、フロントエンドのウェブアプリケーションで使われるクレジットカード情報、パスワードなどの機密情報を盗み取ろうとする悪意のあるモジュールが確認されています。

🔘Reactにはいくつかのセキュリティ脆弱性があり、中核ライブラリで定期的に発見され、数年ごとに公表されているようです。

🔘Next.jsフレームワークは、プロジェクトの存続期間中に発見された5件すべての脆弱性に迅速に対処し、わずか1週間で修正を提供するなど、セキュリティへの強い取り組みを示しました。

🔘Reactの中核プロジェクトの脆弱性で、公式なCVEが割り当てられているのは1件のみです。報告されたAngularの脆弱性には、CVEが割り当てられているものはありません。こうした事実は、関連するセキュリティ問題を明らかにするため、オープンソースコミュニティの活動を取り込む脆弱性データベースが必要であることを示しています。

🔘SnykはAngularとReactの中核プロジェクト全体で26件のセキュリティ脆弱性を報告していますが、npm auditのレポートではこれらを把握できません。

CVEとセキュリティ脆弱性について

本レポートで取り上げる各エコシステムのセキュリティ態勢を総合的に調査するため、関連するさまざまなパッケージで確認されたセキュリティ脆弱性などを検討します。これらの脆弱性を、既知の脆弱性の全体像に照らし合わせ、ときには比較しながら確認・分析します。

既知の脆弱性には、CVE採番機関(CNA)が管理する共通脆弱性識別子(CVE)のリストで識別番号が割り当てられています。CVEにはCVSSスコアが付与され、掲載された脆弱性の深刻度を把握できます。CVSSによる脆弱性の深刻度の評価方法について詳しくはこちらをご覧ください。

AngularとReactのセキュリティ態勢

フロントエンドエコシステムのセキュリティ

🔘Angularには、明確で実践しやすいセキュリティガイドライン、セキュリティ窓口、責任ある脆弱性開示ポリシーがあります。Reactプロジェクトには、これらがありません。

🔘jQueryは過去12か月間に1億2,000万回以上ダウンロードされました。W3Techsによると、jQueryを使用する全ウェブサイトの84%でjQuery v1.xが使われており、このバージョンには中程度の深刻度のXSS脆弱性が4件あります。実際、jQuery v3.4.0以降を使っていない場合(大多数のjQueryユーザーが該当します)、セキュリティ脆弱性を含むバージョンを利用していることになります。

🔘Angularは、HTMLアンカー(リンク)要素のURL属性など、さまざまなコンテキストでのデータサニタイズと出力エンコーディングを幅広く標準サポートしています。

🔘Bootstrapは過去12か月間に79,185,409回ダウンロードされましたが、その間、クロスサイトスクリプティング(XSS)脆弱性を7件抱えていました。このうち3件は2019年に公表されています。たとえば、注目度の高いコミュニティモジュールの

bootstrap-markdown

は、XSS脆弱性に対するセキュリティ修正もアップグレード方法もないにもかかわらず、同じ期間に30万回以上ダウンロードされています。

bootstrap-select

は200万回以上ダウンロードされており、Snykの調査チームが独自の脅威インテリジェンスシステムを活用して発見した、深刻度の高いXSS脆弱性を抱えています。

🔘Reactにはデータサニタイズの標準機能はありませんが、多くの場合、デフォルトで出力をエンコードします。refsやURL属性など、処理されないケースへの対応は開発者に委ねられています(URL属性についてはReact v16.9.0で対処されています)。

🔘Vue.jsフレームワークは過去12か月間に4,000万回以上ダウンロードされており、

Vue.jsコアでは合計4件の脆弱性

が確認されていますが、いずれも修正済みです。

🔘AngularはHTTPサービスに組み込まれたセキュリティ機能で、クロスサイトリクエストフォージェリ(CSRF)脆弱性への対策をサポートしています。Reactの開発者は、こうした問題に個別に対処する必要があります。


続けてAngularとReactのセキュリティ対決 2019を読むか、レポート全文をダウンロードしてください。

本レポートでは、各フレームワーク全体のセキュリティ、コミュニティが支えるモジュールエコシステム、およびそれぞれに伴うセキュリティリスクを検証します。こうした知見をもとに、AngularとReactのユーザーが安全なコードを実現できるよう、現場で実践されているセキュリティのベストプラクティスを示し、実用的なアドバイスを提供します。

Capture the Flagを始めよう

オンデマンドのバーチャル入門ワークショップを見て、Capture the Flagの課題の解き方を学びましょう。