
CVE-2026-9809 is a Stored Cross-Site Scripting (Stored XSS) vulnerability affecting Mautic 7 (versions 7.0.0 through 7.1.1).
CVE-2026-9809 は、Mautic 7(バージョン 7.0.0 から 7.1.1)に影響を与える格納型クロスサイトスクリプティング(Stored XSS)の脆弱性です。この欠陥は Projects コンポーネントに存在し、プロジェクト名がタグやホバーポップオーバーとして管理ページ(キャンペーン、メール、フォームなど)に表示される際に、適切な出力サニタイズが行われません。プロジェクトの作成または編集権限を持つ認証済みユーザーは、プロジェクト名に悪意のある HTML/JavaScript を格納できます。その後、管理者がそのプロジェクトに関連付けられたエンティティを表示し、そのタグにカーソルを合わせると、悪意のあるスクリプトが管理者のブラウザで実行されます。
| プロパティ | 値 |
|---|---|
| 製品 | Mautic |
| 影響を受けるバージョン | 7.0.0 – 7.1.1 |
| 修正バージョン | 7.1.2 |
| 影響を受けるコンポーネント | プロジェクト(タグ & ポップオーバー) |
このアプリケーションは、認証済みユーザーが指定したプロジェクト名を保存します。その後、管理ページでプロジェクトタグとポップオーバーコンテンツがレンダリングされる際、保存された値が適切な出力エンコーディングやサニタイズなしに HTML に挿入されます。
概念的には:
User creates project
│
▼
Project name stored in database
│
▼
Administrator opens Campaign / Email / Form
│
▼
Project tag & popover rendered
│
▼
Project name inserted into HTML without sanitization
│
▼
Browser executes embedded JavaScript
ブラウザはプロジェクト名をプレーンテキストとして扱うのではなく、HTML として解釈するため、埋め込まれた JavaScript が実行される可能性があります。
Attacker
│
▼
Creates a project with a malicious project name
│
▼
Payload stored in database
│
▼
Administrator views Campaign / Email / Form
│
▼
Administrator hovers over the project tag
│
▼
Popover renders unsanitized project name
│
▼
Browser executes JavaScript
│
▼
Actions performed with administrator's privileges
認証済みユーザーが、通常のテキストではなく HTML を含むプロジェクト名を作成するとします。
アプリケーションは入力時にプロジェクト名をサニタイズしないため、プロジェクトは正常に保存されます。
その後、管理者がそのプロジェクトに関連付けられたキャンペーンを開きます。管理者がプロジェクトのタグにカーソルを合わせると、アプリケーションは保存されたプロジェクト名を使用してポップオーバーを生成します。このコンテンツは適切な出力エンコーディングなしでページに挿入されるため、ブラウザはそれをプレーンテキストではなく HTML として解釈し、埋め込まれた JavaScript が管理者のセッションで実行されます。
この脆弱性は主に機密性と完全性に影響を与えます。
| メトリック | スコア |
|---|---|
| CVSS v3.1 (CNA) | 7.6(高) |
NVD は独自の CVSS 評価をまだ公開していません。現在のスコアは Mautic CNA によって提供されたものです。
注記: ベンダーは正確な脆弱性ソースコードを公開していません。以下は脆弱性パターンを説明するものです。
// Project name retrieved from the server
const projectName = response.project.name;
// Unsafe: inserts user-controlled HTML
popover.innerHTML = `
<span class="project-tag">
${projectName}
</span>
`;
innerHTML を使用すると、ブラウザは保存されたプロジェクト名を HTML として解析します。プロジェクト名に JavaScript イベントハンドラを持つ HTML 要素が含まれている場合、ブラウザはポップオーバーのレンダリング時にそれらを実行します。
const tag = document.createElement("span");
tag.className = "project-tag";
// Safe: treat input as plain text
tag.textContent = response.project.name;
popover.replaceChildren(tag);
textContent を使用することで、プロジェクト名は HTML ではなくリテラルテキストとして扱われます。HTML の特殊文字はブラウザによって解釈されずに表示されるため、埋め込まれたスクリプトの実行を防ぐことができます。HTML レンダリングが必要な場合は、開発者は挿入前に十分に保守された HTML サニタイザーを使用して信頼できないコンテンツをサニタイズする必要があります。