在HTML5移动应用中挖掘XSS漏洞

标签: WEB安全 | 发表时间:2015-03-26 06:00 | 作者:Conermx
出处:http://www.freebuf.com

Linus ( @_zulln )是一位有着15年漏洞挖掘经验的瑞士黑客,本文就是他写的。

现在使用HTML5开发移动APP越来越受欢迎。HTML5不仅开发效率高,而且可以跨平台,代码重用性也很高。Zoho(全球第一大在线软件提供商,总部位于美国)是一个有着1300万用户的HTML5邮件系统,我打算挖挖他们的漏洞。

寻找Html和Javascript代码

首先我从Google Play上下载了APK,用解压软件打开。

assets文件夹中有很多html文件,html文件和javascript文件要比java文件读起来易懂很多。

翻了几下之后我发现mailDetail.html是用来显示邮件内容的,这里有一个漏洞非常有趣。

读了代码,懂了代码结构之后,发现它调用了setContent方法:

function setContent(contentToSet,margin){
    document.body.style.marginTop = margin + "px";
    document.body.style.marginBottom = "10px";
    setBaseURL();
    document.getElementById('mailcontentid').innerHTML = "";
    handleContentForMailThread($('mailcontentid'), contentToSet);
    androidResponse();
    }
function handleContentForMailThread(contentEl,value) {
    var ind = value.indexOf("<blockquote");// NO I18N
    if(ind < 0) {
    	addContentToElement(contentEl,value);
        return;
    }
    else
    {
        // removed 54 lines here for readability
    }
    }
function addContentToElement(contentEl,value){
	contentEl.innerHTML = value;
	addListener();
	}

如果你跟踪contentToSet变量(应该是邮件内容),你会发现javascript代码中没有对数据做任何转义操作,所以,如果有任何转义或者安全操作,都只能是在服务端做的,或者在java代码中做的。

确定邮件内容是否做过安全处理

最简单的办法就是在setContent函数的开始未知加入payload代码,比如alert(contentToSet),然后打包重签名。

我在apk 包中加入了如下几个payload:

test<jukk

http://test<jukk

http://test%3Cjukk

结果如下:

前两个payload被正确处理了,但是第三个payload(我事先对数据做了url编码)中显示了一个<尖括号。

貌似后台有一个黑名单,如果时间足够,这些黑名单肯定可以被绕过,但是我对手工fuzzing已经无感了,所以我走了另外一条路。

逆向APK

我没有写过apk,所以我决定寻找webview相关的代码来读,当我找到从java传递数据到html的代码的时候,我被webView.loadUrl绊倒了,这明显可以执行javascript代码呀:

webView.loadUrl("javascript:initialize(" + myNumber + ");");

很明显zoho使用了跟上面类似的代码,才使得前面用url编码过得数据正确地显示出来。

通过使用dex2jar将apk逆向为.jar文件,我使用JD-GUI阅读这些jar文件,我搜索了setContent函数(之前提到的javascript函数),

this.webView.loadUrl("javascript:setContent(" + JSONObject.quote(this.content) + "," + i + ")");

正如你看到的,zoho使用了类似的代码。

总结

zoho使用了webview.loadurl方法来调用setContent方法,这告诉我们什么?用这种方式打开uri,里面的 javascript就会被执行,任何pct-encode ugo的代码都会被当做正常代码来执行。

下面这些代码很容易理解

// this line of code:location.href = 'javascript:setContent("%22-alert%281%29-%22")';// is the same as this:location.href = 'javascript:setContent(""-alert(1)-"")';

问题很明显,通过在邮件中的任意地方包含如下的payload,就可以在邮件客户端中执行任意javascript代码:

%22-alert%281%29-%22

总结

在我将这个漏洞报告给zoho几天过后,他们在Google Play上发布了新版,并且我收到邮件被告知已经有其他人给zoho报告了这个漏洞。

我觉得这个漏洞非常有趣,其他很多APP可能会有很多相似的漏洞。不过在使用HTML开发的应用中寻找漏洞比在web中寻找漏洞要难一些。让我们一起挖洞拯救世界,让互联网更安全吧!

[消息来源 detectify.com,翻译/Conermx,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)]

相关 [html5 移动应用 xss] 推荐:

在HTML5移动应用中挖掘XSS漏洞

- - FreeBuf.COM | 关注黑客与极客
@_zulln )是一位有着15年漏洞挖掘经验的瑞士黑客,本文就是他写的. 现在使用HTML5开发移动APP越来越受欢迎. HTML5不仅开发效率高,而且可以跨平台,代码重用性也很高. Zoho(全球第一大在线软件提供商,总部位于美国)是一个有着1300万用户的HTML5邮件系统,我打算挖挖他们的漏洞.

HTML5 杀不死移动应用

- clowwindy - 月光博客
  苹果在其对抗 FLASH 的过程中,是否让自己也限了进去. 通过明文禁止 Flash 应用到 iPad 和 iPhone 上,苹果迫使 Web 开发人员不得不放弃采用 Flash 技术. 可以说,苹果和乔布斯为 Adobe 公司的放弃移动 Flash 业务的最终决定“提供了很有价值的参考意见”.

jQuery Mobile开发HTML5移动应用

- - HTML5研究小组
随着移动互联世界的到来,目前已发展到多种移动 操作系统割据的局面,而开发者则急需要能运用原有的开发知识和技能,快速方便地构建移动应用程序,并期望能运行在不同的 手机操作平台上,比如Android,iOS,黑莓等. 而目前,出现了一批十分优秀的支持HTML5/CSS3的移动应用开发框架,其中最为大家熟悉的是jQuery Mobile框架(http:// jquerymobile.com),它可以让熟悉jQuery框架的开发者快速开发出基于HTML5的移动应用,而且直接通过 手机的浏览器即可浏览.

HTML5和本地化的对比:移动应用之辩

- Sai - 译言-电脑/网络/数码科技
来源HTML5 vs Native: The Mobile App Debate. 移动应用和HTML5是目前最热门的两种技术,其彼此间存在着大量的重叠之处. Web应用运行在移动浏览器上,而且它们也可被重新包装成运行在各种移动平台上的本地化(native)应用. 有着对范围广泛的各种平台的支持,结合了移动浏览器威力十足的强大功能,开发者正转向HTML5这一被称作“一次编写,多处运行”的解决方案.

HTML5会成为移动应用的天敌吗?

- 离歌 - 互联网的那点事
好几年后的今天,我们已经给手机应用程序设计了非常多的用途了. 手机应用程序依然是移动设备推出新服务或内容的首要选择. 你需要知道HTML5的五件事. “应用程序”的整体概念或许已悄然发生巨变,在未来的某一天,我们可能不再需要访问手机应用商店,不论是Apple的还是Google的,我们只需要点击手机主菜单页面上的一个链接,手机就会立即在它的浏览器上启动一个“应用程序”.

PhoneGap:免费开源的 HTML5 移动应用开发平台

- - HTML5研究小组
PhoneGap 是一个免费开源的开发框架,让 Web 开发人员能够使用熟悉的 HTML,. JavaScript 构建跨平台的移动本地应用. 通过 PhoneGap 框架提供的 JavaScript API 能够以非常简单的方式调用移动设备的核心功能,包括地理位置,摄像头,加速器,通讯录,多媒体,文件和网络等功能.

几种常用HTML5移动应用框架的比较

- - Web App Trend
对于Mobile Web来说,现在是快速成长时代. 由于采用了HTML5和CSS3技术,移动浏览器的性能加强了许多,同时,移动app的框架也扩展了,这意味着为移动设备创建丰富的互动的web体验的可行性又提升了. 采用诸如PhoneGap这样的封装软件,您就可以使用native app Store以及单个代码库,就可以分布式部署iPhone,iPad和Android等不同的目标平台了.

HTML5移动应用开发平台AppCan公测

- - 行业资讯
  编者按:HTML5专属时代正悄然来临,在这块角逐者众的竞技场,抢跑者无疑将更受瞩目. 3月6日,国内首个HTML5移动应用在线开发平台AppCan.cn正式公测,大家可以使用AppCan简单、快速、高效地开发HTML5移动应用. 之前在AppCan内测期间,小编初次体验EASY功能就大呼过瘾. 特意撰文一篇《如何在Android手机上开发出Android应用》,有许多开发者对此强烈关注,并且表示区区内测的1000个邀请码没有抢到.

HTML5移动应用开发的12大特性

- - 极客521 | 极客521
1.离线缓存为HTML5开发移动应用提供了基础. HTML5 Web Storage API可以看做是加强版的cookie,不受数据大小限制,有更好的弹性以及架构,可以将数据写入到本机的ROM中,还可以在关闭浏览器后再次打开时恢复数据,以减少网络流量. 同时,这个功能算得上是另一个方向的后台“操作记录”,而不占用任何后台资源,减轻设备硬件压力,增加运行流畅性.

文章: 基于HTML5和Javascript的移动应用架构

- - InfoQ cn
如果你认为你能够无视终端用户的移动化需求,那请记住:当个人电脑刚出现时,企业中的IT 部门也曾对它们有抵制情绪. 移动设备的激增正在促使IT部门做出改变,他们必须支持移动设备,并紧接着开发出友好的移动设备应用程序. 随着用户对移动设备越来越熟悉,他们对在移动设备浏览器中访问的应用程序的要求也越来越高.