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 2html = ProsemirrorToHtml.render(document) safe_html = Sanitize.fragment(html, Sanitize::Config::RELAXED) - 实施内容安全策略:添加严格的 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
- OWASP XSS 预防备忘单
- GHSA-52c5-vh7f-26fx
- etaminstudio/prosemirror_to_html@4d59f94
- https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
- https://github.com/rubysec/ruby-advisory-db/blob/master/gems/prosemirror_to_html/GHSA-vfpf-xmwh-8m65.yml
严重性
高危
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