Open kukyxs opened 5 years ago
主要三类漏洞:
WebView 中 addJavascriptInterface() 接口
WebView 内置导出的 searchBoxJavaBridge_对象
WebView 内置导出的 accessibility 和 accessibilityTraversalObject 对象
任意代码执行漏洞
1.1 WebView 中 addJavascriptInterface()接口
原因 JS调用Android的其中一个方式是通过addJavascriptInterface接口进行对象映射,当JS拿到Android这个对象后,就可以调用这个Android对象中所有的方法,包括系统类(java.lang.Runtime 类),从而进行任意代码执行。 解决 Android 4.2以前,需要采用拦截prompt()的方式进行漏洞修复 Android 4.2以后,则只需要对被调用的函数以 @JavascriptInterface进行注解
1.2 WebView 内置导出的 searchBoxJavaBridge_对象
原因 在Android 3.0以下,Android系统会默认通过searchBoxJavaBridge_的Js接口给 WebView 添加一个JS映射对象:searchBoxJavaBridge_对象 该接口可能被利用,实现远程任意代码。
解决 删除searchBoxJavaBridge_接口
1.3 WebView 内置导出的 accessibility 和 accessibilityTraversalObject 对象 原因和解决方法同上
原因 WebView默认开启密码保存功能:mWebView.setSavePassword(true) 开启后,在用户输入密码时,会弹出提示框:询问用户是否保存密码; 如果选择”是”,密码会被明文保到 /data/data/com.package.name/databases/webview.db 中,这样就有被盗取密码的危险 解决 关闭密码保存提醒:WebSettings.setSavePassword(false)
getSettings类的方法对 WebView 安全性的影响
3.1 setAllowFileAccess // 设置是否允许 WebView 使用 File 协议 webView.getSettings().setAllowFileAccess(true); 如果不允许使用 file 协议,则不会存在上述的威胁; 但同时也限制了 WebView 的功能,使其不能加载本地的 html 文件
解决 对于不需要使用 file 协议的应用,禁用 file 协议; 对于需要使用 file 协议的应用,禁止 file 协议加载 JavaScript。
3.2 setAllowFileAccessFromFileURLs // 设置是否允许通过 file url 加载的 Js代码读取其他的本地文件 webView.getSettings().setAllowFileAccessFromFileURLs(true); // 在Android 4.1前默认允许 // 在Android 4.1后默认禁止
解决方案 设置setAllowFileAccessFromFileURLs(false);
3.3 setAllowUniversalAccessFromFileURLs // 设置是否允许通过 file url 加载的 Javascript 可以访问其他的源(包括http、https等源) webView.getSettings().setAllowUniversalAccessFromFileURLs(true); // 在Android 4.1前默认允许(setAllowFileAccessFromFileURLs()不起作用) // 在Android 4.1后默认禁止
解决方案 设置setAllowUniversalAccessFromFileURLs(false);
参考: https://blog.csdn.net/carson_ho/article/details/64904635
主要三类漏洞:
WebView 中 addJavascriptInterface() 接口
WebView 内置导出的 searchBoxJavaBridge_对象
WebView 内置导出的 accessibility 和 accessibilityTraversalObject 对象
任意代码执行漏洞
1.1 WebView 中 addJavascriptInterface()接口
原因 JS调用Android的其中一个方式是通过addJavascriptInterface接口进行对象映射,当JS拿到Android这个对象后,就可以调用这个Android对象中所有的方法,包括系统类(java.lang.Runtime 类),从而进行任意代码执行。 解决 Android 4.2以前,需要采用拦截prompt()的方式进行漏洞修复 Android 4.2以后,则只需要对被调用的函数以 @JavascriptInterface进行注解
1.2 WebView 内置导出的 searchBoxJavaBridge_对象
原因 在Android 3.0以下,Android系统会默认通过searchBoxJavaBridge_的Js接口给 WebView 添加一个JS映射对象:searchBoxJavaBridge_对象 该接口可能被利用,实现远程任意代码。
解决 删除searchBoxJavaBridge_接口
1.3 WebView 内置导出的 accessibility 和 accessibilityTraversalObject 对象 原因和解决方法同上
原因 WebView默认开启密码保存功能:mWebView.setSavePassword(true) 开启后,在用户输入密码时,会弹出提示框:询问用户是否保存密码; 如果选择”是”,密码会被明文保到 /data/data/com.package.name/databases/webview.db 中,这样就有被盗取密码的危险 解决 关闭密码保存提醒:WebSettings.setSavePassword(false)
getSettings类的方法对 WebView 安全性的影响
3.1 setAllowFileAccess // 设置是否允许 WebView 使用 File 协议 webView.getSettings().setAllowFileAccess(true); 如果不允许使用 file 协议,则不会存在上述的威胁; 但同时也限制了 WebView 的功能,使其不能加载本地的 html 文件
解决 对于不需要使用 file 协议的应用,禁用 file 协议; 对于需要使用 file 协议的应用,禁止 file 协议加载 JavaScript。
3.2 setAllowFileAccessFromFileURLs // 设置是否允许通过 file url 加载的 Js代码读取其他的本地文件 webView.getSettings().setAllowFileAccessFromFileURLs(true); // 在Android 4.1前默认允许 // 在Android 4.1后默认禁止
解决方案 设置setAllowFileAccessFromFileURLs(false);
3.3 setAllowUniversalAccessFromFileURLs // 设置是否允许通过 file url 加载的 Javascript 可以访问其他的源(包括http、https等源) webView.getSettings().setAllowUniversalAccessFromFileURLs(true); // 在Android 4.1前默认允许(setAllowFileAccessFromFileURLs()不起作用) // 在Android 4.1后默认禁止
解决方案 设置setAllowUniversalAccessFromFileURLs(false);
参考: https://blog.csdn.net/carson_ho/article/details/64904635