一、 事件背景
Discuz!X是康盛公司(Comsenz)推出的一个以社区为基础的专业建站平台,它主要采用PHP和MySQL等其他多种数据库构建而成,该平台让论坛(BBS)、社交网络(SNS)、门户(Portal)、群组(Group)、开放平台(Open Platform)应用充分融合于一体。
1月初,互联网上披露了Discuz!X存在存储型XSS漏洞,攻击者可以利用此漏洞盗取各类用户帐号等,后果较为严重。
二、 漏洞复现
首先准备本地服务器phpstudy环境,选择Discuz! X3.3版本作为测试。
用管理员账户登录到后台,开启四方格功能。
开启之后,回到论坛首页,即可看到如下内容:
注册一个普通用户test,然后发表新帖。
在帖子的标题处插入XSS语句: <img src=1 onerror=alert(/test/)>即可。
然后在首页鼠标放在帖子准备点击刚才发表的帖子时,触发onmouseover事件,执行插入的代码。
三、 漏洞分析及危害
1) 漏洞分析
Discuz!X首页四格的功能默认安装是不开启的,但是由于其作用可以让进入网站的读者快速找到网站的“最新发布”、“最热门”、“最精华”的内容及图片,所以很多网站管理员会选择手动开启此功能。
通过查看源码,当触发onmouseover事件时,调用的showTip函数最终调用到了_showTip函数。
跟进到_showTip函数中,可以发现使用getAtrribute取了tip属性值,然后又放入innerHTML。如下图红框所示:
并且getAtrribute函数获取属性值时会自动解码实体编码后的值,因此才会出现如下图情况:
2) 漏洞危害
恶意攻击者可以利用此漏洞盗取各类用户帐号,如机器登录帐号、用户帐号、管理员帐号。并且还能强制服务器发送电子邮件、进行网站挂马、控制受害者机器向其它网站发起攻击等,后果较为严重。
四、 数据分析
由于Discuz!X主要客户都分布在国内,中国境内使用Discuz!X的论坛网站数量约为1.9万台左右。其中排名前五的省份或地区分别为:浙江省、香港特别行政区、北京市、广东省、上海市。
1) 世界分布
下图为中国范围内使用Discuz!X的论坛的分布情况:
图1、世界分布图
下图为中国范围内使用Discuz!X的论坛数量排名前十的省份或地区:
图2、世界排名前十
下图为国内使用Discuz!X论坛的运营商排名:
图3、国内运营商排名前十
五、 防范建议
1) 漏洞涉及版本
Discuz!X <=3.3
2) 修复建议
1、如果网站有开启四方格功能,建议临时关闭此功能。
2、Discuz官方已经发布最新的Discuz! X3.4版本,并修复了此漏洞,请用户及时更新到最新版本。相关链接如下:
http://www.discuz.net/forum.php