
CVE-2023-29689 के लिए एक ड्रॉप-इन फिक्स - PyroCMS में SSTI, एक कस्टम Twig Sandbox कार्यान्वयन के माध्यम से
CVE-2023-29689 के लिए ड्रॉप-इन सुरक्षा सुधार - PyroCMS 3.9 में सर्वर-साइड टेम्पलेट इंजेक्शन जो रिमोट कोड निष्पादन की ओर ले जाता है।
PyroCMS एडमिन उपयोगकर्ताओं को डेटाबेस में संग्रहीत टेम्पलेट संपादित करने की अनुमति देता है। सैंडबॉक्सिंग के बिना, एडमिन एक्सेस वाले हमलावर दुर्भावनापूर्ण Twig कोड इंजेक्ट कर सकते हैं:
{{['id']|map('system')|join}}
यह मनमाने सिस्टम कमांड निष्पादित करता है। अपस्ट्रीम अनुरक्षक इसे "जैसा इरादा था वैसा काम करना" मानते हैं क्योंकि एडमिन उपयोगकर्ता विश्वसनीय होते हैं - लेकिन मल्टी-टेनेंट या एंटरप्राइज़ वातावरण में, "एडमिन" ≠ "शेल एक्सेस के साथ विश्वसनीय"।
यह पैकेज स्वचालित रूप से उपयोगकर्ता-संपादन योग्य टेम्पलेट को सैंडबॉक्स करता है जबकि वैध थीम/ऐडऑन टेम्पलेट को अप्रतिबंधित छोड़ता है। यह Twig के SourcePolicyInterface (इस पैकेज के लेखक द्वारा अपस्ट्रीम में योगदानित) का उपयोग करके चुनिंदा रूप से प्रतिबंध लागू करता है।
composer require ysaxon/pyrocms-ssti-fix
दुर्भाग्य से, PyroCMS द्वारा ऑटोडिस्कवरी को अक्षम करने के कारण, आपको सेवा प्रदाता स्वयं जोड़ना होगा।
आप ऐसा इसके साथ कर सकते हैं:
sed -i "/App\\\Providers\\\AppServiceProvider::class,/a \ YSaxon\\\PyroCmsSstiFix\\\SandboxServiceProvider::class," config/app.php
SourcePolicyInterface समर्थन के लिए)┌─────────────────────────────────────────────────────────────┐
│ Twig रेंडर अनुरोध │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ StorageSourcePolicy │
│ │
│ क्या टेम्पलेट संग्रहण पथ (डेटाबेस/उपयोगकर्ता-संपादन योग्य)? │
│ │
│ हाँ ──────────────────► सैंडबॉक्स सक्षम करें │
│ │ - अवरुद्ध: map, filter, reduce │
│ │ - अवरुद्ध: खतरनाक टैग │
│ │ - सुरक्षित संचालनों की अनुमति सूची │
│ │
│ नहीं ──────────────────► कोई सैंडबॉक्स नहीं │
│ (थीम/ऐडऑन टेम्पलेट सामान्य रूप से │
│ काम करते हैं) │
└─────────────────────────────────────────────────────────────┘
डिफ़ॉल्ट सेटिंग्स सुरक्षित हैं और अधिकांश स्थापनाओं के लिए काम करती हैं। अनुकूलित करने के लिए:
php artisan vendor:publish --tag=pyrocms-ssti-fix-config
यह config/pyrocms-ssti-fix.php बनाता है:
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],
// ... पूर्ण विकल्पों के लिए कॉन्फ़िग फ़ाइल देखें
],
];
डिफ़ॉल्ट सुरक्षा नीति सैंडबॉक्सित टेम्पलेट में इन खतरनाक सुविधाओं को अवरुद्ध करती है:
map - {{['cmd']|map('system')}} शेल कमांड निष्पादित करता हैfilter - मनमाने PHP फ़ंक्शन कॉल कर सकता हैreduce - मनमाने PHP फ़ंक्शन कॉल कर सकता हैinclude, extends, block, macro, import, embed, usesource - मनमानी फ़ाइल सामग्री पढ़ता हैinclude - अन्य टेम्पलेट शामिल करता हैtemplate_from_string - स्ट्रिंग से टेम्पलेट बनाता हैसैंडबॉक्सित टेम्पलेट में सुरक्षित संचालन उपलब्ध रहते हैं:
{# चर #}
{{ 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']) }}
यदि आपके एडमिन टेम्पलेट को वैध रूप से अतिरिक्त सुविधाओं की आवश्यकता है:
// config/pyrocms-ssti-fix.php
'policy' => [
'filters' => [
SecurityPolicyDefaults::INCLUDE_DEFAULTS,
'my_custom_filter', // विशिष्ट फ़िल्टर जोड़ें
],
'methods' => [
SecurityPolicyDefaults::INCLUDE_DEFAULTS,
'App\Models\Post' => ['getTitle', 'getSummary'],
],
],
स्थापना के बाद, सुनिश्चित करें कि शोषण अवरुद्ध है:
{{['id']|map('system')|join}}सुधार से पहले: id कमांड का आउटपुट दिखाता है (या क्रैश होता है)
सुधार के बाद: त्रुटि दिखाता है या [रेंडरिंग विफल: फ़िल्टर "map" की अनुमति नहीं है।]
पैकेज Twig नहीं ढूंढ सका। इसका सामान्यतः अर्थ है:
विवरण देखने के लिए डीबग मोड सक्षम करें:
PYROCMS_SSTI_FIX_DEBUG=true
यदि एडमिन-संपादन योग्य टेम्पलेट ऐसी सुविधाओं का उपयोग करते हैं जो अब अवरुद्ध हैं:
पैकेज सभी पथ जाँच और विधि/गुण लुकअप को कैश करता है। auto मोड में, केवल संग्रहण-पथ टेम्पलेट सैंडबॉक्स ओवरहेड वहन करते हैं।
SourcePolicyInterface योगदानकर्ताMIT लाइसेंस - LICENSE फ़ाइल देखें।