ProsemirrorToHtml跨站脚本漏洞分析
漏洞概述
ProsemirrorToHtml gem存在跨站脚本(XSS)安全漏洞,攻击者能够通过未转义的HTML属性值注入恶意JavaScript代码。
影响范围
受影响版本:低于0.2.1的所有版本 已修复版本:0.2.1及以上
漏洞详情
受影响组件
- 软件包:prosemirror_to_html(RubyGems)
- 漏洞类型:跨站脚本(XSS)
- 严重等级:高危(CVSS评分8.7)
技术原理
该gem在将ProseMirror文档转换为HTML时,虽然正确转义了标签内容,但未对HTML属性值进行转义处理,导致攻击者能够注入恶意代码。
攻击向量
攻击者可通过以下方式利用此漏洞:
-
href属性中的javascript协议
1<a href="javascript:alert(document.cookie)"> -
事件处理器
1<div onclick="maliciousCode()"> -
图片onerror属性
1<img src=x onerror="alert('XSS')"> -
其他可执行JavaScript的HTML属性
受影响应用
- 使用prosemirror_to_html转换ProseMirror文档为HTML的任何应用程序
- 处理用户生成的ProseMirror内容的应用程序风险最高
- 查看渲染后HTML输出的终端用户可能遭受恶意JavaScript执行
修复方案
官方补丁
升级到版本0.2.1或更高版本。补丁使用CGI.escapeHTML对所有HTML属性值进行转义,防止注入攻击。
临时解决方案
1. 输出净化
使用Sanitize或Loofah等净化库处理HTML输出:
|
|
2. 内容安全策略(CSP)
添加严格的CSP头部阻止内联JavaScript执行:
|
|
3. 输入验证
在转换为HTML之前,验证和净化ProseMirror文档,防止恶意内容进入系统。
参考链接
- 漏洞代码位置:https://github.com/etaminstudio/prosemirror_to_html/blob/ea8beb32f6c37f29f042ba4155ccf18504da716e/lib/prosemirror_to_html.rb#L249
- OWASP XSS防护指南:https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
- 相关安全公告:GHSA-52c5-vh7f-26fx