
Joomla 6.1.3 - عالي - عن بُعد - ACL - GET /api/v1/users/levels يكشف مستويات العرض
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · joomla-levels-api
الفئة: صلاحية متبقية الوصول: عن بُعد
Joomla CMS 6.1.3 (0f2d4de) - Open Source Matters
يتطلب مسار Administrator Users -> Viewing Access Levels امتلاك core.admin على com_users (LevelController::allowSave والحذف). خدمة Groups webservice تفعل الشيء نفسه بالفعل (GroupsController، 6.1.1). لا يحتوي LevelsController على أي تجاوز لـ allowAdd أو allowEdit أو delete، لذا يسمح ApiController بمرور core.manage بالإضافة إلى core.create.
يمكن لرمز API من فئة Manager، مُمنوح core.login.api بدون core.admin، إنشاء مستويات وصول للعرض تحظرها واجهة المستخدم.
| المعرّف | لا يوجد CVE بعد |
| الفئة | صلاحية متبقية / تجاوز التفويض |
| الوصول | عن بُعد (رمز API مع core.login.api) |
| CWE | CWE-863 |
| CVSS | متوسط: 6.1 CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:N |
| المنتج | Joomla CMS |
| المتأثر | 6.1.3 (0f2d4de4729eb951e0878fec98c7990da07915b2) |
| المصادقة | رمز API لـ Manager (المجموعة 6) مع core.login.api وcom_users manage/create/edit. بدون core.admin. القيمة الافتراضية لـ core.login.api هي Super User فقط. |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط |
استخدام رمز API لغير Super User لتغيير أي المجموعات ترى أي الصفحات. لا يصبحون Super User من هذه الصلاحية المتبقية وحدها. هذه سيطرة على ظهور المحتوى، وليست استيلاءً على الموقع.
| الصلاحية | الطريقة / المسار | النوع | مُثبت مختبريًا أم مُستنتج |
|---|---|---|---|
| إنشاء مستوى وصول للعرض | POST /api/index.php/v1/users/levels JSON title، rules (معرّفات المجموعات) | سلامة | مُثبت مختبريًا. HTTP 200، #__viewlevels id=7، العنوان poc-level-JOOMLA-LEVELS-API-WITNESS |
| تعديل مستوى موجود (قائمة المجموعات / العنوان) | PATCH /api/index.php/v1/users/levels/{id} | سلامة | مُستنتج. نفس المتحكم، بدون allowEdit. المختبر أنشأ فقط. |
| حذف مستوى | DELETE /api/index.php/v1/users/levels/{id} | سلامة / توافر صفوف ACL | مُستنتج. نفس التجاوز المفقود. المختبر لم ينفّذ DELETE. |
| كشف مقال أو وحدة أو عنصر قائمة للأعضاء فقط | مستوى جديد أو مُعدّل تتضمن rules الخاصة به Public / Guest / Registered | استطلاع (ظهور المحتوى) | مُستنتج من #__viewlevels.rules. المختبر أدرج الصف؛ ولم يُعد ضبط ACL لمقال مباشر. |
| إخفاء صفحة عن Registered، أو إضافة مجموعة المهاجم إلى مستوى Special | نفس PATCH / الإنشاء | سلامة | مُستنتج. نفس المخزن. |
| تعديل مجموعات المستخدمين من API | POST /api/index.php/v1/users/groups | لا ينطبق | مُثبت مختبريًا مغلق. HTTP 403 (GroupsController core.admin) |
| فتح Users -> Viewing Access Levels في لوحة الإدارة | GET /administrator/index.php?option=com_users&view=levels | لا ينطبق | مُثبت مختبريًا مغلق. HTTP 403 |
| حفظ مستوى من واجهة المستخدم | POST ... task=level.save | لا ينطبق | مُثبت مختبريًا مغلق. HTTP 403 (LevelController::allowSave يتطلب core.admin) |
استهداف API بـ Manager عادي (بدون core.login.api) | Bearer token / X-Joomla-Token | لا ينطبق | مُستنتج مغلق. القيمة الافتراضية لـ core.login.api هي Super User (المجموعة 8) فقط. هذا المختبر يمنحها للمجموعة 6 أولًا. |
| Super User / تنفيذ كود عن بُعد عبر المثبّت | لا ينطبق | لا ينطبق | مغلق. Manager يبقى Manager. |
ثبّتُ إصدار joomla/joomla-cms 6.1.3 بعد موجة JSST في 2026-07/08. تتطلب Groups API بالفعل core.admin. لا تزال مستويات العرض تمر عبر ApiController (core.manage بالإضافة إلى core.create / core.edit / core.delete). المنطق الإضافي الوحيد في LevelsController هو فك ترميز JSON لـ rules في PATCH.
نظير Groups المُصلَّح:
public function allowAdd($data = [])
{
return $this->app->getIdentity()->authorise('core.admin', $this->option);
}
واجهة الإدارة:
protected function allowSave($data, $key = 'id')
{
return $this->app->getIdentity()->authorise('core.admin', $this->option)
&& parent::allowSave($data, $key);
}
المنعطفات الخاطئة المسجّلة مسبقًا: اعتبار Groups API لا يزال مفتوحًا (إنه 403)؛ استهداف API بـ Manager عادي دون منح core.login.api أولًا (الافتراضي هو Super User فقط، نفس إعداد CVE-2026-71574 / 72531 / 48904)؛ قراءة 403 من واجهة المستخدم على أنها القصة كاملة (الصلاحية المتبقية هي API). مسرحية: reverse shell. الدليل هو API 200 بالإضافة إلى Groups 403 بالإضافة إلى UI 403.
صلاحيات متبقية بنفس الإصدار: menu items API، media override، articles catid.
python3 joomla-levels-api-Abraxas-Labs.py
أو
cd lab
./run.sh
الهدف فقط http://127.0.0.1:19520. الصورة joomla:6.1.3-php8.3-apache بالإضافة إلى mariadb:11.4.
SUCCESS joomla-levels-api api-http=200 level-id=7 groups-api=403 ui-view=403 ui-save=403 JOOMLA-LEVELS-API-WITNESS
انسخ core.admin allowAdd / allowEdit / delete من GroupsController إلى LevelsController. أبقِ بوابة واجهة الإدارة.
0f2d4de4729eb951e0878fec98c7990da07915b2)LevelsController.phpcore.admin (6.1.1) · CVE-2026-71574GNU Affero GPL v3.0. انظر LICENSE. مختبر loopback فقط. بدون ضمان.