ProsemirrorToHtml库XSS漏洞:未转义的HTML属性值引发跨站脚本攻击

本文详细分析了RubyGems库prosemirror_to_html中存在的一个高危跨站脚本漏洞。该漏洞源于转换ProseMirror文档为HTML时未对属性值进行转义,攻击者可注入恶意JavaScript代码。文章介绍了漏洞影响范围、攻击向量、修复版本及临时缓解措施。

ProsemirrorToHtml库存在跨站脚本漏洞(XSS):未转义的HTML属性值

漏洞详情

GHSA ID: GHSA-4249-gjr8-jpq3

影响包: prosemirror_to_html (RubyGems)

受影响版本: < 0.2.1

已修复版本: 0.2.1

严重程度: 高危 (CVSS评分 8.7)

发布日期: 2025年11月13日 更新日期: 2025年11月13日

漏洞描述

影响

prosemirror_to_html gem 存在跨站脚本攻击(XSS)漏洞,攻击可通过恶意的HTML属性值进行。虽然标签内容已被正确转义,但属性值未被转义,这使得攻击者能够注入任意JavaScript代码。

受影响对象包括

  • 任何使用 prosemirror_to_html 将ProseMirror文档转换为HTML的应用程序
  • 处理用户生成的ProseMirror内容的应用程序风险最高
  • 查看渲染后HTML输出的最终用户可能在其浏览器中执行恶意JavaScript

攻击向量包括

  • 带有 javascript: 协议的 href 属性:
    1
    
    <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输出通过净化库处理,如 SanitizeLoofah

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

技术参考

弱点分类

CWE标识符: CWE-79

弱点描述: 在网页生成过程中对输入的不当中和(跨站脚本) 该产品在将用户可控的输入放置到用作网页并提供给其他用户的输出之前,未进行中和或错误地中和。

CVSS v4.0指标详情

基本向量: 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

可利用性指标

  • 攻击向量(AV): 网络
  • 攻击复杂度(AC): 低
  • 攻击要求(AT): 无
  • 所需权限(PR): 无
  • 用户交互(UI): 被动

脆弱系统影响指标

  • 机密性影响(VC): 高
  • 完整性影响(VI): 高
  • 可用性影响(VA): 低

后续系统影响指标

  • 机密性影响(SC): 无
  • 完整性影响(SI): 无
  • 可用性影响(SA): 无
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计