CVE-2018-9445 —— Android挂载外设的目录穿越
简介Android的USB有host和Accessory两种模式,处于Host模式下的Android设备可以对外围设备进行交互,如读取U盘数据、USB键盘鼠标等。当有外设插入到Android设备上时,系统读取外设的一些硬件信息(如LABEL、UUID等)并自动为其挂载。
常见的USB设备有以下几种:
USB Sticks即U盘,用于手机和U盘之间拷贝数据,即使处于锁屏状态,系统也会自动mount。(Android 9之后,系统阻止了锁屏情况下的mount)
USB keyboardsUSB键盘或鼠标,可以用来操控手机,在锁屏下也会自动mount。
USB ethernet adaptersUSB网卡,插入手机后,通过DHCP可以获取ip地址联通网络,锁屏下也可以使用
Android系统中由Vold进程(Volume Daemon)负责管理和控制外设,Vold进程如果在挂载外设时没有正确的对硬件信息进行解析,则有可能出现安全问题。CVE-2018-9445就是Vold在挂载外设时,由于未正确获取UUID导致的目录穿越问题。
漏洞细节当USB设备插到Android手机上时,Vold进程(Volume Daemon)会自动为USB设备进行mount,即使手机处于锁屏状态。Vold进程在mount之前需要知道所连接设备的一些硬件信息,如UUID、type、Label等,其具体实现在system/vold/Utils.cpp的readMetadata()函数中:
12345678910111213141516171819202122232425262728293031323334353637383940414243/*https://android.googlesource.com/platform/system/vold/+/master/Utils.cpp#212*/std:
...