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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
pyrocms-ssti-fix — إصلاح فوري لـ CVE-2023-29689 - ثغرة SSTI في PyroCMS، عبر تطبيق صندوق حماية Twig مخصص | Kitploit
أدوات/GitHubGitHub/ysaxon/pyrocms-ssti-fix
أدوات دفاعيةتحليل الثغرات الأمنيةتحليل الكوداستغلال تطبيقات الويبأمن الويبسوء التكوين
GitHubysaxon/pyrocms-ssti-fix

pyrocms-ssti-fix

إصلاح فوري لـ CVE-2023-29689 - ثغرة SSTI في PyroCMS، عبر تطبيق صندوق حماية Twig مخصص

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

الأكثر شعبية

عرض الكل →

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

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

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

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

Packagist Version

🛡️ إصلاح ثغرة SSTI في PyroCMS

إصلاح أمني فوري لـ CVE-2023-29689 - حقن القوالب من جانب الخادم (SSTI) يؤدي إلى تنفيذ الأوامر عن بعد (RCE) في PyroCMS 3.9.

المشكلة

يسمح PyroCMS للمستخدمين الإداريين بتحرير القوالب المخزنة في قاعدة البيانات. بدون آلية عزل (Sandboxing)، يمكن للمهاجمين الذين لديهم صلاحيات إدارية حقن كود Twig ضار:

root@kitploit:~
{{['id']|map('system')|join}}

يقوم هذا بتنفيذ أوامر النظام التعسفية. يعتبر المطورون الأساسيون هذا "يعمل كما هو مقصود" نظرًا لأن المستخدمين الإداريين موثوق بهم - ولكن في بيئات متعددة المستأجرين أو المؤسسات، "المسؤول" لا يعني "موثوق به مع الوصول إلى الصدفة".

الحل

تقوم هذه الحزمة تلقائيًا بعزل القوالب القابلة للتحرير من قبل المستخدم مع ترك قوالب السمات/الإضافات المشروعة دون قيود. تستخدم واجهة SourcePolicyInterface من Twig (التي ساهم بها مؤلف هذه الحزمة في المصدر الأصلي) لتطبيق القيود بشكل انتقائي.

التثبيت

root@kitploit:~
composer require ysaxon/pyrocms-ssti-fix

للأسف، نظرًا لتعطيل PyroCMS للاكتشاف التلقائي (autodiscovery) كما في هذا الالتزام، ستحتاج إلى إضافة مزود الخدمة (serviceProvider) بنفسك.

يمكنك القيام بذلك باستخدام:

root@kitploit:~
sed -i "/App\\\Providers\\\AppServiceProvider::class,/a \        YSaxon\\\PyroCmsSstiFix\\\SandboxServiceProvider::class," config/app.php

المتطلبات

  • PHP 7.4+ أو 8.0+
  • Twig 2.16+ أو 3.9+ (لدعم SourcePolicyInterface)
  • Laravel 6.0+ / PyroCMS 3.x

كيف يعمل

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│                     طلب عرض القالب (Twig Render)              │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    StorageSourcePolicy                       │
│                                                              │
│  هل القالب من مسار التخزين (قاعدة بيانات/قابل للتحرير)؟      │
│                                                              │
│     نعم ──────────────────►  تفعيل صندوق العزل               │
│      │                       - منع: map, filter, reduce     │
│      │                       - منع: الوسوم الخطرة           │
│      │                       - السماح بالعمليات الآمنة      │
│                                                              │
│     لا ───────────────────►  بدون عزل                       │
│                              (قوالب السمات/الإضافات تعمل    │
│                               بشكل طبيعي)                   │
└─────────────────────────────────────────────────────────────┘

الإعدادات (اختياري)

الإعدادات الافتراضية آمنة وتعمل مع معظم التثبيتات. للتخصيص:

root@kitploit:~
php artisan vendor:publish --tag=pyrocms-ssti-fix-config

ينشئ هذا ملف config/pyrocms-ssti-fix.php:

root@kitploit:~
return [
    // مفتاح التشغيل الرئيسي
    'enabled' => env('PYROCMS_SSTI_FIX_ENABLED', true),

    // تجاوز مسار التخزين المكتشف تلقائيًا
    'storage_path' => env('PYROCMS_SSTI_FIX_STORAGE_PATH', null),

    // تخصيص الوسوم/المرشحات/الدوال/الطرق/الخصائص المسموح بها
    'policy' => [
        'tags' => [SecurityPolicyDefaults::INCLUDE_DEFAULTS],
        'filters' => [SecurityPolicyDefaults::INCLUDE_DEFAULTS],
        // ... راجع ملف الإعدادات للخيارات الكاملة
    ],
];

ما يتم حظره

تقوم سياسة الأمان الافتراضية بحظر هذه الميزات الخطيرة في القوالب المعزولة:

المرشحات (ناقلات RCE)

  • map - {{['cmd']|map('system')}} تنفيذ أوامر الصدفة
  • filter - يمكن استدعاء دوال PHP تعسفية
  • reduce - يمكن استدعاء دوال PHP تعسفية

الوسوم (هجمات التضمين)

  • include, extends, block, macro, import, embed, use

الدوال

  • source - قراءة محتويات ملفات تعسفية
  • include - تضمين قوالب أخرى
  • template_from_string - إنشاء قوالب من سلاسل نصية

ما يُسمح به

تبقى العمليات الآمنة متاحة في القوالب المعزولة:

root@kitploit:~
{# المتغيرات #}
{{ entry.title }}
{{ user.name|upper }}

{# الحلقات والشروط #}
{% for item in items %}
    {% if item.active %}
        {{ item.name }}
    {% endif %}
{% endfor %}

{# المرشحات الآمنة #}
{{ text|escape }}
{{ date|date('Y-m-d') }}
{{ items|length }}
{{ name|lower|trim }}

{# الدوال الآمنة #}
{{ max(a, b) }}
{{ random(['red', 'blue', 'green']) }}

توسيع القائمة البيضاء

إذا كانت قوالب الإدارة تحتاج بشكل مشروع إلى ميزات إضافية:

root@kitploit:~
// config/pyrocms-ssti-fix.php
'policy' => [
    'filters' => [
        SecurityPolicyDefaults::INCLUDE_DEFAULTS,
        'my_custom_filter',  // إضافة مرشح معين
    ],
    'methods' => [
        SecurityPolicyDefaults::INCLUDE_DEFAULTS,
        'App\Models\Post' => ['getTitle', 'getSummary'],
    ],
],

اختبار الإصلاح

بعد التثبيت، تحقق من منع الاستغلال:

  1. اذهب إلى لوحة إدارة PyroCMS → المستخدمون → الأدوار
  2. عدّل حقل وصف الدور
  3. أدخل: {{['id']|map('system')|join}}
  4. احفظ وعاين

قبل الإصلاح: يظهر مخرجات أمر id (أو يتعطل) بعد الإصلاح: يظهر خطأ أو رسالة: [rendering failed: Filter "map" is not allowed.]

استكشاف الأخطاء وإصلاحها

"Twig not found in container"

لم تتمكن الحزمة من العثور على Twig. هذا يعني عادةً:

  • لم يتم تحميل PyroCMS/streams-platform بالكامل بعد
  • أنت لا تعمل في بيئة PyroCMS

قم بتمكين وضع التصحيح لرؤية التفاصيل:

root@kitploit:~
PYROCMS_SSTI_FIX_DEBUG=true

تعطل القوالب المشروعة

إذا كانت القوالب القابلة للتحرير من قبل المسؤول تستخدم ميزات أصبحت محظورة الآن:

  1. تحقق من السجلات لمعرفة الميزة التي تم حظرها
  2. أضفها إلى القائمة البيضاء في الإعدادات (إذا كانت آمنة)
  3. أو أعد بناء القالب لاستخدام الميزات المسموح بها

مخاوف الأداء

تقوم الحزمة بتخزين جميع فحوصات المسار وعمليات البحث عن الطرق/الخصائص مؤقتًا. في الوضع auto، only templates in storage-path incur sandbox overhead.

ملاحظات أمنية

  • هذه الحزمة لا تعالج المشكلة المعمارية الأساسية (عرض Twig لمدخلات المستخدم)
  • إنها تخفف من الاستغلال عن طريق تقييد ما يمكن للقوالب المعزولة فعله
  • لا يزال بإمكان المستخدمين الإداريين إنشاء قوالب مزعجة؛ لكنهم لا يستطيعون تحقيق RCE
  • فكر في تعزيزات إضافية (قواعد WAF، CSP، إلخ) للدفاع في العمق

الإسناد

  • Yaakov Saxon - مؤلف الحزمة، مساهم في SourcePolicyInterface في Twig
  • Twig PR #3893 - المساهمة في المصدر الأصلي التي تتيح العزل الانتقائي

الترخيص

رخصة MIT - راجع ملف LICENSE.

ذات صلة

  • CVE-2023-29689 - إدخال NVD
  • GHSA-w7vm-4v3j-vgpw - تنبيه GitHub
  • توثيق صندوق العزل في Twig
تنزيل الأداة