|
漏洞说明:QQ Mail是Tencent公司提供的webmail服务,你可以使用你的QQ帐户来登陆使用Mail服务,具体的信息可以访问 http://mail.qq.com/。但是80sec团队成员在QQ Mail里发现存在跨站脚本漏洞,恶意用户可以通过该漏洞在邮件里伪造登陆表单窃取目标用户的密码以及偷取Cookie以取得其他用户的身份,或者使用 ajax等技术读取用户的敏感信息。
漏洞成因:QQ Mail的Javascript Dom部分在处理邮件内容,对邮件内容字符串的处理分为str和code两个流程,通过组合的标签内容可以误导Javascript处理图片内容和文字链接进入str流程,将HTML编码字符串还原为HTML标签。
漏洞测试:(已经修复)
发送如下内容即可引发XSS
以下是引用片段:<div><img src=\"http://src=\" onerror=\"alert(x111)\"></div> 漏洞解析:
QQ Mail会自动解析邮件内容,发现匹配的链接将转换成HTML内容,由LinkMaker函数实现:
以下是引用片段:function LinkMaker( str ) { return str.replace( /(https?:\\/\\/[\\w.]+[^ \\f\\n\\r\\t\\v\\\"\\\\\\<\\>\\[\\]\\u2100-\\uFFFF]*)|([a-zA-Z_0-9.-]+@[a-zA-Z_0-9.-]+\\.\\w+)/ig, function( s, v1, v2 ) { if ( v2 ) return [ ’<a href=\"mailto:’, v2, ’\">’, v2, ’</a>’ ].join( “” ); else return [ ’<a href=\"’, s, ’\">’, s, ’</a>’ ].join( “” ); } ); SwapImg函数处理邮件中IMG标签:
以下是引用片段:function SwapImg(id, ajustValue) { var as = GelTags(\"img\", S(id)); for (var i = 0; i < as.length; i++) { if (as.src) { ZoomImgToBody(as, ajustValue); as.onload = function() { ZoomImgToBody(this, ajustValue, true); }; } } } 进入str流程将会使用DOM中的innerText和textContent处理字符串,邮件中的HTML编码字符串转成HTML标签(<将转换成”<”,>将转换成”>”),如下的测试:
以下是引用片段:<div id=\"contentDiv\" class=\"body\"><div></div> <div><img src=\"\" onerror=\"alert(1);\"></div></div> <script> v=document.getElementById(\"contentDiv\").innerText; //ie //v=document.getElementById(\"contentDiv\").textContent; //FIREFOX alert(v) </script> |
|