Featured image of post ProsemirrorToHtml Ruby库XSS漏洞深度剖析

ProsemirrorToHtml Ruby库XSS漏洞深度剖析

本文详细分析了RubyGems包prosemirror_to_html中存在的跨站脚本(XSS)漏洞。该漏洞源于对HTML属性值未进行转义,攻击者可注入恶意JavaScript代码。文章涵盖了漏洞影响、攻击向量、临时缓解措施以及修复方案。

重复公告:ProsemirrorToHtml 因未转义的HTML属性值存在跨站脚本(XSS)漏洞

安全公告ID: GHSA-vfpf-xmwh-8m65

严重等级: 高危 (CVSS评分: 7.6)

状态: 此公告已于 2025年11月10日 被撤回,因它是一份重复公告 (重复于 GHSA-52c5-vh7f-26fx)。保留此链接是为了维护外部引用。

漏洞详情

受影响的包: prosemirror_to_html (RubyGems)

受影响的版本: < 0.2.1

已修复的版本: 0.2.1

漏洞描述

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. 净化输出: 将 HTML 输出传递给净化库进行处理,例如使用 Sanitize 或 Loofah:

    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 文档,以防止恶意内容进入系统。

参考资料

安全信息摘要

  • CVSS v3.1 向量: AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:L/A:N
  • 弱点 (CWE): CWE-79 - 在网页生成过程中对输入的不恰当中和(跨站脚本)
  • 来源: etaminstudio/prosemirror_to_html
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计