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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
joomla-articles-catid — Joomla 6.1.3 - عالي - عن بُعد - ACL - POST /api/v1/content/articles يتجاهل ACL الخاص بكل فئة | Kitploit
أدوات/GitHubGitHub/abraxas/joomla-articles-catid
المصادقة والترخيصتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبأمن الويباختبار الاختراقأمن واجهات برمجة التطبيقاتمختبرات وتدريب عملي
GitHubabraxas/joomla-articles-catid

joomla-articles-catid

Joomla 6.1.3 - عالي - عن بُعد - ACL - POST /api/v1/content/articles يتجاهل ACL الخاص بكل فئة

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

الأكثر شعبية

عرض الكل →

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

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

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

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

Abraxas Labs - joomla-articles-catid

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  joomla-articles-catid

joomla-articles-catid

الفئة: صلاحية متبقية الوصول: عن بُعد

Joomla CMS 6.1.3 (0f2d4de) - Open Source Matters

المدير ArticleController::allowAdd يتحقق من com_content.category.{catid}. api/components/com_content/src/Controller/ArticlesController.php لا يحتوي على allowAdd. ثم يستدعي ApiController::add() الدالة allowAdd() بدون بيانات، لذا لا يدخل catid الخاص بـ JSON في التحقق أبدًا. الدالة الأساسية allowAdd تكون صحيحة إذا كان المستخدم قادرًا على الإنشاء في أي فئة.

مستخدم API من فئة Manager، مُمنَح core.login.api وصلاحية الإنشاء على فئة واحدة، يمكنه إرسال مقال عبر POST إلى فئة ممنوع منها في واجهة المستخدم.

المعرّفلا يوجد CVE بعد
الفئةصلاحية متبقية / تجاوز التفويض
الوصولعن بُعد (رمز API مع core.login.api)
CWECWE-863
CVSSمتوسط: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
المنتجJoomla CMS
المتأثر6.1.3 (0f2d4de4729eb951e0878fec98c7990da07915b2)، POST /api/index.php/v1/content/articles
المصادقةرمز API لـ Manager (المجموعة 6) مع core.login.api وcom_content core.manage وcore.create على فئة واحدة فقط. بدون Super User. القيمة الافتراضية لـ core.login.api هي Super User فقط.
الترخيصGNU Affero GPL v3.0
المختبر127.0.0.1 فقط

ما يمكن للمهاجم فعله

استخدام رمز API لمستخدم غير Super User يمكنه الإنشاء في فئة واحدة للنشر في فئات محظور منها. لا يصبح Super User من هذه الصلاحية المتبقية. هذا نشر غير مصرّح به، وليس استيلاءً على الموقع ولا قراءة لمقالات مخفية.

الصلاحيةالطريقة / المسارالنوعمُثبَت مختبريًا أو مُستنتَج
إنشاء مقال في فئة ممنوع منهاPOST /api/index.php/v1/content/articles مع catid الخاص بـ B في JSONسلامةمُثبَت مختبريًا. HTTP 200، #__content id=1، catid=9 (Press)، العنوان poc-art-JOOMLA-ARTICLES-CATID-WITNESS
زرع نسخة منشورة في Official notices / Press بينما المسموح فقط هو Draftsنفس POST، state=1سلامةمُثبَت مختبريًا الإنشاء في Press الممنوعة. مُستنتَج لأي أصل فئة آخر مع رفض core.create
تعديل مقال موجود عبر APIPATCH /api/index.php/v1/content/articles/{id}لا ينطبقمُستنتَج أنه مغلق لهذا Manager. الدالة الأساسية allowEdit تحتاج core.edit على المكوّن؛ قواعد com_content في المختبر تمنح core.edit لـ Author (4)، وليس Manager (6). المختبر لم ينفّذ PATCH
حذف مقال عبر APIDELETE /api/index.php/v1/content/articles/{id}لا ينطبقمُستنتَج أنه مغلق. الدالة الأساسية allowDelete تحتاج core.delete على المكوّن. المختبر لم ينفّذ DELETE
حفظ مقال في الفئة المسموح بها A من لوحة الإدارةPOST ... task=article.save مع jform[catid]=Aمقصودمُثبَت مختبريًا مفتوح كما هو مقصود. HTTP 200، غير مرفوض
حفظ مقال في الفئة الممنوعة B من لوحة الإدارةنفس المهمة، jform[catid]=Bلا ينطبقمُثبَت مختبريًا مغلق. HTTP 200 مع "not permitted" / create-not-permitted (واجهة المستخدم allowAdd على com_content.category.B)
استهداف API بـ Manager افتراضي (بدون core.login.api)Bearer token / X-Joomla-Tokenلا ينطبقمُستنتَج أنه مغلق. القيمة الافتراضية لـ core.login.api هي Super User (المجموعة 8) فقط. هذا المختبر يمنحها للمجموعة 6 أولًا
نفس الثغرة في contacts / banners / newsfeedsPOST /api/index.php/v1/contacts (وما شابهها) مع catid أجنبيسلامةمُستنتَج. تلك المتحكمات في API تفتقر أيضًا إلى allowAdd. المختبر لم يختبرها
Super User / RCE عبر المثبّتلا ينطبقلا ينطبقمغلق. Manager يبقى Manager

كيف وجدتها

ثبّتُ 6.1.3 بعد موجة JSST في 2026-07/08. Groups API تتطلب بالفعل core.admin. Media webservice تتطلب بالفعل core.edit على override. Articles API لا تزال تمر عبر ApiController وتعتبر "الإنشاء في أي فئة" كافيًا لكل catid.

public function add()
{
    if (!$this->allowAdd()) {
        throw new NotAllowed('JLIB_APPLICATION_ERROR_CREATE_RECORD_NOT_PERMITTED', 403);
    }
    $recordId = $this->save();
    $this->displayItem($recordId);
}

التحقق الأساسي:

protected function allowAdd($data = [])
{
    $user = $this->app->getIdentity();

    if (!$user->authorise('core.manage', $this->option)) {
        return false;
    }

    return $user->authorise('core.create', $this->option)
        || \count($user->getAuthorisedCategories($this->option, 'core.create'));
}

واجهة المدير تعتمد بالفعل على catid:

protected function allowAdd($data = [])
{
    $categoryId = ArrayHelper::getValue(
        $data,
        'catid',
        $this->input->getInt('filter_category_id'),
        'int'
    );

    if ($categoryId) {
        return $this->app->getIdentity()->authorise(
            'core.create',
            'com_content.category.' . $categoryId
        );
    }

    return parent::allowAdd();
}

المنعطفات الخاطئة المسجّلة بالفعل: قراءة HTTP 200 من واجهة المستخدم كإذن (رفض B هو جسم "not permitted")؛ اعتبار core.create على المكوّن هو الثغرة (Manager في المختبر لا يملكها؛ إذن فئة واحدة يكفي لعدّ getAuthorisedCategories الأساسي)؛ Manager افتراضي بدون core.login.api. مسرحية: reverse shell. الدليل هو API 200 في Press مع إذن واجهة المستخدم على Drafts ورفض واجهة المستخدم على Press.

بقايا نفس التثبيت: levels API، menu items API، media override.

المختبر

python3 joomla-articles-catid-Abraxas-Labs.py

أو

cd lab
./run.sh

الهدف فقط http://127.0.0.1:19550. الصورة joomla:6.1.3-php8.3-apache مع mariadb:11.4.

SUCCESS joomla-articles-catid api-http=200 article-id=1 catid=9 cat-a=8 cat-b=9 ui-a=200 ui-b=200 JOOMLA-ARTICLES-CATID-WITNESS

article-id هو القيمة التالية للتزايد التلقائي في #__content (1 على تثبيت 6.1.3 نظيف). ui-a / ui-b هما HTTP 200؛ رفض B هو جسم "not permitted" في واجهة المستخدم، وليس حالة 403.

الإصلاح

تجاوز allowAdd (وallowEdit) في api/components/com_content/src/Controller/ArticlesController.php بنفس طريقة ArticleController في لوحة الإدارة: التحقق من core.create على com_content.category.{catid}. مرّر JSON الطلب إلى ApiController::add() بحيث يصل catid فعليًا إلى ذلك التحقق. طبّق نفس النمط على contacts وbanners وnewsfeeds إذا بقيت تلك المتحكمات على allowAdd الافتراضية.

المراجع

تنزيل الأداة