ProsemirrorToHtml Ruby库存在XSS漏洞:HTML属性值未经转义导致安全风险

本文详细分析了ProsemirrorToHtml Ruby库中的一个高危XSS漏洞。由于在转换ProseMirror文档为HTML时未对HTML属性值进行转义,攻击者可注入恶意JavaScript代码。文章涵盖了受影响范围、攻击向量、补丁信息及临时缓解措施。

漏洞详情

重复公告 本公告因与GHSA-52c5-vh7f-26fx重复而被撤销。保留此链接以维护外部引用。

原始描述 影响 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属性值进行转义,以防止注入攻击。

临时缓解措施 在获得修补版本之前,用户可以实施以下一种或多种缓解措施:

  • 净化输出:将HTML输出通过净化库(如Sanitize或Loofah)进行处理:
    1
    2
    
    html = ProsemirrorToHtml.render(document)
    safe_html = Sanitize.fragment(html, Sanitize::Config::RELAXED)
    
  • 实施内容安全策略(CSP):添加严格的CSP头部以防止内联JavaScript执行:
    1
    
    Content-Security-Policy: default-src 'self'; script-src 'self'
    
  • 输入验证:如果可能,在转换前验证并净化ProseMirror文档,以防止恶意内容进入系统。

参考信息

安全详情

发布时间:2025年11月7日 审核时间:2025年11月7日 撤销时间:2025年11月10日 最后更新时间:2025年11月10日

严重程度:高 CVSS总体评分:7.6/10

CVSS v3 基本指标

  • 攻击向量:网络
  • 攻击复杂度:低
  • 所需权限:低
  • 用户交互:需要
  • 范围:已更改
  • 机密性:高
  • 完整性:低
  • 可用性:无

弱点

  • CWE-79:网页生成期间输入中和不当(跨站脚本)

标识符

  • GHSA ID:GHSA-vfpf-xmwh-8m65
  • 源代码:etaminstudio/prosemirror_to_html
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计