漏洞概述 | |||
漏洞名称 | Handlebars.js validateAstNode 原型链绕过远程代码执行漏洞 | ||
漏洞编号 | QVD-2026-65364,CVE-2026-106446 | ||
公开时间 | 2026-10-06 | 影响量级 | 十万级 |
奇安信评级 | 高危 | CVSS 3.1分数 | 9.8 |
威胁类型 | 代码执行 | 利用可能性 | 高 |
POC状态 | 已公开 | 在野利用状态 | 未发现 |
EXP状态 | 已公开 | 技术细节状态 | 已公开 |
危害描述:攻击者无需认证即可绕过上游安全校验后在渲染进程中执行任意命令,导致服务器失陷;容器场景可导致容器被完全控制。 | |||
01
漏洞详情
>>>>
影响组件
Handlebars 是一款广泛使用的开源 JavaScript 语义模板引擎,支持服务端(Node.js)与浏览器端渲染,被大量 Web 应用、报表 / 邮件 / 通知模板系统所引用。
>>>>
漏洞描述
近日,奇安信CERT监测到Handlebars.js validateAstNode 原型链绕过远程代码执行漏洞(CVE-2026-106446),该漏洞源于4.7.9 为修复 CVE-2026-33937(AST 类型混淆导致 JavaScript 注入)而引入 validateAstNode。但该校验器仅遍历节点的自有可枚举属性(`Object.keys`),而代码生成器使用普通属性访问,会沿原型链读取字段。攻击者将整个恶意 Program AST 挂载到传入 compile() 的对象的原型上,即可令校验器看到“空对象”而跳过,编译器却照常读取并执行恶意字段。目前该漏洞PoC与技术细节已公开。鉴于该漏洞影响范围较大,建议客户尽快做好自查及防护。
>>>>
利用条件
目标应用将攻击者可控对象经 Object.assign / Object.create / 深合并后传入 Handlebars.compile() / precompile()。
02
影响范围
>>>>
影响版本
4.0.0 <= handlebars.js <= 4.7.9
Handlebars.js <= 4.7.8 受 CVE-2026-33937 直接形态影响
>>>>
其他受影响组件
存在 Object.assign({}, userJson)、Object.create(userObj)、lodash.merge / defaultsDeep 等合并用户输入后再 compile 的应用。
03
复现情况
目前,奇安信CERT已成功复现Handlebars.js validateAstNode 原型链绕过远程代码执行漏洞(CVE-2026-106446),截图如下:

04
处置建议
>>>>
安全更新
目前官方已有可更新版本,建议受影响用户升级至最新版本:
Handlebars.js >= 4.7.10
官方下载地址:
https://github.com/handlebars-lang/handlebars.js/releases/tag/v4.7.10
临时缓解措施:
1. 入口拒绝非字符串;
2. 上游修复方向:在 validateAstNode 中拒绝原型非 Object.prototype / null 的节点,使“校验遍历”与“编译器读取”一致:
3. 避免原型污染:禁止对用户 JSON 使用 Object.assign / 深合并;JSON.parse 结果直接传递前做白名单校验。
4. 架构措施:使用 handlebars/runtime + 预编译产物,移除运行时 compile。
05
参考资料
[1]https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-8r5x-fm3f-whwj
声明:本文来自奇安信 CERT,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。