استغلال إثبات المفهوم للثغرة CVE-2026-44011: تنفيذ التعليمات عن بُعد في Craft CMS باستخدام مستخدم مُصادَق عليه.
للاختبار المصرح به فقط.
تسرد نشرة Craft CMS الأمنية الإصدارات >=4.0.0, <4.17.12 و >=5.0.0, <5.9.18 كإصدارات متأثرة، وتنسب الفضل إلى precicom-vincent-tl كمكتشف الثغرة.
python -m pip install -r requirements.txt
python cve-2026-44011.py -b 'https://example.com' -u '<username' -p '<password>' -c '<command>'
الوسائط المطلوبة:
-b, --base-url: عنوان URL الخاص بـ Craft، بما في ذلك http:// أو https://.-u, --username: اسم مستخدم لوحة التحكم.-p, --password: كلمة مرور لوحة التحكم.-c, --command: الأمر المراد تنفيذه والتقاط مخرجاته.الوسائط الاختيارية:
-P, --cp-path: مسار لوحة التحكم (الافتراضي: /admin).-s, --site-id: معرّف الموقع (الافتراضي: 1).-e, --element-type: نوع العنصر (الافتراضي: craft\elements\Category).-f, --csrf-field: اسم حقل CSRF لتسجيل الدخول (الافتراضي: CRAFT_CSRF_TOKEN).-t, --timeout: مهلة الطلب والاستدعاء بالثواني (الافتراضي: 15).-F, --force: المتابعة عندما يكون إصدار Craft غير متاح أو خارج النطاقات المذكورة في النشرة.-H, --callback-host: العنوان الذي يمكن للهدف الوصول إليه (يُستنتج العنوان المحلي افتراضيًا؛ تجاوزه عند العمل خلف نقطة عبور).--listen-port: منفذ الاستماع (الافتراضي: منفذ حر يختاره نظام التشغيل؛ عيّن منفذًا ثابتًا لإعادة التوجيه).في إجراء البحث المصاب بالثغرة، ينتقل condition من جسم طلب POST إلى إنشاء الكائن دون تنقية.
$conditionConfig = $this->request->getBodyParam('condition');
$condition = Craft::$app->getConditions()->createCondition($conditionConfig);
تقوم ElementCondition::setFieldLayouts() ببناء تخطيط من كل مصفوفة مُمرَّرة.
if (is_array($fieldLayout)) {
$fieldLayout['type'] = $this->elementType;
return $fieldsService->createLayout($fieldLayout);
}
تربط حمولة النشرة الأمنية سلوك AttributeTypecastBehavior الخاص بـ Yii مع مفتاح as وتربط حدثًا بـ on *. يصل السلوك إلى Psy\Readline\Hoa\ConsoleProcessus::execute عبر تحويل النوع القابل للاستدعاء في Yii.
condition.fieldLayouts[]
-> FieldLayout behavior + event
-> AttributeTypecastBehavior::typecastValue()
-> call_user_func()
-> ConsoleProcessus::execute()
يطبّق المتحكم المُصلَّح الدالة Component::cleanseConfig() على الشرط قبل إنشاء الكائن.
ConsoleProcessus::execute() من Psy بتهريب محارف shell الوصفية افتراضيًا. يقدّم الـ PoC سكربتًا مؤقتًا لتشغيل -c، ويستقبل مخرجاته على مستمع HTTP مدمج، ثم يوقف المستمع بعد ذلك. استخدم -H إذا تعذّر على الهدف الوصول إلى العنوان المُستنتج.sh و curl و mktemp على الهدف.python -m unittest discover -s tests -v.