2018 年 1 月 9 日, 国家信息安全漏洞共享平台 (CNVD) 发布关于 Android webView 存在跨域访问漏洞 (CNVD-2017-36682) 的公告, 本文最后会给出具体的解决方案.
漏洞描述
WebView 是 Android 用于显示网页的控件,是一个基于 Webkit 引擎,展现 Web 页面,解析并执行 JavaScript 代码的控件,Android 应用可以使用 WebView 空间,灵活的扩展自身的业务功能.
市面上大多数使用 html5 技术开发的应用均使用 WebView 进行 HTML5 页面的展示.除了从远程服务器加载 Web 页面,WebView 还可以通过修改特定配置,从文件中进行 HTML5 页面的加载.在未正确配置 WebView 的情况下,会致使 WebView 同源策略失效,导致 HTTP 协议,file 协议跨源攻击的发生.该漏洞使得 WebView 能够访问当前应用内部数据,如果 WebView 加载了来源不明的 HTML 文件,可能导致当前应用内部数据被攻击者窃取,如身份认证信息,加密密钥,用户隐私信息等.
漏洞分析
Android 应用内部分可导出的 Activity 组件中,WebView 允许通过 file URL 对 http 域进行访问,并且未对访问路径进行严格校验,由此导致了本次漏洞的出现.
该漏洞的产生条件:
(1)应用中存在设置为可被导出的 Activity 组件,并且组件中包含 Webview 调用.
(2)Webview 调用中 setAllowFileAccessFromFileURLs 或
setAllowUniversalAccessFromFileURLs 设置为 true(minSdk<=4.1 默认为 true,minSdk>4.1 默认为 false).
解决方案
第一步
如果你的 activity 里面使用了 webview,请关闭该 activity 的导出功能(该功能是允许外部应用打开该 activity)
第二步
<activity
android:name=".activity.WebViewActivity"
android:exported="false"//关闭导出功能
android:screenOrientation="portrait"/>
如果你的 activity 必须要打开导出功能,请手动关闭通过 file URL 对 http 域进行访问
webView.getSettings().setAllowFileAccessFromFileURLs(false);
第三步
对于必须使用 file URL 对 http 域进行访问时,可对传入的 URL 路径范围严格控制,例如建立 URL 白名单,设置允许访问的 URL 列表(不要遗漏路径中可能出现的特殊情况如 "../../" 等,避免限制被绕过)
来源: http://www.jianshu.com/p/6e32d353e3fc