GHSA-GW32-9RMW-QWWW:Svelte SSR XSS:Textarea 陷阱
发布: (2026年1月17日 GMT+8 11:03)
2 min read
原文: Dev.to
Source: Dev.to
漏洞概述
- ID:GHSA-GW32-9RMW-QWWW
- CVSS 分数:8.4(高危)
- 发布时间:2026-01-16
- CWE:CWE-79
- 向量:CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:H/VI:L/VA:N/SC:H/SI:H/SA:N
- 攻击向量:网络
- 类型:XSS(跨站脚本)
描述
Svelte 的服务器端渲染(SSR)编译器中存在高危 XSS 漏洞。编译器在 SSR 期间未对 <textarea> 元素上 bind:value 指令的内容进行转义。由于 <textarea> 的内容是子节点而非属性,攻击者可以注入 </textarea> 以跳出标签上下文并执行任意 JavaScript。
该问题已在 Svelte 3.59.2 中修复。
受影响的版本
- Svelte ≥ 3.0.0 < 3.59.2
- 使用 SSR 模式且使用了受影响编译器的 SvelteKit 应用
修复
补丁在 SSR 时对 textarea 子节点进行转义:
@@ -149,7 +149,7 @@ export default function (node: Element, renderer: Renderer, options: RenderOptio
// value = name === 'textContent' ? x`@escape($$value)` : x`$$value`;
} else if (binding.name === 'value' && node.name === 'textarea') {
const snippet = expression.node;
- node_contents = x`${snippet} || ""`;
+ node_contents = x`@escape(${snippet} || "")`;
} else if (binding.name === 'value' && node.name === 'select') {
修复步骤
-
在
package.json中检查 Svelte 版本。 -
升级到 Svelte 3.59.2 或更高版本:
npm install svelte@latest # or yarn upgrade svelte -
验证已安装的版本:
npm list svelte -
重新构建并重新部署应用,以确保编译器生成安全的代码。
参考资料
- GitHub Advisory – GHSA‑GW32‑9RMW‑QWWW
- OSV 条目(链接)
- GHSA‑GW32‑9RMW‑QWWW 完整报告(交互式图表和利用分析)