标签归档:CVE-2012-4220

稳定利用CVE-2012-4220的方法

CVE-2012-4220 原理分析中简单的描述了一下libdiagexploit存在的问题,经过实际的测试,android-rooting-tools使用libdiagexploit是没法将值修改正确的。下面给出一种修正的方案,经过测试可以在ZTE N798 (CT_CN_N798+V1.0.0B09)上获取到了Root权限。

注意事项

利用之前需要清楚这个漏洞的功能和限制。
1. 使用该漏洞可以向任意地址写入一个16位的值,范围是2~0xFFFF
2. 修改为特定值需要循环调用该漏洞直到delayed_rsp_id的值是目标值。
所以,就是要控制好写入值,以及循环的次数。
由于对Linux不熟悉,获取Root权限方法沿用了libexploit中的方法。看起来,其获取Root权限的核心代码是在内核执行commit_creds_address(prepare_kernel_cred_address(0))。为了实现这一目标,libexploit企图利用各种漏洞修改ptmx_fops的结构体中+0x38处的一个函数地址,然后打开设备/dev/ptmx并调用fsync以获得在内核执行代码的权限。为了写入32位的地址,需要分别将目标地址的高位和地位写入。而且,高位和低位中不能出现0或者1。 More

CVE-2012-4220 原理分析

漏洞信息

该漏洞的一些相关连接:
CodeAurora
NVD
上述连接中对该漏洞的描述:

漏洞分析

造成该漏洞的主要代码如下:

这代码两个问题:
1. 对于用户态传递的参数ioarg没有检验直接使用。传递一个无效指针即可造成拒绝服务。
2. 对delay_params中的rsp_ptr以及num_bytes_ptr两个用户态的指针仅做了非空判断就直接使用。传递无效指针可造成拒绝服务,传递其他地址可以造成任意地址写入攻击。 More