Check Point研究人员在TikTok中发现了一个安全漏洞,攻击者利用该漏洞可以窃取用户个人简介和绑定的手机号,用于下一步的攻击活动。
1月26日,Check Point研究人员发布文章称发现了TikTok移动客户端friend finder特征中的一个安全漏洞。攻击者利用该漏洞可以将个人简介信息与手机号就行关联,攻击者成功利用该漏洞可以建立一个用户与相关手机号的数据库。漏洞影响绑定了手机号或以手机号登陆的用户。
Syncing Contacts联系人同步特征
TikTok移动客户端允许进行联系人同步,也就是说用户可以同步联系人到更容易发现注册了TikTok的朋友。同步过程有2个请求组成:
- 上传联系人;
- 同步联系人。
对用户通讯录中的每个联系人,TikTok都会构建一个包含以下3个属性的JSON:
- Invited – “False”.
- Name – 使用SHA 256算法哈希的值;
- Phone number – 使用SHA 256算法哈希的值。
将JSON加入列表中,继续上传通讯录:
TikTok使用到https://api16-normal-c-alisg.tiktokv.com/aweme/v1/upload/hashcontacts 的HTTP请求来上传联系人。联系人会以contact 参数中的JSON 列表发送。
比如,单个联系人如下:
- Name: Testing Tester
- Phone number: +972555555555
TikTok会发送以下JSON 列表作为contact参数的值:
上传联系人到TikTok服务器的完整HTTP 请求如下所示:
同步联系人
上传联系人请求完成后,TikTok移动客户端就会发送一个sync 同步请求来提取所有与发送的手机号关联的个人简介。
发送到 https://api16-normal-c-alisg.tiktokv.com/aweme/v1/social/friend 的HTTP请求如下所示:
应用服务器响应含有个人简介列表、哈希的手机号、个人名字、唯一id、个人简介照片、个人简介特征等。
限制
上传和同步联系人请求每天、每用户、每个设备限制在500个以内。
研究问题
单个用户查询TikTok数据库是否会引发隐私问题?
(1) Step 1 – 创建设备列表(注册物理设备)
每次启动后,TikTok移动客户端都会执行设备注册过程来确保用户没有在设备之间进行切换。设备注册的过程是用到https://log-va.tiktokv.com/service/2/device_register 的请求来完成的:
根据HTTP请求中发送的数据,应用服务器会生成一个唯一的device_id token。该token是强制的,并且会应用生成的每个API请求一起发送给应用服务器。
(2) Step 2 – 创建不过期的session token列表
通过SMS登陆只能通过物理设备来进行,是通过发送给https://api16-normal-c-alisg.tiktokv.com/passport/mobile/sms_login_only 的HTTP 请求来实现的。请求的body部分包含有手机号和一次性验证码编码的参数。
服务器会验证数据,并生成唯一的X-Tt-Token token。此外,服务器还会设置会话的cookie。
研究人员分析发现会话cookie和X-Tt-Token 值的过期时间都是60天,也就是说8周内使用的cookie都是相同的。
TikTok HTTP消息签名
研究人员抓取了TikTok的HTTP 请求发现,TikTok移动客户端使用了消息签名机制来语法攻击者修改消息和请求的body部分。
消息签名机制要求服务器验证的X-Gorgon 和X-Khronos header,否则数据不能被请求。
(3) Step 3 – 绕过TikTok HTTP 消息签名
在拥有了device_id和X-Tt-Token token,以及2个月都不会过期的cookie后,就可以使用虚拟设备来替代真实的物理设备了。
研究人员在测试张使用了运行安卓6.0.1的Genymotion 模拟器,并安装了TikTok移动客户端。
研究人员进行动态分析发现TikTok移动客户端在后台会执行一个消息签名的服务。签名服务是com.bytedance.frameworks.baselib.network.http 包的一部分。
签名过程首先是一个一个方法开始:
攻击者可以使用Frida这样的动态分析框架来hook函数,修改函数的参数数据,然后对请求进行重新签名。因此,攻击者可以使用该服务来对修改后的请求进行签名,创建更新的X-Gorgon和 X-Khronos header值,并发送修改后的请求到TikTok应用服务器。
PoC
有了以上能力,就可以修改HTTP请求和对请求重新进行签名。研究人员写了一个Frida脚本来自动进行消息重新签名的过程,具体如下:
启动HTTP 服务器,监听4000 端口:
分析HTTP POST请求,并提取出请求签名的数据:
使用前述方法对修改后的请求重新签名:
返回更新的X-Gorgon 和 X- Khronos签名:
攻击的最终结果可以获取含有账号和手机号的数据库,引发数据和隐私泄露。
本文翻译自:
https://research.checkpoint.com/2021/tiktok-fixes-privacy-issue-discovered-by-check-point-research/
【责任编辑:赵宁宁 TEL:(010)68476606】