天下漏洞,尽知其名
HIGH 重点关注

CVE-2026-97711 serialize-javascript 跨站脚本漏洞

影响攻击者可注入脚本,在页面源下执行任意 JavaScript

AI 研判

serialize-javascript 是一个将 JavaScript 值序列化为 JSON 超集(含正则与函数)的库。7.1.1 至 7.1.2 之前版本中,序列化函数值时对脚本闭合标签的过滤存在缺陷,SCRIPT_CLOSE_REGEXP 在一次匹配中可能吞掉第二个闭合标签,导致残留闭合标签提前终止 script 元素。当序列化结果被嵌入 script 元素时,剩余内容会被当作 HTML 解析,从而在页面源下触发跨站脚本。

影响范围

serialize-javascript

serialize-javascript 7.1.1 至 7.1.2 之前版本;仅函数值受影响,普通数据值与 options.isJSON 输出不受影响。

漏洞详情

漏洞类型为跨站脚本(XSS),成因是用于转义 </script> 等闭合标签的正则 SCRIPT_CLOSE_REGEXP 在处理连续闭合标签时匹配逻辑不完善,一次匹配消耗了第二个闭合标签,使输出中仍残留可用的闭合标签。攻击者若能影响被序列化的函数源码,即可构造含闭合标签的输入。当序列化结果被嵌入页面 script 元素时,残留闭合标签会提前结束脚本块,后续内容被浏览器按 HTML 解析,进而执行注入的脚本。

利用条件与风险

利用前提是攻击者能影响被序列化的函数源码,且序列化结果被嵌入 script 元素中;满足条件时可导致页面源下的 XSS,实战风险取决于具体使用场景。

修复建议

升级到 serialize-javascript 7.1.2 或更高版本;临时缓解措施为对序列化输出进行额外转义或避免将不可信函数源码序列化后嵌入 script 元素。

原始情报

Serialize JavaScript serializes JavaScript values to a superset of JSON that includes regular expressions and functions. From 7.1.1 until 7.1.2, function values serialized by serialize-javascript are not fully protected against script-closing tags in attacker-influenced function source because SCRIPT_CLOSE_REGEXP can consume a second closing tag inside one match. When the serialized function is embedded in a script element, the surviving closing tag terminates the element early and causes the remaining output to be parsed as HTML, enabling cross-site scripting in the page origin. Only function values are affected; ordinary data values and options.isJSON output are unaffected. This issue is fixed in version 7.1.2.