
CVE-2026-82531 के लिए Python PoC और एक्सप्लॉइट चेन: जाली SmartyNocache मार्करों के माध्यम से Smarty टेम्पलेट कैश पॉइज़निंग, जिससे PHP कोड एक्ज़ीक्यूशन होता है, साथ में चेक, पेलोड और Docker लैब।
CVE-2026-82531 के लिए Python 3 PoC — smarty-php/smarty — extends + template cache पुनर्जनन में जाली SmartyNocache मार्करों के माध्यम से कोड इंजेक्शन (CWE-94) → कैश include() पर RCE।
| फ़ील्ड | मान |
|---|---|
| CVE | CVE-2026-82531 |
| उत्पाद | Smarty PHP टेम्पलेट इंजन |
| प्रभावित | < 4.5.8; 5.0.0 – 5.8.4 |
| ठीक किया गया | 4.5.8, 5.8.5 |
| CWE | CWE-94 — कोड जनरेशन का अनुचित नियंत्रण |
| CVSS 4.0 | 9.2 क्रिटिकल (CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N) |
| CVSS 3.1 | 8.1 उच्च |
| PoCbit कैटलॉग | https://pocbit.org/pocs/ |
| PoCbit पृष्ठ | https://pocbit.org/pocs/cve-2026-82531 |
| सत्यापन मार्कर | POCBIT-82531-OK (HTTP बॉडी में base64 कमांड आउटपुट) |
| सलाहकार | GHSA-3w63-v7pm-cq9x |
एक्सप्लॉइट फ़ोकस: poc.py exploit वार्म → कैश साफ़ → पॉइज़न (POST name=) → ट्रिगर चलाता है; check, payload, Docker lab/ (Smarty 5.8.4)। आउटपुट: hits.txt, exploited.txt।
Smarty टेम्पलेट्स को PHP में कंपाइल करता है और कैश्ड आउटपुट लिख सकता है। जब टेम्पलेट्स extends: / ब्लॉक इनहेरिटेंस का उपयोग करते हैं, तो नया PHP वर्कर डिस्क से कंपाइल की गई फ़ाइलें लोड करने के बाद शीर्ष-स्तरीय कंपाइल किया गया फ़ंक्शन nocache_hash को अनसेट छोड़ सकता है।
कैश पुनर्जनन के दौरान, Smarty_Internal_Runtime_UpdateCache एक regex बनाता है जो "nocache" क्षेत्रों को विभाजित करता है। null हैश एक खाली regex विकल्प उत्पन्न करता है, इसलिए हमलावर-नियंत्रित assign() डेटा जाली बना सकता है:
/*%%SmartyNocache:%%*/ <?php ... ?> /*/%%SmartyNocache:%%*/
वह ब्लॉक जनरेट किए गए कैश PHP फ़ाइल में शब्दशः कॉपी किया जाता है (सामान्य PHP-टैग न्यूट्रलाइज़ेशन छोड़ दिया जाता है)। अगला अनुरोध जो कैश फ़ाइल को शामिल करता है, इंजेक्ट किए गए PHP को निष्पादित करता है → रिमोट कोड एक्ज़ीक्यूशन।
exploit सबकमांड)| चरण | क्रिया |
|---|---|
| 1 वार्म | सौम्य name=world → कंपाइल + प्रारंभिक कैश |
| 2 क्लियर | केवल कैश फ़ाइलें हटाएँ (कंपाइल किए गए टेम्पलेट बने रहते हैं) — लैब ?lab_clear_cache=1 उजागर करता है |
| 3 पॉइज़न | name=<forged SmartyNocache + PHP shell_exec> → ज़हरीला कैश लिखा गया |
| 4 ट्रिगर | सौम्य name=benign → include() इंजेक्ट किया गया PHP चलाता है; बॉडी में POCBIT-82531-OK:<base64> शामिल है |
वास्तविक लक्ष्यों के लिए आवश्यक है: कैशिंग चालू, extends टेम्पलेट्स, उपयोगकर्ता-नियंत्रित असाइन, कैश मिस जबकि कंपाइल डिर पॉप्युलेटेड हो (TTL, रीस्टार्ट, या एडमिन फ्लश)।
Smarty extends: / विरासत + कैश का उपयोग करने वाले अनुप्रयोगों में, जब nocache_hash null होता है, तो हमलावर द्वारा assign किया गया नकली SmartyNocache ब्लॉक कैश PHP फ़ाइल में कच्चे PHP के रूप में लिखा जाता है; अगले अनुरोध में include → RCE। PoCbit पैकेज: Docker लैब + exploit पूरी श्रृंखला।
cd CVE-2026-82531
pip install -r requirements.txt
docker compose up --build -d
python poc.py check http://127.0.0.1:8088
python poc.py exploit --url http://127.0.0.1:8088 -c "id"
python poc.py exploit -i targets.example.txt -w 10 -c id
python poc.py payload -c "id"
पैचिंग के बाद: सभी टेम्पलेट कैश फ़ाइलें हटाएँ/पुनः जनरेट करें।
केवल अधिकृत सुरक्षा अनुसंधान और उन सिस्टमों पर जिनके आप स्वामी हैं या जिनका परीक्षण करने की आपको अनुमति है।
NocacheHashInjectionTest.php (Smarty 5.8.5)CVE-2026-82531 — Smarty <4.5.8 / 5.x<5.8.5 cache-poisoning RCE (CWE-94, CVSS 4.0 9.2 AT:P). PoCbit PoC: extends+inheritance null nocache_hash → forged SmartyNocache marker in assign() → PHP in cache include. check/exploit/payload, Docker lab 5.8.4, hits.txt & exploited.txt. Fix 4.5.8 / 5.8.5. Marker POCBIT-82531-OK. https://pocbit.org/pocs/cve-2026-82531