Android提权漏洞CVE-2014-7920&CVE-2014-7921分析

本文深入探讨了Android mediaserver的两个提权漏洞CVE-2014-7920和CVE-2014-7921,涉及内存写漏洞、内存读漏洞以及如何利用这些漏洞实现权限提升。通过分析漏洞成因、利用技巧和利用过程,揭示了如何从0权限提升到media权限,并介绍了在不同Android版本上的利用难点和解决方案。

没羽@阿里移动安全,更多技术干货,请访问阿里聚安全博客

这是Android mediaserver的提权漏洞,利用CVE-2014-7920和CVE-2014-7921实现提权,从0权限提到media权限,其中CVE-2014-7921影响Android 4.0.3及以后的版本,CVE-2014-7920影响Android 2.2及以后的版本。Google直到Android5.1才修复这2个漏洞。该漏洞[1]披露过程如下:

2016年1月24日漏洞作者发布了漏洞分析及exploit[2],拿到exploit后在几个Android版本上均没能运行成功,遂分析原因,学习漏洞利用思路。记录如下,欢迎大家交流学习。

不熟悉Android Binder的同学,请自行网上搜索学习资料,下面直接分析漏洞。

0x1漏洞成因

前文提到这2个漏洞出在mediaserver,mediaserver在main_mediaserver.cpp[3]实现,其main()函数中初始化了2个service:


一个是AudioFlinger[4],service name为“media.audio_flinger”;另一个是AudioPolicyService[5],service name为“media.audio_policy”。

1.1内存写漏洞

       内存写漏洞产生在“media.audio_policy”中,接口类为IAudioPolicyService[6][7],其中startOutput()接口存在递增的内存写漏洞,stopOutput()接口存在递减的内存写漏洞。

       startOutput()接口定义为:

startOutput(audio_io_handle_t output, audio_stream_type_t stream, int session = 0)

       stopOutput ()接口定义为:

stopOutput(audio_io_handle_t output, audio_stream_type_t stream, int session = 0)

1)startOutput的递增写漏洞

熟悉Android Binder的同学都知道,该接口的native类为BnAudioPolicyService[8],当客户端请求“START_OUTPUT”code即startOutput()接口时,BnAudioPolicyService::onTransact()收到请求,然后执行下面的代码:

继续调用AudioPolicyService ::startOutput()[9]方法:

mpAudioPolicy->start_output(mpAudioPolicy, output, stream, session);

mpAudioPolicy为audio_policy类型,audio_policy:: start_output()在audio_policy_hal.cpp中被定义为ap_start_output(),该方法调用:

lap->apm->startOutput()由AudioPolicyManagerBase:: startOutput()方法实现,该方法调用:

我们来看AudioOutputDescriptor:: changeRefCount()[10]方法的代码:

当2个if语句都为假时,mRefCount[stream] += delta;语句将被执行。

此时如果索引stream可被控制,那么mRefCount内存的相对偏移内存将可被修改为加delta。恰巧stream为接口参数之一,也没校验,在AudioPolicyManagerBase:: startOutput()中传入的delta为1 ,也就是说这里存在一个递增1的内存写漏洞。这个内存写漏洞的产生需要满足

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值