CVE-2026-44011 का PoC: प्रमाणित उपयोगकर्ता के साथ Craft CMS RCE।
केवल अधिकृत परीक्षण के लिए।
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: Craft URL, जिसमें http:// या https:// शामिल है।-u, --username: कंट्रोल-पैनल उपयोगकर्ता नाम।-p, --password: कंट्रोल-पैनल पासवर्ड।-c, --command: निष्पादित करने और आउटपुट कैप्चर करने के लिए कमांड।वैकल्पिक तर्क:
-P, --cp-path: कंट्रोल-पैनल पथ (डिफ़ॉल्ट: /admin)।-s, --site-id: साइट 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: लिसनर पोर्ट (डिफ़ॉल्ट: OS-चयनित मुक्त पोर्ट; फ़ॉरवर्डिंग के लिए एक निश्चित पोर्ट सेट करें)।भेद्य सर्च एक्शन में, 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);
}
सलाहकार पेलोड Yii के AttributeTypecastBehavior को as कुंजी के साथ संलग्न करता है और on * के साथ एक इवेंट वायर करता है। यह व्यवहार Yii के कॉल करने योग्य टाइपकास्ट के माध्यम से Psy\Readline\Hoa\ConsoleProcessus::execute तक पहुँचता है।
condition.fieldLayouts[]
-> FieldLayout behavior + event
-> AttributeTypecastBehavior::typecastValue()
-> call_user_func()
-> ConsoleProcessus::execute()
ठीक किया गया कंट्रोलर ऑब्जेक्ट निर्माण से पहले कंडीशन पर Component::cleanseConfig() लागू करता है।
ConsoleProcessus::execute() डिफ़ॉल्ट रूप से शेल मेटाकैरेक्टर को एस्केप करता है। PoC -c चलाने के लिए एक अस्थायी स्क्रिप्ट परोसता है, बिल्ट-इन HTTP लिसनर पर उसका आउटपुट प्राप्त करता है, और बाद में लिसनर बंद कर देता है। यदि लक्ष्य अनुमानित पते तक नहीं पहुँच सकता तो -H का उपयोग करें।sh, curl, और mktemp की आवश्यकता होती है।python -m unittest discover -s tests -v।