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属性值来防止注入攻击。
临时解决方案
在获得修复版本之前,用户可以实施以下一种或多种缓解措施:
-
净化输出:将HTML输出通过净化库处理,如 Sanitize 或 Loofah:
1 2html = ProsemirrorToHtml.render(document) safe_html = Sanitize.fragment(html, Sanitize::Config::RELAXED) -
实施内容安全策略(CSP):添加严格的CSP头部以防止内联JavaScript执行:
1Content-Security-Policy: default-src 'self'; script-src 'self' -
输入验证:如果可能,在转换之前验证并净化ProseMirror文档,以防止恶意内容进入系统。
技术参考
- 漏洞代码位置: https://github.com/etaminstudio/prosemirror_to_html/blob/ea8beb32f6c37f29f042ba4155ccf18504da716e/lib/prosemirror_to_html.rb#L249
- 相关GHSA: GHSA-52c5-vh7f-26fx
- 修复提交: etaminstudio/prosemirror_to_html@4d59f94
- OWASP XSS防护备忘单: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
- Ruby安全咨询数据库条目: https://github.com/rubysec/ruby-advisory-db/blob/master/gems/prosemirror_to_html/GHSA-vfpf-xmwh-8m65.yml
弱点分类
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): 无