CVE-2026-33939Handlebars 是一个流行的语义模板库。在 4.0.0 至 4.7.8 版本中存在一个拒绝服务漏洞。当模板包含引用未注册装饰器的语法(例如 `{{*n}}`)时,编译后的模板会在运行时尝试将 `undefined` 作为函数调用,导致抛出 `TypeError`。如果应用程序在编译用户提供的模板时未使用 `try/catch` 进行包裹,该异常会导致 Node.js 进程崩溃,从而引发单请求拒绝服务攻击。
该漏洞的根源在于 Handlebars 对装饰器的解析机制。当模板解析器遇到 `{{*...}}` 语法时,它会尝试在装饰器集合中查找对应的处理函数。如果该装饰器未注册,`lookupProperty` 返回 `undefined`。由于代码逻辑缺陷,运行时环境未对返回值进行类型检查,直接尝试执行该 `undefined` 值,从而触发 `TypeError: ... is not a function`。在 Node.js 事件循环中,未被捕获的异常会导致进程立即终止。攻击者无需认证即可通过向端点发送包含恶意装饰器语法的模板数据来利用此漏洞,造成服务不可用。