• 应用克隆漏洞相关知识


    三、这个漏洞的攻击原理

    • 该漏洞主要利用了Android系统WebView控件的同源策略漏洞来进行攻击,Android应用内部分可导出的Activity组件中,WebView允许通过file url对http域进行访问,并且并未对file域的路径进行严格校验所导致的。

    • 该漏洞会打破Android应用的沙箱隔离机制,即A应用可以通过B应用导出的Activity让B应用加载一个恶意file协议的url,从而获取B应用的内部私有文件。

    当APP出现以下两种情况时,即受该漏洞的影响: 
    1.WebView中setAllowFileAccessFromFileURLs 或****setAllowUniversalAccessFromFileURLsAPI配置为true; 
    2.WebView可以直接被外部调用,并能够加载外部可控的HTML文件。

    四、这个漏洞的初步修复建议

    1. file域访问为非功能需求时,手动在Activity中配置setAllowFileAccessFromFileURLs或setAllowUniversalAccessFromFileURLs两个API为false。(Android4.1版本之前这两个API默认是true,需要显式设置为false)

    2. 若需要开启file域访问,则设置file路径的白名单,严格控制file域的访问范围,具体如下: 
      (1)固定不变的HTML文件可以放在assets或res目录下,file:///android_asset和file:///android_res 在不开启API的情况下也可以访问; 
      (2)可能会更新的HTML文件放在/data/data/(app) 目录下,避免被第三方替换或修改; 
      (3)对file域请求做白名单限制时,需要对“../../”特殊情况进行处理,避免白名单被绕过。

    3. 避免App内部的WebView被不信任的第三方调用。排查内置WebView的Activity是否被导出、必须导出的Activity是否会通过参数传递调起内置的WebView等。

    4. 建议进一步对APP目录下的敏感数据进行保护。客户端APP应用设备相关信息(如IMEI、IMSI、Android_id等)作为密钥对敏感数据进行加密。使攻击者难以利用相关漏洞获得敏感信息。

    五、简单复现及处理

    1. 将一下内容保存为html文件

      <!DOCTYPE>
      <html>
      <head>
          <meta charset="utf-8" />
          <title>webview</title>
          <style></style>
          <script type="text/javascript">
              <!--alert("1");-->
              function loadData(){
                  var arm="file:///mnt/sdcard/abc.txt";
                  var xmlhttp;
                  if (window.XMLHttpRequest) {
                      xmlhttp = new XMLHttpRequest();
                  }
                  xmlhttp.onreadystatechange = function(){
      
                      if (xmlhttp.readyState == 4) {
                          alert("3");
                          alert(xmlhttp.responseText);
                      }
                  }
                  xmlhttp.open("GET",arm);
                  xmlhttp.send(null);
              }
              <!--alert("2");-->
          </script>
      </head>
      
      <body>
          <input type="button" name="btn" value="触发漏洞" onclick="loadData()" />
      </body>
      
    2. 将该文件放到assets目录下,在手机sd卡目录下,新建一个abc.txt,键入部分文字。

    3. 使用webview加载该文件,点击触发漏洞按钮,如果弹出内容为空,则说明加载不到(在该手机上无此漏洞);如果弹出了文件中的内容,则说明在该手机上需要进行处理
    4. 如果存在该漏洞,并且app不需要进行文件域操作,那么,设置为false即可。

      WebSettings wSet = wView.getSettings();
          wSet.setAllowFileAccessFromFileURLs(false);
          wSet.setAllowUniversalAccessFromFileURLs(false);
      
    5. 如果因为需求需要,那么我们可以在该方法中拦截url,对非法或者不符合预期的url进行拦截,不让其加载。

      @Override
          public void onLoadResource(WebView view, String url) {
              super.onLoadResource(view, url);
          }
  • 相关阅读:
    block
    最短路径(图论-北京地铁线路查询)
    Linux与git使用引导(git rm 与rm命令)
    Linux、vim、Makefile-操作系统lab0
    2019-BUAA-OO-第一次作业(表达式函数求导)
    1064
    Navicate 连接mysql问题
    pypi上传问题
    pypi上传命令
    关于 List add方法
  • 原文地址:https://www.cnblogs.com/fply/p/8565250.html
Copyright © 2020-2023  润新知