编号: CVE-2016-2434
EXP: GitHub
EXP作者: jianqiangzhao
漏洞原理
这是同样是一个高通驱动中的权限提升漏洞,类似的漏洞还还有cve-2016-2435等几个.
代码位置:drivers/video/tegra/host/bus_client.c
函数在结尾的地方将ch->error_notifier置零,ch->error_notifier的值即va + args->offset,而args是可以被控制的。
漏洞利用
获取VA
由于置零的位置不是完全由args控制,还需要一个偏移va,首先需要确定va的值。
步骤:
- 1.分配以大段内存,并全部置为ff
- 2.调用存在漏洞的ioctl,将一部分数据置零
- 3.查找分配内存中的0,前面部分的数据即为VA
控制ptmx_cdev
由于有PXN的限制,直接将内核函数指针指向用户地址的payload的方法不可行,需要用其他的方法。EXP将内核结构题,ptmx_cdev的地址指向用户态,控制其中的函数指针指向内核中的ROP。由于针对特地设备,内核中关键符号的地址已经hardcode在exp中。
(关于如何在内核中定位符号可以查看我之前的文章内核符号获取)
步骤:
- 1.在用户空间中部署一个伪造的ptmx_fops
- 2.通过漏洞将内核ptmx_cdev指向用户态的伪造ptmx_fops
- 3.修改伪造ptmx_fops中某些函数指针,指向内核中的rop,获得内核任意读写能力(这一步不在上面代码中,在使用时部署。在kernel_read_32/kernel_write_32函数中)
提权
提权部分依旧是查找cred并修改,不分析了