TikTok漏洞引發(fā)數(shù)據(jù)和隱私泄露
Check Point研究人員在TikTok中發(fā)現(xiàn)了一個(gè)安全漏洞,攻擊者利用該漏洞可以竊取用戶個(gè)人簡介和綁定的手機(jī)號,用于下一步的攻擊活動。
1月26日,Check Point研究人員發(fā)布文章稱發(fā)現(xiàn)了TikTok移動客戶端friend finder特征中的一個(gè)安全漏洞。攻擊者利用該漏洞可以將個(gè)人簡介信息與手機(jī)號就行關(guān)聯(lián),攻擊者成功利用該漏洞可以建立一個(gè)用戶與相關(guān)手機(jī)號的數(shù)據(jù)庫。漏洞影響綁定了手機(jī)號或以手機(jī)號登陸的用戶。
Syncing Contacts聯(lián)系人同步特征
TikTok移動客戶端允許進(jìn)行聯(lián)系人同步,也就是說用戶可以同步聯(lián)系人到更容易發(fā)現(xiàn)注冊了TikTok的朋友。同步過程有2個(gè)請求組成:
- 上傳聯(lián)系人;
- 同步聯(lián)系人。
對用戶通訊錄中的每個(gè)聯(lián)系人,TikTok都會構(gòu)建一個(gè)包含以下3個(gè)屬性的JSON:
- Invited – “False”.
- Name – 使用SHA 256算法哈希的值;
- Phone number – 使用SHA 256算法哈希的值。
將JSON加入列表中,繼續(xù)上傳通訊錄:

TikTok使用到https://api16-normal-c-alisg.tiktokv.com/aweme/v1/upload/hashcontacts 的HTTP請求來上傳聯(lián)系人。聯(lián)系人會以contact 參數(shù)中的JSON 列表發(fā)送。
比如,單個(gè)聯(lián)系人如下:
- Name: Testing Tester
- Phone number: +972555555555
TikTok會發(fā)送以下JSON 列表作為contact參數(shù)的值:

上傳聯(lián)系人到TikTok服務(wù)器的完整HTTP 請求如下所示:

同步聯(lián)系人
上傳聯(lián)系人請求完成后,TikTok移動客戶端就會發(fā)送一個(gè)sync 同步請求來提取所有與發(fā)送的手機(jī)號關(guān)聯(lián)的個(gè)人簡介。
發(fā)送到 https://api16-normal-c-alisg.tiktokv.com/aweme/v1/social/friend 的HTTP請求如下所示:

應(yīng)用服務(wù)器響應(yīng)含有個(gè)人簡介列表、哈希的手機(jī)號、個(gè)人名字、唯一id、個(gè)人簡介照片、個(gè)人簡介特征等。


限制
上傳和同步聯(lián)系人請求每天、每用戶、每個(gè)設(shè)備限制在500個(gè)以內(nèi)。
研究問題
單個(gè)用戶查詢TikTok數(shù)據(jù)庫是否會引發(fā)隱私問題?
(1) Step 1 – 創(chuàng)建設(shè)備列表(注冊物理設(shè)備)
每次啟動后,TikTok移動客戶端都會執(zhí)行設(shè)備注冊過程來確保用戶沒有在設(shè)備之間進(jìn)行切換。設(shè)備注冊的過程是用到https://log-va.tiktokv.com/service/2/device_register 的請求來完成的:

根據(jù)HTTP請求中發(fā)送的數(shù)據(jù),應(yīng)用服務(wù)器會生成一個(gè)唯一的device_id token。該token是強(qiáng)制的,并且會應(yīng)用生成的每個(gè)API請求一起發(fā)送給應(yīng)用服務(wù)器。

(2) Step 2 – 創(chuàng)建不過期的session token列表
通過SMS登陸只能通過物理設(shè)備來進(jìn)行,是通過發(fā)送給https://api16-normal-c-alisg.tiktokv.com/passport/mobile/sms_login_only 的HTTP 請求來實(shí)現(xiàn)的。請求的body部分包含有手機(jī)號和一次性驗(yàn)證碼編碼的參數(shù)。
服務(wù)器會驗(yàn)證數(shù)據(jù),并生成唯一的X-Tt-Token token。此外,服務(wù)器還會設(shè)置會話的cookie。
研究人員分析發(fā)現(xiàn)會話cookie和X-Tt-Token 值的過期時(shí)間都是60天,也就是說8周內(nèi)使用的cookie都是相同的。

TikTok HTTP消息簽名
研究人員抓取了TikTok的HTTP 請求發(fā)現(xiàn),TikTok移動客戶端使用了消息簽名機(jī)制來語法攻擊者修改消息和請求的body部分。
消息簽名機(jī)制要求服務(wù)器驗(yàn)證的X-Gorgon 和X-Khronos header,否則數(shù)據(jù)不能被請求。

(3) Step 3 – 繞過TikTok HTTP 消息簽名
在擁有了device_id和X-Tt-Token token,以及2個(gè)月都不會過期的cookie后,就可以使用虛擬設(shè)備來替代真實(shí)的物理設(shè)備了。
研究人員在測試張使用了運(yùn)行安卓6.0.1的Genymotion 模擬器,并安裝了TikTok移動客戶端。
研究人員進(jìn)行動態(tài)分析發(fā)現(xiàn)TikTok移動客戶端在后臺會執(zhí)行一個(gè)消息簽名的服務(wù)。簽名服務(wù)是com.bytedance.frameworks.baselib.network.http 包的一部分。

簽名過程首先是一個(gè)一個(gè)方法開始:

攻擊者可以使用Frida這樣的動態(tài)分析框架來hook函數(shù),修改函數(shù)的參數(shù)數(shù)據(jù),然后對請求進(jìn)行重新簽名。因此,攻擊者可以使用該服務(wù)來對修改后的請求進(jìn)行簽名,創(chuàng)建更新的X-Gorgon和 X-Khronos header值,并發(fā)送修改后的請求到TikTok應(yīng)用服務(wù)器。
PoC
有了以上能力,就可以修改HTTP請求和對請求重新進(jìn)行簽名。研究人員寫了一個(gè)Frida腳本來自動進(jìn)行消息重新簽名的過程,具體如下:
啟動HTTP 服務(wù)器,監(jiān)聽4000 端口:

分析HTTP POST請求,并提取出請求簽名的數(shù)據(jù):

使用前述方法對修改后的請求重新簽名:

返回更新的X-Gorgon 和 X- Khronos簽名:

攻擊的最終結(jié)果可以獲取含有賬號和手機(jī)號的數(shù)據(jù)庫,引發(fā)數(shù)據(jù)和隱私泄露。
本文翻譯自:
https://research.checkpoint.com/2021/tiktok-fixes-privacy-issue-discovered-by-check-point-research/
【責(zé)任編輯:趙寧寧 TEL:(010)68476606】