WebView 漏洞分析 - litonghui/TechBlog GitHub Wiki
Webview + Html5 作为移动端开发成为一种流行的趋势,WebView 支持网页加载,CSS以及JavaScript,Html5 灵活多变的特性,为个新功能发布和热修复提供有力帮助,然而,WebView 的漏洞也随之出现,黑客通过webview 漏洞对软件攻击,特别是支付软件、通信类软件、浏览器等。当然你可以通过阿里聚安全及时检测。常见漏洞描述:
一,Webview file域同源策略绕过漏洞
漏洞扫描工程的AndroidMainifest 文件,检查WebView 所在组件(Activity,Service...)是否设置android:exported="true",漏洞扫描会提醒你将不必要的组件不用导出。如果你执意要导出,则需要禁止file 域协议,禁止js 执行,即setJavaScriptEnabled(false),默认false
相关资料:
二,webview远程代码执行漏洞
Java 和 Javascript 之间的相互调用是通过addjavascriptInterface 执行的,但是同时该接口又会存在远程代码执行漏洞,在API 17 以上@JavascriptInterface 代替addJavascriptInterface ,但是在低版本中依然存在风险。建议使用一下方法:
JsInterface jsInterface = new JsInterface();
mWebView.addJavascriptInterface(jsInterface, "android");
public class JsInterface implements NonProguard{
@JavascriptInterface
public void onFetchMobileInfo() {
mHandler.sendEmptyMessage(MSG_GOT_MOBILEINFO);
}
}
三,WebView不校验证书漏洞
调用了android/webkit/SslErrorHandler类的proceed方法,可能导致WebView忽略校验证书的步骤,不要调用android.webkit.SslErrorHandler的proceed方法
四,Webview明文存储密码漏洞
使用Webview时需要关闭webview的自动保存密码功能,防止用户密码被webview明文存储。显示设置webView.getSetting().setSavePassword(false)
五,未移除有风险的Webview系统隐藏接口
android webview组件包含3个隐藏的系统接口:searchBoxJavaBridge_, accessibilityTraversal以及accessibility,恶意程序可以利用它们实现远程代码执行。请通过显示调用removeJavascriptInterface移除这三个系统隐藏接口。
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
dealJavascriptLeak();
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void dealJavascriptLeak() {
mWebView.removeJavascriptInterface("searchBoxJavaBridge_");
mWebView.removeJavascriptInterface("accessibility");
mWebView.removeJavascriptInterface("accessibilityTraversal");
}
未完待续。。。