未转义HTML属性值导致的跨站脚本(XSS)漏洞详解

本文详细分析了CVE-2025-64501漏洞,该漏洞存在于prosemirror_to_html RubyGem中,由于未对HTML属性值进行转义,导致跨站脚本攻击风险。文章介绍了受影响版本、攻击向量、补丁方案及临时缓解措施。

通过未转义HTML属性值导致的跨站脚本(XSS)漏洞

漏洞详情

软件包信息

  • 包名: prosemirror_to_html (RubyGems)
  • 受影响版本: < 0.2.1
  • 已修复版本: 0.2.1

严重程度

  • 等级: 高危
  • CVSS总体评分: 7.6/10
  • CVSS向量: AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:L/A:N

漏洞描述

影响

prosemirror_to_html gem 存在跨站脚本(XSS)漏洞,攻击者可通过恶意的HTML属性值进行攻击。虽然标签内容已正确转义,但属性值未被转义,这使得攻击者能够注入任意JavaScript代码。

受影响对象

  • 使用prosemirror_to_html将ProseMirror文档转换为HTML的任何应用程序
  • 处理用户生成的ProseMirror内容的应用程序风险最高
  • 查看渲染的HTML输出的最终用户可能在其浏览器中执行恶意JavaScript

攻击向量包括:

  • 使用javascript:协议的href属性:<a href="javascript:alert(document.cookie)>
  • 事件处理程序:<div onclick="maliciousCode()">
  • 图像上的onerror属性:<img src=x onerror="alert('XSS')">
  • 其他可以执行JavaScript的HTML属性

补丁和修复

补丁状态

修复程序目前正在开发中。发布后,用户应升级到0.2.1或更高版本。

修复内容: 补丁使用CGI.escapeHTML对所有HTML属性值进行转义,以防止注入攻击。

临时缓解措施

在提供修复版本之前,用户可以实施以下一种或多种缓解措施:

  1. 净化输出:通过Sanitize或Loofah等净化库传递HTML输出:

    1
    2
    
    html = ProsemirrorToHtml.render(document)
    safe_html = Sanitize.fragment(html, Sanitize::Config::RELAXED)
    
  2. 实施内容安全策略(CSP):添加严格的CSP标头以防止内联JavaScript执行:

    1
    
    Content-Security-Policy: default-src 'self'; script-src 'self'
    
  3. 输入验证:如果可能,在转换为HTML之前验证和净化ProseMirror文档,以防止恶意内容进入系统。

参考信息

相关链接

安全标识

  • CVE ID: CVE-2025-64501
  • GHSA ID: GHSA-52c5-vh7f-26fx

技术细节

弱点分类

  • CWE: CWE-79 - 在网页生成期间未正确中和输入(跨站脚本)
  • 描述: 产品在将用户可控的输入放入用作提供给其他用户的网页的输出之前,未进行中和或中和不正确。

漏洞发现时间线

  • 发布至GitHub Advisory数据库: 2025年11月6日
  • 审查: 2025年11月6日
  • 发布至国家漏洞数据库: 2025年11月10日
  • 最后更新: 2025年11月17日

贡献者

  • 修复开发者: polypixeldev
  • 报告者: Luke-Oldenburg
  • 修复审查者: Spone
  • 发现者: 9021007
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计