
CVE-2026-9806 هي ثغرة برمجة نصية عبر المواقع مخزنة (Stored XSS) تؤثر على CTI Transmute قبل الإصدار المصحح.
CVE-2026-9806 هي ثغرة من نوع Cross-Site Scripting المخزنة (Stored XSS) تؤثر على إصدارات CTI Transmute الأقدم من الإصدار المُصحح. يكمن الخلل في لوحة الإشعارات، حيث تُعرض رسائل الإشعارات التي تحتوي على أسماء تحويلات يتحكم فيها المستخدم في القائمة المنسدلة لجرس الإشعارات باستخدام innerHTML دون تعقيم مناسب. إذا تمكن المهاجم من إنشاء اسم تحويل يظهر في إشعار أو التأثير عليه، فيمكن تنفيذ JavaScript عشوائي في متصفح مستخدم مصادق عند فتحه لوحة الإشعارات.
الفئة: Cross-Site Scripting المخزنة (Stored XSS) CWE-79: تحييد غير صحيح للمدخلات أثناء توليد صفحة الويب (Cross-site Scripting)
تقوم لوحة الإشعارات ببناء إدخالات الإشعارات باستخدام innerHTML. تتضمن رسائل الإشعارات أسماء تحويلات يتحكم فيها المستخدم. ولأن هذه القيم تُدرج مباشرة في DOM دون ترميز HTML أو تعقيم، فإن أي HTML أو JavaScript يحتويه اسم التحويل يُفسَّر بواسطة المتصفح.
مفاهيميًا:
Attacker creates or influences a convert name
│
▼
Convert name stored in notification
│
▼
User opens notification panel
│
▼
Notification rendered using innerHTML
│
▼
Browser parses HTML
│
▼
Embedded JavaScript executes
تنتج الثغرة عن عرض مدخلات غير موثوقة كـ HTML بدلًا من عرضها كنص عادي.
Attacker
│
▼
Creates or modifies a malicious convert name
│
▼
Notification containing the convert name is generated
│
▼
Victim opens notification panel
│
▼
Notification dropdown inserts message using innerHTML
│
▼
Browser executes malicious JavaScript
│
▼
Actions performed within victim's authenticated session
افترض أنه يتم إنشاء تحويل باسم مُصمم خصيصًا يحتوي على HTML.
لاحقًا، يتلقى مستخدم مصادق آخر إشعارًا يشير إلى ذلك التحويل. وعندما ينقر المستخدم على جرس الإشعارات، يُدخل التطبيق رسالة الإشعار في الصفحة باستخدام innerHTML.
بدلًا من عرض اسم التحويل كنص، يفسره المتصفح كـ HTML وينفذ JavaScript المضمّن، مما يسمح للمهاجم بتنفيذ إجراءات داخل جلسة متصفح الضحية.
ينشئ مستخدم شرعي تحويلًا باسم:
Monthly Sales Report
يخزنه التطبيق في قاعدة البيانات.
بدلًا من ذلك، يُدخل المهاجم اسمًا يحتوي على HTML:
Quarterly Report <b>Important</b>
يخزن التطبيق:
Quarterly Report <b>Important</b>
لاحقًا، يتلقى مستخدم آخر إشعارًا مثل:
Convert "Quarterly Report <b>Important</b>" completed successfully.
إذا قام التطبيق بتنفيذ:
notification.innerHTML = response.message;
فسيعرض المتصفح:
اكتمل تحويل «Quarterly Report Important» بنجاح.
لأن يُفسَّر كـ HTML.
إذا استخدم التطبيق بدلًا من ذلك:
notification.textContent = response.message;
فسيعرض المتصفح النص الحرفي:
Convert "Quarterly Report <b>Important</b>" completed successfully.
لن يتم تفسير أي HTML.
قد يسمح الاستغلال الناجح للمهاجم بما يلي:
تؤثر الثغرة بشكل أساسي على السرية والسلامة.
| المقياس | النتيجة |
|---|---|
| CVSS v4.0 (CNA) | 6.3 (متوسطة) |
لم تقم NVD بعد بتعيين تقييم CVSS خاص بها.
ملاحظة: لم ينشر البائع كود المصدر الدقيق المعرض للثغرة. يوضح ما يلي النمط المعرض للثغرة.
// User-controlled convert name
const message = response.notificationMessage;
// Unsafe rendering
notificationDropdown.innerHTML += `
<div class="notification">
${message}
</div>
`;
يعامل innerHTML رسالة الإشعار كـ HTML. إذا كانت الرسالة تحتوي على HTML أو JavaScript مصدره اسم تحويل خبيث، فسيقوم المتصفح بتحليله وتنفيذه.
const notification = document.createElement("div");
notification.className = "notification";
// Safe rendering
notification.textContent = response.notificationMessage;
notificationDropdown.appendChild(notification);
يضمن استخدام textContent عرض رسالة الإشعار كنص عادي بدلًا من HTML. كما ورد في الإصلاح المنشور، تم إصلاح المشكلة عن طريق بناء عناصر الإشعارات عبر طرق DOM وتعيين المحتوى عبر textContent بدلًا من innerHTML، مما يمنع تنفيذ البرامج النصية المضمّنة.