Android平台WebView控件存在跨域访问高危漏洞

0x00手工自检:

1. 检查应用是否使用了webview控件;

如下图,WebView webview;定义了webview控件,即使用了webview控件。
在这里插入图片描述

2. 若使用了webview控件,则检查内置webview的Activity是否可被导出;

在上图中可以看到,内置webview的Activity是MainActivity,查看MainAcitivity是否可导,需要到AndroidManifest.xml文件中查看MainActivity的exported属性值是否为”true”,如果为true代表可以被其他应用导出调用,需要设置为false。
在这里插入图片描述
此demo直接写在主入口,主入口的exported属性值必须为”true”。可以参考下图:
在这里插入图片描述
3. 同时检查webview中setAllowFileAccessFromFileURLs或setAllowUniversalAccessFromFileURLs两个API是否为false。(Android4.1版本之前这两个API默认是true,需要显式设置为false;Android4.1版本之后默认为false,若没有显示设置为true可不做更改)
在这里插入图片描述
先显示设置setAllowFileAccessFromFileURLs的值为false,然后使用webview去访问放在/data/local/tmp下的dbapp.html文件;
dbapp.html的文件内容如下,功能是读取/etc/hosts文件的内容;

<script>
function loadXMLDoc()
{
    var arm = "file:///etc/hosts";
    var xmlhttp;
    if (window.XMLHttpRequest)
    {
        xmlhttp=new XMLHttpRequest();
    }
    xmlhttp.onreadystatechange=function()
    {
        //alert("status is"+xmlhttp.status);
        if (xmlhttp.readyState==4)
        {
              console.log(xmlhttp.responseText);
        }
    }
    xmlhttp.open("GET",arm);
    xmlhttp.send(null);
}
loadXMLDoc();
</script>

dbapp.html的文件内容:
在这里插入图片描述
在这里插入图片描述
hosts的文件内容:
在这里插入图片描述
在这里插入图片描述

1.此时设置setAllowFileAccessFromFileURLs的值为true,再次运行;在这里插入图片描述
我们可以看到hosts文件的内容打印到了logcat上;
(hosts文件内容没有在webview上显示的原因是Android 4.4以上,webview内核基于chromium,js无法交互,但是这里我们依然可以拿到想要的数据,问题的解决办法就放着先)
在这里插入图片描述
2.用同样的方式测试setAllowUniversalAccessFromFileURLs的值,当setAllowUniversalAccessFromFileURLs的值为true时,可以利用js来访问恶意网站链接;
此时将dbapp.html文件改成访问http://www.freebuf.com;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 以上为没有使用file域访问的应用自检方式;如果应用使用到了file域访问的功能时,则需设置file路径的白名单,严格控制file域的访问范围,具体如下:
  1. 固定不变的HTML文件可以放在assets或res目录下,file:///android_asset和file:///android_res在不开启API的情况下也可以访问;
  2. 可能会更新的HTML文件放在/data/data/(app) 目录下,避免被第三方替换或修改;
  3. 对file域请求做白名单限制时,需要对“…/…/”特殊情况进行处理,避免白名单被绕过。
5. 最后检查APP目录下是否保存了敏感信息文件,并建议进一步对APP目录下的敏感数据进行保护。客户端APP应用设备相关信息(如IMEI、IMSI、Android_id等)作为密钥对敏感数据进行加密。使攻击者难以利用相关漏洞获得敏感信息。

0x01漏洞描述:

2018年01月09日国家信息安全漏洞共享平台(CNVD)发布关于Android平台WebView控件存在跨域访问高危漏洞的安全公告(CNVD-2017-36682)。

WebView是Android用于显示网页的控件,是一个基于Webkit引擎、展现Web页面、解析并执行Java代码的控件,Android应用可以使用WebView空间,灵活的扩展自身的业务功能。

0x02漏洞分析:

漏洞产生的原因是在Android应用中,WebView开启了file域访问,且允许file域对http域进行访问,同时未对file域的路径进行严格限制所致。攻击者通过URL Scheme的方式,可远程打开并加载恶意HTML文件,远程获取APP中包括用户登录凭证在内的所有本地敏感数据。

漏洞触发成功前提条件如下:

  1. WebView中setAllowFileAccessFromFileURLs或setAllowUniversalAccessFromFileURLsAPI配置为true;(Android4.1版本之前这两个API默认是true,需要显式设置为false)
  2. WebView可以直接被外部调用,并能够加载外部可控的HTML文件。

0x03影响范围:

漏洞影响使用WebView控件,开启file域访问并且未按安全策略开发的Android应用APP。
CNVD对相关漏洞综合评级为“高危”。

0x04修复建议:

厂商暂未发布解决方案,临时解决方案如下:

  1. 检查应用是否使用了webview控件;
  2. 避免App内部的WebView被不信任的第三方调用。排查内置WebView的Activity是否被导出、必须导出的Activity是否会通过参数传递调起内置的WebView等。
  3. file域访问为非功能需求时,手动配置setAllowFileAccessFromFileURLs或setAllowUniversalAccessFromFileURLs两个API为false。(Android4.1版本之前这两个API默认是true,需要显式设置为false)
  4. 若需要开启file域访问,则设置file路径的白名单,严格控制file域的访问范围,具体如下:
    (1)固定不变的HTML文件可以放在assets或res目录下,file:///android_asset和file:///android_res 在不开启API的情况下也可以访问;
    (2)可能会更新的HTML文件放在/data/data/(app) 目录下,避免被第三方替换或修改;
    (3)对file域请求做白名单限制时,需要对“…/…/”特殊情况进行处理,避免白名单被绕过。
  5. 建议进一步对APP目录下的敏感数据进行保护。客户端APP应用设备相关信息(如IMEI、IMSI、Android_id等)作为密钥对敏感数据进行加密。使攻击者难以利用相关漏洞获得敏感信息。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值