序
惊闻Stagefright曝出重大漏洞,可以造成远程代码执行,甚至发条彩信,就有可能入侵用户移动设备。这听起来可是难得一遇的大漏洞啊,作为安全人员,自然要好好扒一扒内幕了。
山重水复
从新闻来看,出于某些考虑,漏洞的发现者目前并没有公布相关的细节,而是决定要留到BlackHat上再进行详细的说明。也就是说,目前所知道就是Android系统的Stagefright库存在重大安全问题,具体是什么?想知道自己去Fuzz。
虽然,看起来关于漏洞细节,并没有任何头绪。但是,作为安全人员,首先要坚信的一点,就是世界上没有不透风的墙!仔细研读漏洞的新闻稿,可以发现,该漏洞已经提交给了Google,并且Google迅速的进行了修复。同时发现,Google也已经把漏洞相关信息交给了部分合作伙伴。看完这些,就能确定,这漏洞目前还能扒。
既然Google针对此漏洞,已经在源码中进行了修复。那么首先查看了Google的相关源码提交状态。
简单翻阅了提交的log。发现了一些关于libstagefright安全问题的修复,但大多言简意赅,难以确定。
柳暗花明
看起来从Google方面下手并不容易,好在Google已经将漏洞相关资料交给了合作伙伴,所以我们发现了CyanogenMod公布的一条消息。
也就是说,在CM12中已经对此漏洞进行了修复!
顺藤摸瓜
随后,我们在github上找到了CM12的提交记录
可以看到,在CM12的最近提交中,都是对Stagefright相关漏洞的修复,根据这些修复内容,对漏洞大体上也就能有一些了解了!
抽丝剥茧
我们对部分修复方案进行了简单分析。
Bug: 20139950
该bug的位置在frameworks/av/media/libstagefright/SampleTable.cpp文件的SampleTable::setSampleToChunkParams函数中,从该bug的说明和修复上来看。是由于mNumSampleToChunkOffets值太大,可能造成溢出。相关代码如下
注意红线标注部分。可能会造成访问越界。从而引发安全问题。
Bug: 20139950
该bug在frameworks/av/ media/libstagefright/ESDS.cpp的ESDS::parseESDescriptor函数中。直接从描述和修复代码中,就能看出来,是由于在解析过程中,对变量校验不严格,可能造成越界访问的问题。
Bug: 20923261
此漏洞产生于frameworks/av/media/libstagefright/MPEG4Extractor.cpp的MPEG4Extractor::parseChunk函数中。从截图就可以看到漏洞的全貌了。当chunk_data_size小于kSkipBytesOfDataBox时,红线部分就会变成一个负数,由于setData的最后一个参数类型是size_t,所以就会被解析成很大的正数,从而造成错误。
其余漏洞产生原因类似,就不再一一进行描述了。
总结
概览全部的修复代码,发现产生漏洞的原因,都是因为对数据校验完善造成的。此次曝光的只是Stagefright的问题。考虑到Android系统中包含了大量的文件解析代码,包括图片、压缩包、音频、视频等解码库。这些库在解析文件过程中,对数据进行严格的校验了吗?会不会明天又会爆出音频解码存在严重bug?这应该是值得开发者和安全从业者深思的问题。
*作者:金山毒霸,转载须注明来自FreeBuf黑客与极客(FreeBuf.COM)
0day
已有 14 条评论
沙发
转发微博
666666
注意红线标注部分。可能会造成访问越界。从而引发安全问题。
仔细看了一下,恩,但是没看出来问题,话说问题点是这么…要不你再往下搂两眼…
别问我是谁,请叫我雷锋
大锅,好歹整个poc才叫初探,翻译人家注释的源代码装b,关键是还分析错了,你们真的看懂代码了么?
收购新浪微博 XSS CSRF 有的私聊!!
求exp~
av/media。好吧我只看到了这几个词
我厂程序猿正密切关注该漏洞的更多信息,目前已经得到漏洞poc
我厂程序猿棒棒哒。 我厂程序猿正密切关注该漏洞的更多信息,目前已经得到漏洞poc
POC是啥?微博是大众平台,不要那么多鸟语好不? 另外请转告你厂猿猿们,为毒霸增加个程序员工作模式,此模式下,只监测外部和网络来源的内容,不对硬盘文件访问等做监控,方便开发。
没有金刚钻就别揽瓷器活
这种漏洞都不算什么的,做手机media这种问题不知道遇到过几次了。
随便拿个格式,android解析都会crash,仔细分析下都是媒体解析出现问题。这里面的漏洞多的是 。
那是不是有可能出个Android各版本补丁,替换libstagefright内相关文件,不用刷系统或者等厂商呢?