mtkfb_ioctl函数越界写内存提权漏洞
本文主要研究了mtkfb_ioctl函数越界写内存提权漏洞的原理与利用。
简介
漏洞由nforest@KeenTeam发现,已于2015年年初报给厂商。详细分析请看KeenTeam高级研究员陈良在2015阿里移动技术峰会做出的报告“内存喷射在安卓Root利用中”。
一些笔记
- 选取display_id为0xA04EC4EC,因为0xA04EC4EC*0x34==0x208FFFFFF0==0x8FFFFFF0,可确保写0操作落在map的地址范围内?
dispif_info位于内核空间,故其地址一定大于0xC0000000。所以写0的地址也大于0xC0000000+0xA04EC4EC*0x34+0x20=0x50000010(对于32位系统,addr+0x100000000==addr),而我们map的起始地址0x50000000,所以可确保写0操作落在map的地址范围。 - 为什么要进行thread_info喷射?
虽然我们对display_id的取值进行了筛选,但是依然无法保证修改的一定是addr_limit。为了增大修改成功的概率,创建尽可能多的线程,以让thread_info结构体充斥在内核空间,大大提高了修改成功率。
Exp
根据nforest@KeenTeam的报告以及网上大牛的提权代码,整理了一份Exp,已经上传到github了:
https://github.com/ele7enxxh/MtkfbExploit