Tiktok安全漏洞分析

日期:2020-08-16

Tiktok(抖音国际版)安全漏洞分析

 

Tik Tok是抖音短视频国际版,在全球150个应用商店可以下载、超过75种语言、有超过10亿用户。截至2019年10月,Tik Tok是全球下载量最多的app之一。

 

但在过去几个月里,Tik Tok收到了一些不同的声音,据美国《华盛顿邮报》1月1日报道,因被认为是“网络威胁”,美国陆军禁止官兵使用字节跳动国际产品TikTok。美国海军近期也曾发布禁止在手机上使用TikTok的命令,称没有卸载该应用的手机禁止使用海军内部网络。

在近几个月里,Check Point研究人员也发现了TikTok应用的多个安全漏洞。攻击者利用这些漏洞可以:

· 接管Tik tok账户,并修改账户内容

· 删除视频

· 上传未授权的视频

· 使隐私的隐藏视频公开

· 泄露保存在账户中的个人信息,如邮箱地址

Demo PoC攻击视频:

https://research.checkpoint.com/wp-content/uploads/2020/01/tiktok_video.mp4

技术细节

SMS链接欺骗

研究人员发现可以以TikTok的名义发送SMS消息到任意手机号码。在TikTok网站www.tiktok.com上有一个功能可以让用户发送一个SMS消息给自己来下载应用:

 

想要发送SMS消息给受害者的攻击者可以使用代理工具拦截HTTP请求。Mobile参数中含有要发送SMS消息的手机号码,download_url参数就是SMS消息中要出现的链接:

 

合法的SMS消息:

 

修改download_url 参数会生成一个含有攻击者可以输入的链接的SMS消息。

下图证明了伪造的含有恶意链接的SMS消息。在证明中,研究任意使用了链接https://attacker.com:

 

伪造的SMS消息中含有链接https://attacker.com

 

Deep links

在逆向TikTok app安卓版过程中,研究任意发现了一个“deep links”功能,可以通过浏览器链接来调用app中的intent。

应用监听的 intents 有“https://m.tiktok.com” schema和“musically://” custom schema:

 

利用SMS链接欺骗漏洞的攻击者可以发送一个含有上面提到的schema的定制链接。因为定制的链接含有url参数,手机应用会打开一个webview窗口,并从手机应用中打开参数中url对应的web页面。所有发送的请求都使用用户的cookies。

为了证明,研究人员使用了下面的链接:

 

下面的截图证明了对deep link的解析:

 

手机app打开了一个web view窗口,并访问了攻击者控制的web服务器http://10.10.10.113:8000,因此攻击者可以以用户的名义去发送请求。

域正则表达式绕过重定向

在研究过程中,研究人员还发现可以发送恶意链接给受害者实现重定向受害者到恶意站点的目的。重定向后就可能在无需用户同意的情况下实现XSS、CSRF和敏感数据泄露等。

当攻击者发送来自Tiktok域名 https://login.tiktok.com的合法登陆链接时就会发生重定向。

研究人员发现登陆请求中可以含有HTTP GET参数redirect_url,这是用户成功登陆后重定向的登陆请求地址https://login.tiktok.com/?redirect_url=https://www.tiktok.com

 

 

 重定向参数会根据以下验证regex重定向受害者到tiktok的域名web页面:

 

因为验证regex并没有适当地验证redirect_url参数的值,因此重定向过程是有漏洞的。Regex会验证tiktok.com结尾的参数值,使得可以执行重定向到任意tiktok.com。

本例中,攻击者重定向用户到http://www.attacker-tiktok.com,并执行了前述攻击。

XSS攻击

分析过程中,研究人员发现Tiktok的子域名https://ads.tiktok.com 存在XSS漏洞,利用该漏洞可以注入恶意脚本到可信的站点。

Ads子域名中含有一个帮助中心,其中可以找到如何在Tiktok上创建和发布广告的信息。帮助中心站点https://ads.tiktok.com/help/中含有一个搜索漏洞。

XSS攻击的注入点就位于搜索功能。攻击者在尝试执行搜索时,会执行一个到web应用服务器的HTTP GET请求,其中含有参数q,参数值未搜索的字符串。

下面的截图是攻击者执行的一个合法的搜索,搜索的字符串为“pwned”:

https://ads.tiktok.com/help/search?q=pwned

 

攻击者尝试注入JS代码到q参数中(注入的值是URL编码)。

为了进行证明,研究人员弹出了一个alert窗口,内容为XSS:

https://ads.tiktok.com/help/search?q=%22%3Cscript%20src%20%3Djavascript%3Aalert%28%29%3E 

 

以用户名义发起攻击

CSRF

此时,有两种不同的方法来以点击了攻击者(研究人员)发送的链接的受害者的身份执行JS代码:XSS和开放重定向。

由于缺乏反XSS请求伪造禁止,研究人员发现可以执行JS代码和在受害者不知情的情况下以受害者的身份来执行动作。

删除视频

删除视频可以通过到https://api-t.tiktok.com/aweme/v1/aweme/delete/?aweme_id=video_id 的HTTP GET请求来实现。

使用上面提到的JS执行,研究人员可以发送含有攻击者想要删除的视频的video_id的HTTP GET请求。

下面的截图是请求删除video id为6755373615039991045的视频的请求:

 

Web服务器响应表明该视频被成功删除:

 

创建视频

为了在受害者视频流中创建视频,攻击者首先需要在自己的视频流中创建视频。创建视频请求会生成一个新的video id。此时,攻击者需要复制视频创建请求,并释放。

然后使用前面提到的JS代码执行,攻击者就可以发布复制的视频创建请求,然后以受害者的身份来发送给HTTP POST请求。

下图证明了受害者视频流中的视频创建请求:

 

服务器响应表明该视频成功创建:

 

关注

要想关注受害者账户,首先要发送一个请求到受害者,然后受害者需要同意该请求。

为了同意关注者的请求,攻击者使用前面提到的JS执行方法,并以受害者名义发送一个批准请求。

批准请求就会被发送,HTTP POST请求如下路径:

https://api-m.tiktok.com/aweme/v1/commit/follow/request/approve

POST请求中有一个参数from_user_id,其中含有要关注的用户的user id。

攻击者可以修改from_user_id参数的值为自己的id,并发送请求到Tiktok服务器:

 

此时,攻击者就成为受害者的关注者了:

 

将私密视频修改为公开视频

为了将视频从私密视频修改为公开视频,攻击者必须要知道视频的video id。如果攻击者是受害者的关注者,那么就可以提取出视频id。

一旦攻击者拥有了私密视频的video id,就可以以用户的名义发送一个HTTP GET请求来修改视频的隐私设置。

https://api-m.tiktok.com/aweme/v1/aweme/modify/visibility/?aweme_id=video_id&type=1&aid=1233&mcc_mnc=42503

 “type=1”表明请求的视频会被修改为公开视频,而“type=2”表明请求的视频会被修改为私密视频。

下图是一个证明将视频id 6755813399445261573从私密视频修改为公开视频的HTTP GET请求:

 

服务器响应表明该视频是公开的:

 

敏感数据泄露

研究人员发现可以使用XSS来执行代码或用其他方法来提取隐私信息。研究人员在https://api-t.tiktok.com和https://api-m.tiktok.com 子域名中发现了多个API调用。

请求上面提到的API会泄露用户的一些敏感信息,比如邮件地址、支付信息、生日等。

研究人员在尝试利用上面提到的JS执行漏洞时发现了一个问题——CORS(Cross Origin Resource Sharing,跨域资源共享)机制和SOP(同源策略,Same Origin Policy)安全限制。

看起来API子域名只允许特定的源来发起请求,比如www.tiktok.com。下图是一个来自https://cpr.checkpoint.com 的API请求:

 

由于安全限制,响应被拦截了:

 

所以要想提取出上面提到的敏感信息,必须要绕过CORS和SOP的安全限制。

研究人员发现Tiktok实现了一些非常规的JSONP回调,提供了一种在没有CORS和SOP限制的情况下从API服务器请求数据的方法。

通过触发到JSONP回调的AJAX请求就可以窃取受害者的所有敏感信息,获取JS函数封装的JSON数据。

 

 

 

 

 

新聞來源: https://mp.weixin.qq.com/s?src=11&timestamp=1597586018&ver=2526&signature=-KaH7U01yR4NUIn25RV0oFVFp4ilc5vm9GPCNGojoYaqYW1xwAQgzy62hA-OWCq5cfmQrD0KjyoPK*Q0TT0XLzHQadJli*I13zkWFW2N16ruCXLkm*GTOn7b8Fw-6ud8&new=1

 

分享到: