CVE-2024-9266

URLリダイレクト/オープン・リダイレクト
影響
エクスプレス
>=3.4.5 <4.0.0
エクスプレス
見つかりませんでした。
感嘆符アイコン
パッチあり
この脆弱性はHeroDevsが提供するNever-Ending Support (NES)バージョンで修正されました。

概要

Expressは最小限の柔軟なNode.jsウェブ・アプリケーション・フレームワークであり、ウェブおよびモバイル・アプリケーションのための堅牢な機能セットを提供する。

Express 3 レスポンスオブジェクトにオープンリダイレクトの脆弱性(CVE-2024-9266)が確認されました。 

OWASPによると、URLリダイレクトとも呼ばれるオープン・リダイレクトは、アプリケーションが悪意のある外部URLにつながるリンクを指定するユーザー制御入力を受け入れる場合に存在する入力検証の欠陥である。この種の脆弱性は、フィッシング攻撃や被害者を感染ページにリダイレクトするために利用される可能性があります。

この問題は、Expressのバージョンが3.4.5以上4.0.0未満の場合に発生します。

詳細

モジュール情報

脆弱性情報

このMedium-severityの脆弱性は、Expressパッケージのresponse.jsに存在する。  

Expressのレスポンスオブジェクトのlocation()メソッドは、オープンリダイレクトの影響を受けやすい:

  1. リクエストパスはダブルスラッシュ(//) で始まる
    AND
  2. リダイレクトのための相対パスは./で始まり、ユーザー制御の入力から提供される
    AND
  3. Locationヘッダは、ユーザーが制御する入力で設定されます。

location()メソッドは// というパスを抽出し、それを resolve()メソッドを使用して相対 URL の先頭に追加します。この resolve()メソッドは./を評価し、それを / として返しますこれはほとんどのブラウザで `//example.com` と等価と評価され、有効なscheme-relative-special-urlとしてヘッダに 'Location:これは有効なscheme-relative-special-urlであり、ヘッダーに'Location: ///example.com'として送られ、ユーザーを攻撃者のサイトにリダイレクトすることができます。

再現の手順

  • Expressアプリケーションのコードで、URLクエリパラメータで指定された場所にユーザーをリダイレクトするパスを作成します。 
app.get(['/'], function (req, res) { 
  const pageId = req.query.pageId;
  if (pageId && pageId[0] == '.') { 
    res.status(301).location(pageId); 
  }
  res.send('OK'); 
});

  • ブラウザで、以下のようなクエリを使ってExpressアプリケーション・ルートにアクセスする:
http://localhost:3000//?pageId=./example.com

  • ブラウザはhttps://example.com にリダイレクトするはずです。この結果は、Chrome DevToolsでブラウザのヘッダー詳細を検査することでも確認できます。

概念実証


Express 3.xのオープン・リダイレクトを再現しています

クレジット

  • マトヴェイ・マセンコ(ファインダー)

緩和

エクスプレス3はサポートが終了しており、この問題を解決するためのアップデートは行われません。

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

  • Expressの新しいバージョンへの移行
  • 独自のパッチを適用する
  • EOL後のセキュリティ・サポートには、HeroDevsのような商用サポート・パートナーを活用する。

脆弱性の詳細
身分証明書
CVE-2024-9266
影響を受けるプロジェクト
エクスプレス
影響を受けるバージョン
>=3.4.5 <4.0.0
発行日
2024年10月3日
≈ 確定日
2024年8月23日
重大性
ミディアム
カテゴリー
URLリダイレクト/オープン・リダイレクト