本文主要研究了mtkfb_ioctl函数越界写内存提权漏洞的原理与利用。

简介

漏洞由nforest@KeenTeam发现,已于2015年年初报给厂商。详细分析请看KeenTeam高级研究员陈良在2015阿里移动技术峰会做出的报告“内存喷射在安卓Root利用中”。

一些笔记

  1. 选取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的地址范围。
  2. 为什么要进行thread_info喷射?
    虽然我们对display_id的取值进行了筛选,但是依然无法保证修改的一定是addr_limit。为了增大修改成功的概率,创建尽可能多的线程,以让thread_info结构体充斥在内核空间,大大提高了修改成功率。

Exp

根据nforest@KeenTeam的报告以及网上大牛的提权代码,整理了一份Exp,已经上传到github了:
https://github.com/ele7enxxh/MtkfbExploit

参考文献

  1. http://wenku.baidu.com/link?url=E0TX6kLvnMZD7QoS5p3FdZivHcpkeYOBTTvSYFG8EqKsB-VI3yOIR6-NK8n-cMStwxgjIApQYr0M00_4Djkl7OlmEUIXagDxyA0-_dG1E-W
  2. https://github.com/android-rooting-tools/android_run_root_shell