CVE-2024-9506

ReDoS脆弱性
影響
Vue
>=2.0.0 <3.0.0
Vue 2
見つかりませんでした。
感嘆符アイコン
パッチあり
この脆弱性はHeroDevsが提供するNever-Ending Support (NES)バージョンで修正されました。

概要

VueはHTML、CSS、JSのフレームワークで、きめ細かな反応性を持つウェブ・アプリケーションを開発できる。

Vue 2コンパイラにReDoSの脆弱性(CVE-2024-9506)が確認されました。 

OWASPによる:正規表現サービス拒否(ReDoS)は、ほとんどの正規表現の実装が、動作が非常に遅くなる(入力サイズに指数関数的に関係する)極端な状況に達する可能性があるという事実を悪用したサービス拒否攻撃です。攻撃者は、正規表現(Regex)を使用するプログラムがこのような極端な状況に陥り、非常に長い時間ハングするように仕向けることができます。

詳細

モジュール情報

脆弱性情報 

この深刻度の低い脆弱性は、複数のVueパッケージ内のhtml-parser.ts ファイルに存在します:

  • コンパイラ-sfc
  • サーバーレンダラー
  • テンプレートコンパイラ
  • ビューテンプレートコンパイラ
  • ビューサーバーレンダラー

html-parser.tsのVueのparseHTML()関数は、以下の場合にReDoS攻撃を受ける可能性があります: 

  1. The template string contains a <script>, <style>, or <textarea> without a matching closing tag 

Within the parseHTML() function there is a regular expression (regex) to check for proper closing tags for the three tags listed above. However, due to an improperly written regex, when you pass in something like <script>some very very long text</not-script> it will trigger a ReDoS.

再現の手順

Within Vue 2 client-side application code, create a new Vue instance with a template string that includes a <script> node tag that has a different closing tag (in this case </textarea>).

new Vue({
  el: '#app',
  template: '
<div> 
   Hello, world!
   <script>${'<'.repeat(1000000)}</textarea>
</div>'
});

  • 上記のJavaScriptを読み込むindex.htmlファイルを設定し、新しく作成したVueインスタンスをmount()でマウントします。
<!DOCTYPE html>
<html>
<head>
  <title>My first Vue app</title>
</head>
<body>
  <div id="app">
    Loading..
  </div>
</body>
</html>

  • ブラウザで、Vueアプリケーションにアクセスします。
http://ローカルホスト:3000

  • ブラウザで、ReDoS脆弱性が、ページがテンプレートを解析してVueアプリケーションをマウントするまでの時間をどのように増加させることができるかを観察してください。これはReDoS脆弱性を実証しています。 

概念実証

上記と同様のコードによる完全な再現は、こちらでご覧いただけます:
Vue2 HTML Tag Mismatch ReDoS

クレジット

  • K(ファインダー)

緩和

Vue 2はサポートが終了しており、この問題に対処するためのアップデートは提供されません。

影響を受けるコンポーネントのユーザーは、以下のいずれかの緩和策を適用してください:

  • Vueの新しいバージョンに移行する。
  • EOL後のセキュリティ・サポートには、HeroDevsのような商用サポート・パートナーを活用する。
脆弱性の詳細
身分証明書
CVE-2024-9506
影響を受けるプロジェクト
Vue
影響を受けるバージョン
>=2.0.0 <3.0.0
発行日
2024年10月14日
≈ 確定日
2024年7月25日
で修正
重大性
低い
カテゴリー
ReDoS脆弱性