0. はじめに
最近、「ドコモ口座事件」などインターネット上のサービスの脆弱性に関するニュースを多く耳にします。プログラミングにバグはつきものですが、生み出した腫瘍は潰さないと、いつか高いコストを払うことになります。
私は、ちょうど1年前ごろからバグバウンティ(脆弱性報奨金制度)へ興味を持ちました。
バグバウンティとは、製品やサービスの脆弱性報告を外部のユーザーから受け付け、その対価に報奨金を支払う制度です。
この記事では、LINE Security BBPでバグを報告したら、$1,000いただけた話を紹介します。(報告から1年が経過し、既に修正されています)
1. 本当にあった脆弱性
LINEのタイムラインの一部に「ストーリー」と呼ばれる機能があります。
簡単に説明すると、Instagramの24時間だけ写真をシェアできる機能のLINE版です。
1年前、この機能は実装されたばかりだったので、つついたら何か出てきそうな雰囲気を醸し出していました。
そして、30分くらいのテストを続けた結果...ついにバグを発見!
バグは、投稿したストーリーを削除するためのAPI部分に存在しました。実際にLINEアプリが送信しているHTTPリクエストは下のようなものです。
POST /st/api/v2/story/content/delete HTTP/1.1
Content-Type: application/json
Accept: application/json
X-Line-Signup-Region: JP
X-Line-ChannelToken: 認証トークン
X-Line-Mid: 認証ユーザーID
X-Line-Application: IOS 9.15.1 iOS 13.4.1
User-Agent: iphoneapp.line/9.15.1 (iPad; U; CPU iOS 13_4_1 like Mac OS X; ja_JP; g)
{"contentId":"0000xiOvGE-dwkbBF9zDkDeP0C9oFyZ4KmOqjC9NlpWre57G5t9ca1njQ-TqTaXHpX_kqcLgN24_sswlF89Q3sNUj1njVLXmH_ee49tVP6rijEAp0CYx0CettrTw9V9buRs-EeNIPXsICwQYC4UiHNi7XAg"}
このリクエストのcontentId
を他のユーザーが投稿したストーリーのIDに変更したところ、そのユーザーのコンテンツを勝手に削除する事ができました。
この脆弱性はIDOR(Insecure Direct Object Reference)という種類のもので、認証したユーザーがあるコンテンツに対してアクセス権限があるかをチェックし忘れているために発生します。
例えるなら、どの鍵に対しても空いてしまうドアです。
クレジットカードに固有の数字IDを付けて管理しているショッピングサイトで同じことが起きたらどうなるでしょうか?数字を変更するだけで、あなたのカードが他人に不正利用されてしまうかも...
単純なバグですが、大きな事故が起きる可能性が高いです!
2. 見つけた脆弱性の評価
-
contentId
は複雑で、推測は不可能だった - 友達であるユーザー以外のストーリーはアクセスできなかった
上のようなことから考えると、この脆弱性を悪用できる範囲は非常に狭いです。
報奨金の$1,000は割高に感じましたが、LINEがより安全なサービスを提供できるなら価値があります。
3. 優秀なLINE Securityチーム
これはLINE Security BBPに参加した個人的な感想です。
この脆弱性のレポートを送信したのは金曜日の深夜でしたが、なんと送信から1時間で修正されたので驚きのスピードでした。LINEは優秀なエンジニアリングチームを持っています!
事務的なやり取りも明確であったので、とても満足な対応です。
4. LINEのバグを発見したら
悪用せずにLINE Security Bug Bounty Programできちんと報告しましょう。規約に違反すると法的なリスクを負うことになります。
また、他のユーザーのために脆弱性についてのtipsを書き残すと良いです。
私は、このように情報をオープンにする事がセキュリティ業界の水準を押し上げると信じています!