存储型跨站脚本(XSS)漏洞报告 #3176981 - MainWP插件"添加联系人"姓名字段
漏洞概述
在测试MainWP WordPress插件(https://github.com/mainwp/mainwp)时,我在客户端管理功能的"添加联系人"→联系人姓名字段中发现了一个存储型XSS漏洞。
漏洞详情
该问题的产生原因是应用程序在将用户输入渲染回DOM之前未进行适当的清理处理。因此,攻击者可以注入恶意的JavaScript有效载荷,这些载荷被存储在数据库中,并在任何查看受感染客户端配置文件的用户(通常是管理员)的浏览器中执行。
我制作了一个有效载荷并在编辑客户端时将其插入到联系人姓名字段中:
|
|
保存更改后,有效载荷按原样存储,并在重新加载客户端详细信息页面时立即执行JavaScript——这证明了XSS漏洞的存在。
影响范围
此漏洞允许攻击者在查看受影响页面的任何用户的浏览器中执行任意JavaScript,导致完全控制用户的会话和操作。
攻击者可以利用此漏洞:
- 窃取管理员会话cookie
- 以管理员身份执行未经授权的操作(例如,添加恶意客户端或插件)
如果攻击者在联系人姓名字段中存储恶意脚本,任何查看或编辑该客户端的管理员都会无意中触发有效载荷。这可能导致MainWP仪表板的完全妥协,使攻击者能够操纵连接的WordPress站点、推送虚假更新或泄露敏感客户端数据——造成声誉和运营损失。
漏洞验证与修复过程
时间线
2025年6月4日 9:13 AM UTC - rishail01提交漏洞报告
2025年6月5日 12:05 PM UTC - MainWP团队将状态更改为"已分类"
2025年6月6日 4:14 PM UTC - 开发团队提供修复版本mainwp.zip
2025年6月8日 3:22 PM UTC - 验证漏洞已成功修复
2025年6月13日 4:47 PM UTC - 奖励50美元赏金
技术讨论
MainWP团队最初认为该漏洞需要管理员权限才能利用,因此攻击向量"毫无意义"。但研究人员解释说:
- 有效载荷存储在数据库中并在UI的多个部分呈现
- 任何查看或编辑客户端的管理员都会触发有效载荷
- 攻击者可以通过钓鱼、凭据泄露等方式获得低权限用户访问权,然后植入有效载荷等待管理员触发
由于MainWP集中管理子WordPress站点,泄露管理员会话可能允许:
- 向所有连接站点推送恶意插件/更新
- 添加恶意用户或客户端
- 在所有托管资产中进行横向移动
修复确认与CVE协调
研究人员确认提供的mainwp.zip文件已成功修复存储型XSS漏洞。双方同意在CVE分配前进行30天的协调期,以便用户有足够时间更新插件。
赏金争议
虽然漏洞得到修复,但研究人员对50美元的赏金金额表示异议,认为存储型XSS属于中等严重性漏洞。MainWP团队回应称,由于这些XSS漏洞需要预先获得管理员权限才能利用,而管理员已经可以安装任意插件和运行自定义代码,因此这些漏洞实际上没有改变安全状况,不在其漏洞赏金计划覆盖范围内。
最终报告于2025年7月17日公开披露。