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') {

修复步骤

  1. package.json 中检查 Svelte 版本。

  2. 升级到 Svelte 3.59.2 或更高版本:

    npm install svelte@latest
    # or
    yarn upgrade svelte
  3. 验证已安装的版本:

    npm list svelte
  4. 重新构建并重新部署应用,以确保编译器生成安全的代码。

参考资料

Back to Blog

相关文章

阅读更多 »