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列表(不要遗漏路径中可能出现的特殊情况如“../../”等,避免限制被绕过)
网友评论