应用克隆漏洞技术原理分析:以支付宝自动领红包为例

2024-10-18
来源:网络整理

*本文原创作者:本文属于原创打赏计划,未经许可不得转载。

前言

2018年1月9日,腾讯玄武实验室召开发布会,向公众公布并演示了“应用克隆”漏洞,称利用该漏洞,用户只需点击一个链接,用户的支付宝、携程等即可利用该漏洞。 APP的登录状态可以被克隆到其他用户的手机上,导致用户一度恐慌。恰巧这段时间,支付宝“天天领红包”活动如火如荼,出现了点击链接自动抢红包的方法。

以下是基于支付宝自动红包链接的“应用克隆”漏洞的技术分析。

支付宝自动收红包介绍

去年年底,支付宝推出了“天天领红包”活动。用户只需将自己的红包密码通过短信或微信发送给对方即可。对方复制消息并打开支付宝APP,即可获得支付宝红包。这个红包可以直接用于支付宝消费。消费后,推荐人将收到直接记入其账户的奖励。当然,你也可以直接让对方用支付宝扫描你推荐的二维码,效果也是一样的。这次事件持续时间长、激烈、羊毛很厚。于是,为了赚取赏金,大量用户开始展现自己的独特能力,比如下面这两位:

然后聪明的程序员建立了一个链接。对方只要点击这个链接,就会自动打开支付宝并领取红包,省去了扫描二维码、复制红包密码、手动打开支付宝APP等繁琐操作。元旦假期期间,笔者也尝试做了这样一个链接,在微信朋友圈发布了一个有吸引力的标题,一发布几十块钱的赏金就到了,确实比发布促销信息更有效率。很多:

技术原理

其实通过网页调用第三方APP并不是什么新技术,做过开发的人都应该很熟悉。支付宝、导航系统、各种手机播放器等APP都大量使用了该技术。例如,当通过网页打开视频播放界面时,旁边会有一个“在APP中播放”按钮。点击后会直接打开对应的视频。 APP继续播放之前的视频。要实现这个需求,只需要在定义的时候指定一个(协议),并设置一个名字为...这种在浏览器中通过自定义协议打开第三方应用的方法就可以称为“伪协议” (一般在浏览器中打开http、ftp等常规协议)。下图是支付宝。定义的伪协议:

接下来我们来分析一下支付宝红包推荐二维码。解析二维码,获取URL:。访问URL并抓包分析发现:

返回302并跳转到,

返回302跳转到

%3A%2F%%%%%%3D3.7.0.0718%%%253A%252F%%%%-

分析完最后一个URL,我们发现它的参数是启动支付宝的关键。网址解码:

scheme=alipays://platformapi/startapp?saId=10000007&clientVersion=3.7.0.0718&qrcode=https%3A%2F%2Fqr.alipay.com%2Fc1x05309e4ttz2v7xrwrzcd%3F_s%3Dweb-other

通过上面的参数,我们可以清楚地看到,这是一个启动支付宝的伪协议。启动时会向支付宝传递三个参数:saId,,,就是我们红包推荐的二维码链接。所以我猜测这个的作用就是打开我们指定的URL。接下来写一个简单的.htm页面来测试:

打开效果如下(您可以复制以下链接到手机浏览器测试):

浏览器成功启动支付宝APP,跳转到领取红包界面。至此,支付宝自动抢红包环节分析完毕。

扩张

在上面支付宝自动抢红包的伪协议中,我们可以看到,我们可以通过控制参数来控制支付宝打开我们指定的链接。这里只能打开支付宝的页面吗?我们用百度测试一下,构造如下URL:

alipays://platformapi/startapp?saId=10000007&clientVersion=3.7.0.0718&qrcode=https%3A%2F%2Fwww.baidu.com%2F

发现可以成功打开,效果如下:

这种接收外部传入的URL参数,然后加载到APP中的特性,就是下文所述的“应用克隆”漏洞的罪魁祸首。

应用克隆简介

2017年12月7日,国家信息安全漏洞共享平台(CNVD)收到腾讯玄武实验室报告的跨域访问漏洞(CNVD-2017-)。通过利用该漏洞,攻击者可以远程获取用户隐私数据(包括移动应用数据、照片、文档等敏感信息),窃取用户登录凭证,在受害者不知情的情况下实现对APP用户账户的完全控制。 。由于该组件在平台上应用广泛,大量APP受到影响,构成严重的攻击威胁。

支付宝领红包视频_视频红包领支付宝有风险吗_视频红包领支付宝怎么领

跨域

CNVD将应用程序克隆漏洞(CNVD-2017-)描述为“跨域访问漏洞”,所以我们首先来了解一下什么是跨域。讨论跨域时,我们自然会从浏览器的安全机制——“同源策略”开始。同源策略是众所周知的交互安全策略。这是隔离潜在恶意文件的关键安全机制。如果两个URL的协议、端口、域名相同,则认为两个URL同源,相互访问资源没有限制。例如,中的脚本可以发起ajax请求并获取响应内容。但是,如果请求中的脚本向它发出请求,就会被禁止,因为此时两者属于不同的源,这种被禁止的请求称为跨域请求。同源策略给很多正常的Web业务场景带来了不便,因此CORS、CORS等合法的跨域机制应运而生。

文件协议

文件协议主要用于访问本地计算机中的文件,就像在资源管理器中打开文件一样。比如我想查看本地/etc/文件的内容,可以直接在浏览器中输入file:///etc/。快来参观吧。当然,我们也可以通过浏览器访问本地的html文件,文件中也可以嵌入脚本。在脚本中,你可以继续访问File协议,这样你就可以读取该进程有读取权限的所有本地文件的内容。这看起来没什么问题,毕竟所有的数据操作都发生在本地。不过,有一个 API 叫做。当该API的设置值为True时,实际上开启了File协议的跨域机制。 File协议中的脚本可以跨域访问其他协议,例如http,因此存在一个问题:攻击通过加载本地恶意html文件,这个html文件会读取本地敏感文件内容,并将内容发送到远程服务器通过http请求。这就是“应用程序克隆”漏洞的根本原因。

从上面的描述我们可以得出,如果想要成功利用应用克隆漏洞,至少需要满足以下要求:

1、攻击者可以外部调用被攻击APP并指示其加载本地html文件。从上一篇文章中我们了解到,通过向支付宝传递参数,可以指示其访问指定的URL。但经过实际测试,这个URL不可能是File协议,所以无法指定支付宝访问本地html文件。

2. 被攻击APP的URLs值为true。这个条件更加严格。在.1之前的版本(2012年发布)中,该选项默认为True,在更高版本中,默认值为.1。所以除非APP是很老的版本,或者新版本有很特殊的业务需求,否则不会设置为True。

3、攻击者需要在被攻击手机上下载一个html文件,并保存在File协议可以访问的位置。旧版本存在多个漏洞,允许系统内置浏览器在无需用户交互的情况下将 HTML 文件静默下载到默认下载目录。即使现在,最新版本仍然可以通过访问链接将 html 文件直接静默下载到默认下载目录:

<%

response.setHeader("Content-Disposition","attachment;filename=autodown.htm");

out.print("");

%>

将以上代码保存为down.jsp,然后通过for访问即可自动下载.htm文件到///目录下。

如果同时满足以上三个条件,就可以达到“应用克隆”的效果。

示例演示

由于支付宝最新版本并未同时满足上述三个条件,因此即使是“应用克隆”漏洞发布会召开之前的支付宝多个历史版本也无法同时满足“应用克隆”条件。这里我就用一个我自己写的APP来作为案例演示。

该APP实现以下功能:

1、与支付宝类似,APP可以通过伪协议被浏览器调用,并且可以接受浏览器传递过来的URL参数,并调用APP内部的组件来加载URL。

2.提供本地登录功能。登录成功后,会持久化在APP中。下次打开APP时,会自动读取APP进行身份验证。每次打开APP无需重新登录。

一般情况下,首次打开APP时,会要求用户输入用户名和密码:

登录成功后,主页面会显示登录的用户名及信息:

接下来,构造恶意html文件下载到手机上。内容如下:

test by me!

然后我在服务器上准备了一个.jsp文件来接收来自被攻击手机的数据。接下来,我准备了两台手机A和B,我在手机A上登录了用户,在手机B上登录了用户,然后在手机B上登录了用户,在用户的手机上打开了恶意链接手机B上登录的用户就变成了。通过对方点击链接,我们成功获取了对方的信息,实现了“克隆”。

演示视频:

国防建议

1. 如果APP支持.1之前的版本(API 16),请设置或显示为 。前面提到,“ ”应用克隆漏洞的本质是文件协议中的js读取本地文件内容并通过http、ftp等协议跨域发送。因此,为了阻止跨域文件协议,需要在文件协议中设置阻止js读取本地文件内容。

2、如果以上两个选项无法满足业务需求,可以对加载的URL进行白名单限制。

总结

事实上,这个漏洞并不是一个新漏洞。这两个API长期以来都是常规安全加固项的排查对象之一。发布会上提到的“新攻击模式”只是文件众多跨域攻击向量之一。

*本文原创作者:本文属于原创打赏计划,未经许可不得转载。

分享