CVE-2026-33916Handlebars.js 在 4.0.0 至 4.7.8 版本中存在一个安全漏洞。该漏洞源于运行时的 `resolvePartial()` 函数在解析部分名称时,未对原型链遍历进行防护。攻击者可以通过污染 `Object.prototype`,将恶意字符串注入到模板渲染中。由于渲染过程中未进行 HTML 转义,这可能导致反射型或存储型跨站脚本攻击 (XSS)。该问题在 4.7.9 版本中已修复。
该漏洞的核心在于原型污染。在 Handlebars 的模板渲染过程中,当调用 `resolvePartial()` 时,它会在 `options.partials` 上执行普通的属性查找。如果攻击者能够污染 `Object.prototype`(例如通过其他库的不安全合并操作),并在原型上设置一个与模板中部分引用同名的属性,那么 `resolvePartial()` 就会读取到这个被污染的值。由于 Handlebars 在渲染这个“部分”时没有进行 HTML 转义,如果该值包含恶意 JavaScript 代码,它将被直接插入到最终的 HTML 页面中并执行,从而导致 XSS 攻击。攻击者无需认证,但需要诱导用户交互(UI:R)来触发恶意渲染。