
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 هي ثغرة من نوع البرمجة النصية عبر المواقع المخزّنة (Stored XSS) تؤثر على Mautic 7 (الإصدارات من 7.0.0 إلى 7.1.1). يكمن الخلل في مكوّن المشاريع، حيث تُعرض أسماء المشاريع كوسوم ونوافذ منبثقة عند التمرير في الصفحات الإدارية (مثل الحملات والبريد الإلكتروني والنماذج) دون تعقيم مناسب للمخرجات. يمكن لمستخدم موثّق يمتلك صلاحية إنشاء المشاريع أو تعديلها تخزين 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؛ النتيجة الحالية مقدمة من CNA الخاص بـ Mautic.
ملاحظة: لم ينشر البائع الكود المصدري المصاب الدقيق. يوضح ما يلي نمط الثغرة.
// 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. إذا كان اسم المشروع يحتوي على عناصر HTML مع معالجات أحداث JavaScript، فسينفذها المتصفح عند عرض النافذة المنبثقة.
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 جيدة الصيانة قبل إدراجه.