Tiktokが抱える色々な問題について(XSS,CSRF脆弱性など)
みなさん一度は耳にしたことがあると思います。 若者に大流行! と言われているくらいなので、使っていない私はもう若者ではないのかも。。。
と今更ながら思っている悲しみ。。。
少し調べてみると、こんな記事が
記事によると、TiktokはFacebook、Twitter、Instagramに並ぶ世界的SNSになろうとしているようです。
確かに、MMD研究所が示す資料を見てもTiktokも徐々に利用率を伸ばし始めていることが示されていますね。
先ほどの、ダイアモンドの記事では、Facebook、Twitter、Instagramに追随しうる理由として、以下を挙げています。
- 「テキスト・画像から動画へ」という長期トレンドに沿っている。
- 「検索からレコメンドへ」という長期トレンドに沿っている。
- プラットフォームとして確固とした強みがある。
- 母体となる運営会社の実力が図抜けている。
- SNSとしての設計、運営戦略が優れている。
詳しくは、記事の参照を見ていただきたいとことですが、果たして、これがどこまで行くか、注目ですね。
という記事にしたいのではなく、本題はこちら。
CheckPoint社の調査によりTiktokに容易に悪用可能な脆弱性が複数含まれることが明らかになりました。
端的に言うと、脆弱性の悪用により様々な攻撃が可能になります。
- Tiktokのアカウントを乗っ取り、アカウントのコンテンツを操作できる
- 動画の削除ができる
- 第三者により動画がアップロードできる
- 非公開動画を公開状態に変更できる
- 攻撃者がアカウントに紐づく個人情報を取得できる
これらについて、簡単なでも動画があるのでご紹介します。
https://research.checkpoint.com/wp-content/uploads/2020/01/tiktok_video.mp4?_=1
以降にて、CheckPoint社の調査内容について、詳しく紐解いていきます。
目次
- Tiktokに対する規制の動き
- 具体的な攻撃手法
- パート1 SMS Link Spoofing
- パート2 クロスサイトスクリプティング
- パート3 クロスサイトリクエストフォージェリ
- 動画の削除
- 動画の作成
- フォロワーへの追加
- 非公開動画の公開
- ユーザ情報の公開
- まとめ
Tiktokに対する規制の動き
年末ごろから、Tiktok利用に関する米国の規制が話題になっています。
発端は、カリフォルニア州の大学生が起こした集団訴訟にあると考えられます。
訴状によると、2019年4月にTiktokがユーザー情報を中国が管理する2つのサーバー(bugly.qq[.]com と umeng[.]com)に転送しており、転送された情報には、ユーザーが利用している端末や閲覧したウェブサイトの情報が含まれていたとのことです。
Tiktok側の主張として、米国のユーザー情報はすべて米国内に保存しており、データのバックアップはシンガポールにあるとのことですが、中国のサーバへの転送問題には言及していないとのことでした。
論点のすり替え感が否めない。。。笑
12月21日にロイターが公開した記事によると、米海軍が17日の軍関係者向けFacebookページにて、 「TikTokを削除しないデバイス利用者は、海軍および海兵隊のイントラネット(NMCI)」と伝えたとのことでした。
つまり、「政府から支給されたiPhoneやiPadなどにTiktok入れちゃだめだよ」みたいな話ではあるんですが、 個人的には「そりゃそうだろ!」なんて思うところです。
日本企業だとSNS自体社用スマホに入れるのNGな気がしますが、 米海軍では、一般的なSNSを含む一般的な商用アプリの使用は可能だとされているようですね。
また、NewYorkTimesによると、すでに2019年10月には、フロリダの上院議員が対米外国投資委員会に対し書簡を送り、TikTokが国家安全保障レビューにかけていることを報道しています。
そして、後日、米国陸軍においても、Tiktokが使用禁止になったことをMilitary.comが認知したとのことでした。
HUAWEIの時もそうでしたが、この手の問題は引き続きいろいろな形で噴出しそうですね。
特に、中華系アプリが、アメリカに進出すればするほど。
長くなりましたが、以降でTiktokを使った攻撃手法について、ご紹介します。
具体的な攻撃手法
パート1 SMS Link Spoofing
まずは、Tiktokが招待用に送るSMSに関する脆弱性です。
Tiktokが新しいユーザを招待するときに、SMSを使って、招待リンクを送ることができます。
ただ、この招待メッセージを生成する過程で、Webページに入力した電話番号に送る前のリクエストをBurpSuiteなどのプロキシツールで書き換えることができてしまうのです。
本来のリクエストに含まれる、download_urlの部分を
任意の値 https[:]//attacker[.]comに変えることで、
生成されるはずだったリンクが
こうなってしまうわけです。
まあ簡単(笑)
これに対して、他にも工夫ができてしまうので、いくつかご紹介です。
カスタムリンクの悪用
Tiktokのアプリケーションでは、https[:]//m.tiktok[.]comスキーマと「musically[:]//」カスタムスキーマをリッスンしており、これらのカスタムリンクではurlパラメータを含みます。
簡単に言うと、このurlパラメータを任意の宛先(ここでは、http[:]//10.10.10[.]113[:]8000)を指定することで、攻撃者の管理するサーバへ通信させます。
ドメイン正規表現を利用したオープンリダイレクト
Tiktokの正式ドメインから派生したリンク https[:]//login.tiktok[.]comに通信するときに、リダイレクトが行われます。
ただ、このリダイレクト時もredirect_urlというパラメータを含めることができます。
https[:]//login.tiktok[.]com/?redirect_url=https[:]//www.maricious-tiktok[.]com
例えばこんな感じにすると、攻撃者が用意した宛先にリダイレクトされてしまいます。
ここで問題なのが、redirect_urlは正規表現で判定しているのですが、
こんな感じで、攻撃者がこの正規表現に合致するドメインさえ持っていれば、簡単にアクセスできてしまうわけですね。
ちなみにお名前ドットコムだと初年度760円から利用できるので、おこずかい感覚で買えてしまいますね。
https://www.onamae.com/service/domain/com/
パート2 クロスサイトスクリプティング
パート2は、tiktokサイトの作りこみの甘さを指摘する形になってしまいますが、
https[:]//ads.tiktok[.]comがXSSの脆弱性を含むことが分かっています。
具体的には、https[:]//ads.tiktok[.]com/help/で利用可能なヘルプセンターに、検索の脆弱性があるとのことです。
例えばこんな感じで、入力すると https[:]//ads.tiktok[.]com/help/search?q=pwned
つまりここでいう、q=pwnedの部分をJavaScriptコードに書き換えると、
攻撃者が意図した動作、つまり、警告ウィンドウのポップに成功しています。
これを悪用することで、https[:]//ads.tiktok[.]comのサーバに可能な権限の範囲でいろいろなことができてしまいます。
パート3 クロスサイトリクエストフォージェリ
今回の脆弱性のうち、最もわかりやすい被害が出るのがこのパートです。
HTTPリクエストの加工のみで簡単に実行可能になります。
一つ一つ追ってご紹介します。
動画の削除
https[:]//api-t.tiktok[.]com/aweme/v1/aweme/delete/?aweme_id = video_id
と、GETリクエストを送るだけで実行可能です。
tiktokに投稿される動画には識別子として動画IDが付与されるため、この動画IDをパラメータとして含め、リクエストを送ります。
レスポンスコード200
うまくいったようです。
動画の作成
ここでは、攻撃者がまず、自身で動画を作成するリクエストを生成し、そのリクエストを一度プロキシで止めたのち、新たな動画IDを利用することで、任意の動画を別のユーザに対しPOSTで送りつけることができるとのことです。
フォロワーへの追加
基本的には、これまでと同じような流れですが、フォロワーの承認も簡単にできます。
https[:]//api-m.tiktok[.]com/aweme/v1/commit/follow/request/approve
上記のパスに対し、POSTリクエストを送るわけですが、from_user_idの値を変更することで、攻撃者の任意のアカウントが、対象となるアカウントのフォロワーになることができます。
非公開動画の公開
続いて、非公開動画の公開設定です。
こちらは以下のパスに対してリクエストを送ります。
https[:]//api-m.tiktok[.]com/aweme/v1/aweme/modify/visibility/?aweme_id=video_id&type=1&aid=1233&mcc_mnc=42503
ここでいうところの、typeパラメータが 1 だと公開、2 だと非公開になるようです。
つまりここの設定を変えるだけでした。
ユーザ情報の公開
最後は、若干毛色が違うのですが、APIを悪用したものです。
TiktokのAPI用サブドメインは、https[:]//api-t.tiktok[.]comもしくはhttps[:]//api-m.tiktok[.]comで指定され、Cross Origin Resource Sharing (CORS)やSame Origin Policy (SOP) の制限がかかっているため、特定の送信元以外からのリクエストには応答しないようになっています。
こんな感じで、失敗してしまいます。
ただし、TiktokにはCORSやSOPの制限を受けずAPIサーバからのリクエストを受けるJSONPコールバックのカスタム実装がなされていることがCheckPointの調査によって発見されました。
JSONPインジェクションについては、以下のブログで簡単に解説されていました。
これにより、APIリクエストの応答に含まれる機微な情報が取得できてしまいます。
まとめ
なんだか、これだけで、Web通信にかかるありがちな攻撃のチュートリアルみたいになってしまいましたね。
もちろん悪用は厳禁ですし、モラルを守るようにしましょう。
こういった記事を書くときに難しいのは実際にやってみないとわからないけど、一歩間違えると犯罪になってしまうリスクがある点ですよね。
どうしても試してみたい人は、アプリケーションの開発ベンダに入社するか、自分で作るか。