CVE-2025-62508CVE-2025-62508是Citizen MediaWiki皮肤中存在的一个存储型跨站脚本(Stored XSS)漏洞,影响版本范围为3.3.0至3.9.0(不含3.9.0修复版本),已在3.9.0版本中修复。Citizen是一款广受欢迎的MediaWiki皮肤,旨在将各类扩展功能整合为统一的用户体验。该漏洞存在于stickyHeader.js文件中的copyButtonAttributes函数中,该函数在复制按钮标签时,将源元素的textContent赋值给目标元素的innerHTML。由于textContent会自动将HTML实体进行反转义还原,导致系统消息内容(如citizen-share、citizen-view-history、citizen-view-edit和nstab-talk)中经过转义的HTML被解释为实际的HTML标签,从而触发XSS攻击。该漏洞的利用条件为攻击者需要拥有editinterface(编辑界面消息)权限,但不需要editsitejs(编辑站点JavaScript)权限。在MediaWiki的默认权限配置中,sysop(管理员)用户组通常拥有editinterface权限,因此该漏洞的影响面较广。成功利用此漏洞的攻击者可以在其他用户的浏览器会话中执行任意JavaScript代码,进而窃取敏感信息(如会话令牌、Cookie)、执行未授权操作(如修改页面内容、提升权限),甚至完全劫持受害者账户。该漏洞的CVSS 3.1评分为6.5,属于中危级别,但其实际危害程度可能因MediaWiki站点的权限配置而异。
该漏洞的根本原因在于stickyHeader.js文件中copyButtonAttributes函数的实现存在安全缺陷。该函数的设计初衷是将原始按钮元素的属性(包括标签文本)复制到粘性头部(sticky header)中的对应按钮上。然而,在实现过程中,开发者使用了innerHTML属性来设置目标按钮的标签文本,而赋值来源是源元素的textContent属性。
在DOM API中,textContent属性会返回元素及其后代的文本内容,并且会自动将HTML实体(如<、>、&等)反转义为对应的字符。当这些字符通过innerHTML属性设置到目标元素时,浏览器会将其解析为HTML标记而非纯文本。例如,如果系统消息citizen-share的内容被设置为"<img src=x onerror=alert(1)>",textContent会返回"<img src=x onerror=alert(1)>",然后通过innerHTML赋值后,浏览器会将其解析为实际的img标签并执行onerror事件中的JavaScript代码。
攻击利用方式如下:
1. 攻击者需要拥有editinterface权限(默认情况下sysop用户组拥有此权限);
2. 攻击者编辑受影响的系统消息页面(如MediaWiki:citizen-share),在其中注入包含恶意JavaScript的HTML标签;
3. 由于系统消息编辑会自动对内容进行HTML转义存储,攻击者需要使用会被转义后存储但能被textContent还原的payload;
4. 当任何用户访问使用Citizen皮肤的页面时,粘性头部会渲染这些按钮,触发恶意脚本执行;
5. 恶意脚本可以在受害者浏览器中执行任意操作,如窃取会话信息、发起CSRF攻击等。
值得注意的是,该漏洞特别危险,因为它只需要editinterface权限而不需要editsitejs权限,这意味着即使站点管理员禁用了JavaScript编辑功能,攻击者仍然可以利用此漏洞执行JavaScript代码。