概述
CVE-2018-9489是一个很简单,很鸡肋的漏洞,但漏洞无贵贱,在一些特殊的场景中往往会利用这些漏洞完成不可思议的利用。
简而言之,CVE-2018-9489这个漏洞就是一个0权限的app可以读到系统的mac地址、wifi信息,而这些信息如果是一个普通的app去读取的话是需要申请权限的。
CVE-2018-9489漏洞通过监听NETWORK_STATE_CHANGED_ACTION和WIFI_P2P_THIS_DEVICE_CHANGED_ACTION这两个广播来获得这些信息。
漏洞分析
Android系统通过WifiManager.NETWORK_STATE_CHANGED_ACTION和WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION这两个广播发送系统的MAC地址、BSSID、wifi名称、IP地址、DNS等信息。
正常情况下,通过WifiManager类访问这些信息时,需要注册“ACCESS_WIFI_STATE”权限。我们知道搜集了mac地址和BSSID信息时,就可以进行wifi定位,而正常的wifi定位时需要注册“ACCESS_FINE_LOCATION” 和 “ACCESS_COARSE_LOCATION”权限的。
此外,Android为了数据隐私,从这个6.0版本开始, Android 移除了通过 WiFi 和蓝牙 API 来在应用程序中可编程的访问本地硬件标示符。现在 WifiInfo.getMacAddress() 和 BluetoothAdapter.getAddress() 方法都将返回 “02:00:00:00:00:00”。
然而通过监听系统广播的方式,一个普通App可以不用申请任何权限去获得这些信息。当然,如上所述,利用CVE-2018-9489可以进行wifi定位、读取MAC地址、内网扫描等。
PoC代码
1 | protected void onCreate(Bundle savedInstanceState) { |
读到的广播数据如下:
该漏洞在Android 9.0修复,但由于音响范围较小,之前的版本Android不作处理。
参考资料: