IPBUF安全漏洞报告
English
CVE-2025-64501 CVSS 7.6 高危

CVE-2025-64501: prosemirror_to_html gem XSS跨站脚本漏洞

披露日期: 2025-11-10

漏洞信息

漏洞编号
CVE-2025-64501
漏洞类型
XSS跨站脚本攻击
CVSS评分
7.6 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
prosemirror_to_html gem

相关标签

CVE-2025-64501XSS跨站脚本prosermirror_to_htmlRuby gem属性值注入HTML转义缺失高危漏洞Web安全

漏洞概述

CVE-2025-64501是prosermirror_to_html Ruby gem中的一个高危跨站脚本(XSS)漏洞。该漏洞存在于版本0.2.0及以下版本中,源于该库在将ProseMirror兼容的JSON文档转换为HTML输出时,对标签内容进行了适当的转义处理,但对HTML属性值却缺乏相应的安全转义机制。攻击者可以利用这一漏洞,通过构造包含恶意HTML属性值的ProseMirror文档,在受害者的浏览器中注入任意JavaScript代码。所有使用该gem进行文档转换的应用程序都将受到影响,尤其是那些允许用户提交ProseMirror文档内容并将其渲染为HTML的应用。此类应用的用户在查看渲染后的HTML输出时,将面临被窃取会话cookie、劫持用户账号、执行恶意操作等安全风险。该漏洞已于版本0.2.1中得到修复,开发者应立即升级以消除安全威胁。

技术细节

该XSS漏洞的根本原因在于prosermirror_to_html gem在HTML渲染过程中,对不同部分的处理方式不一致。当库接收到ProseMirror文档的JSON表示时,它会解析文档结构并生成相应的HTML标签。对于标签之间的文本内容(innerHTML),库调用了适当的HTML转义函数来防止XSS攻击。然而,在处理HTML标签的属性值时,代码直接使用了未经过滤的用户输入数据,导致恶意构造的属性值可以被浏览器解析为可执行代码。攻击者可以在ProseMirror文档的节点属性中嵌入JavaScript事件处理器(如onerror、onload、onclick等)或javascript:伪协议URL,当这些属性被渲染到HTML输出中并被用户浏览器解析时,嵌入的恶意脚本代码将被执行。由于该gem通常用于将富文本编辑器的内容转换为可在网页中显示的HTML,因此任何使用此库的应用都可能在用户提交的内容渲染时触发漏洞。

攻击链分析

STEP 1
步骤1:信息收集
攻击者识别目标应用使用prosermirror_to_html gem进行ProseMirror文档到HTML的转换
STEP 2
步骤2:构造恶意载荷
攻击者构造包含XSS payload的ProseMirror JSON文档,在节点属性中嵌入JavaScript事件处理器或javascript:伪协议
STEP 3
步骤3:提交恶意内容
攻击者将恶意构造的ProseMirror文档作为用户输入提交到目标应用(如通过富文本编辑器提交评论、文章等内容)
STEP 4
步骤4:服务器端转换
目标应用使用prosemirror_to_html gem将ProseMirror JSON转换为HTML,由于库未对属性值进行转义,恶意代码被直接嵌入到输出的HTML中
STEP 5
步骤5:受害者访问
其他用户访问包含恶意HTML的页面,浏览器解析HTML时执行注入的JavaScript代码
STEP 6
步骤6:攻击成功
攻击者成功窃取用户会话cookie、劫持用户账号、进行钓鱼攻击或执行其他恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# ProsemirrorToHtml XSS PoC - CVE-2025-64501 # This PoC demonstrates how malicious attribute values can inject JavaScript require 'prosemirror_to_html' # Malicious ProseMirror JSON with XSS payload in attribute value malicious_doc = { type: 'doc', content: [ { type: 'paragraph', attrs: { # XSS payload in custom attribute - triggers onerror handler 'data-src' => 'xss' onerror='alert("XSS by prosemirror_to_html CVE-2025-64501")' b='' }, content: [ { type: 'text', text: 'Normal paragraph text' } ] } ] } # Another PoC variant using event handler in attribute malicious_doc2 = { type: 'doc', content: [ { type: 'heading', attrs: { # Embedding JavaScript event handler 'class' => '" onmouseover="alert(document.cookie)"' }, content: [ { type: 'text', text: 'XSS via attribute injection' } ] } ] } # Convert to HTML - vulnerable version will output unsanitized attributes html_output = ProseMirrorToHtml::HtmlRenderer.new.render(malicious_doc) puts "Generated HTML (vulnerable):" puts html_output # The output will contain the unescaped JavaScript code that browsers will execute

影响范围

prosemirror_to_html gem <= 0.2.0

防御指南

临时缓解措施
如果无法立即升级到修复版本,可在应用层对prosemirror_to_html的输出进行后处理,使用HTML净化库(如Sanitize、Loofah等)对所有HTML属性值进行强制转义。同时配置严格的Content-Security-Policy头部,限制内联脚本执行,并监控异常请求模式。建议在条件允许时尽快升级到0.2.1版本以彻底解决该安全漏洞。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表