简述
CVE-2019-5765的原理比较简单。Chrome Android客户端注册了一个broadcast receiver, 当接收到(app_package)_GPU_PROFILER_START广播后,会开启trace, 并将所有的url请求和header(不包含cookie)保存在文件中。
然而,这个receiver未做好权限控制,导致任意第三方应用都可以发送该广播开启chrome的trace,而且还可以指定trace log的保存路径,恶意应用通过读取trace log文件可以窃取用户所有的浏览记录。
影响范围
该漏洞影响所有chrome内核版本小于72.0.3626.81的浏览器,例如webview、第三方浏览器等等。
通常,该漏洞的利用需要攻击者在用户手机上安装一个恶意apk,通过发送广播可以获取目标浏览器或webview上所有的浏览记录,以及用户的登录凭据(例如Oauth token, header里的敏感token)等。
PoC
发送广播开启trace
1
adb shell am broadcast -a com.android.chrome.GPU_PROFILER_START
在目标浏览器中打开一个页面
- 发送广播关闭trace
1
adb shell am broadcast -a com.android.chrome.GPU_PROFILER_STOP
trace log默认保存在/sdcard/Download/目录下,例如”/sdcard/Download/chrome-profile-results-2019-05-24-084507“,使用adb shell am broadcast -a com.android.chrome.GPU_PROFILER_START -e file mypath可以指定保存路径。
漏洞修复
修复方式为”只有debug版本的系统才会注册该receiver“
总结
Android 7.0之后,系统webview使用Chrome的引擎,因此更新Chrome即可修复漏洞。在安装Play Store的系统上,Chrome和系统内置webview会自动更新到最新版本。Android 7.0之前的系统需要更新系统内置的webview
未安装Play Store的AOSP系统(三星、华为、小米、oppo、vivo等)需要厂商来更新,因此多数第三方ROM手机或定制webview浏览器厂商受该漏洞影响。
部分定制化的浏览器对chrome内核进行了修改,因此也有可能不存在这个漏洞
参考资料: