ProseMirrorToHtml 库存在XSS漏洞:HTML属性值未转义带来安全风险

这篇文章详细披露了Ruby gem prosemirror_to_html中的一个高风险跨站脚本漏洞。攻击者可利用未转义的HTML属性值注入恶意JavaScript,影响处理用户生成内容的应用程序。文章提供了漏洞影响范围、攻击向量、补丁版本和临时缓解措施。

ProseMirrorToHtml 存在通过未转义的HTML属性值导致的跨站脚本漏洞

漏洞详情

: bundler / prosemirror_to_html (RubyGems)

受影响版本: < 0.2.1 已修复版本: 0.2.1

影响

prosemirror_to_html gem 存在跨站脚本漏洞,攻击者可通过恶意的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 标头以防止内联 JavaScript 执行:
    1
    
    Content-Security-Policy: default-src 'self'; script-src 'self'
    
  • 输入验证:如果可能,在转换之前验证和清理 ProseMirror 文档,以防止恶意内容进入系统。

参考

严重性

高危

CVSS 总体评分: 8.7 / 10

CVSS v4 基础指标: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:L/SC:N/SI:N/SA:N

弱点

CWE-79: 在网页生成过程中对输入的不当中和(‘跨站脚本’)

GHSA ID: GHSA-4249-gjr8-jpq3

CVE ID: 无已知 CVE

源代码: etaminstudio/prosemirror_to_html

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计