ProseMirror转换工具中的跨站脚本漏洞:未转义HTML属性值引发安全风险

本文详细分析了Ruby库prosemirror_to_html中存在的跨站脚本(XSS)安全漏洞。该漏洞因未对HTML属性值进行转义,攻击者可注入恶意JavaScript代码。文章涵盖了影响范围、攻击向量、修复方案及临时缓解措施,为开发者提供了完整的安全应对指南。

Duplicate Advisory: ProsemirrorToHtml存在因未转义HTML属性值导致的跨站脚本(XSS)漏洞 · GHSA-vfpf-xmwh-8m65 · GitHub Advisory Database

严重性:高

GitHub 已审核 发布时间: 2025年11月7日 · 更新于: 2025年11月10日

已撤回 此公告于2025年11月10日被撤回。

漏洞详情

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

描述

重复公告 此公告已被撤回,因为它是 GHSA-52c5-vh7f-26fx 的重复版本。保留此链接是为了保存外部引用。

原始描述 影响 prosemirror_to_html gem 由于恶意HTML属性值而容易受到跨站脚本(XSS)攻击。虽然标签内容已正确转义,但属性值没有转义,这允许攻击者注入任意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 属性值进行转义,以防止注入攻击。

变通方案 在获得已修复的版本之前,用户可以实施以下一种或多种缓解措施:

  • 清理输出: 使用 Sanitize 或 Loofah 等清理库对 HTML 输出进行清理:
    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 文档,以防止恶意内容进入系统。

参考

  • 漏洞代码:链接
  • OWASP XSS 预防备忘单

参考链接

严重性

CVSS 总体评分:7.6/10

CVSS v3 基础指标

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

CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:L/A:N

弱点 CWE-79 Web页面生成过程中对输入的不当中和(‘跨站脚本’) 产品未能在将用户可控的输入放入用作网页并提供给其他用户的输出之前,对其进行适当中和或其中和方式不正确。在 MITRE 上了解更多信息。

CVE ID: 无已知 CVE GHSA ID: GHSA-vfpf-xmwh-8m65

源代码: etaminstudio/prosemirror_to_html

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