ProseMirror to HTML 库中的XSS漏洞:未转义的HTML属性值

本文详细分析了 RubyGems 包 `prosemirror_to_html` 中存在的一个高风险跨站脚本(XSS)漏洞(CVE-2025-64501)。该漏洞源于库在将 ProseMirror 文档转换为 HTML 时,未对 HTML 属性值进行转义,导致攻击者可以注入并执行恶意 JavaScript 代码。

CVE-2025-64501:通过未转义的 HTML 属性值引发的跨站脚本(XSS)漏洞

漏洞详情

: prosemirror_to_html (RubyGems) 受影响版本: < 0.2.1 已修补版本: 0.2.1 严重等级: 高危 (CVSS 分数 7.6)

描述与影响

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. 输入验证: 如果可能,在将 ProseMirror 文档转换之前进行验证和清理,以防止恶意内容进入系统。

参考资料

  • 易受攻击的代码https://github.com/etaminstudio/prosemirror_to_html/blob/ea8beb32f6c37f29f042ba4155ccf18504da716e/lib/prosemirror_to_html.rb#L249
  • OWASP XSS 预防备忘单
  • CWE-79: 网页生成期间输入的不当中和(跨站脚本)
  • GHSA-52c5-vh7f-26fx
  • NVD 详情https://nvd.nist.gov/vuln/detail/CVE-2025-64501
  • Ruby Advisory DBhttps://github.com/rubysec/ruby-advisory-db/blob/master/gems/prosemirror_to_html/CVE-2025-64501.yml

时间线

  • 发布于 GitHub Advisory Database: 2025年11月6日
  • 已审核: 2025年11月6日
  • 发布于国家漏洞数据库 (NVD): 2025年11月10日
  • 最后更新: 2025年11月17日

CVSS v3.1 基本指标

  • 攻击向量 (AV): 网络 (N)
  • 攻击复杂度 (AC): 低 (L)
  • 所需权限 (PR): 低 (L)
  • 用户交互 (UI): 需要 (R)
  • 范围 (S): 已更改 (C)
  • 机密性 (C): 高 (H)
  • 完整性 (I): 低 (L)
  • 可用性 (A): 无 (N)

向量字符串: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:L/A:N

弱点

  • CWE-79: 在网页生成过程中对输入的不当中和(跨站脚本)。产品在将用户可控的输入放置到用作网页并提供给其他用户的输出中之前,未对其进行中和或不正确地进行了中和。

致谢

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