どうもこんにちは、MooseLoveです。
先日、私が HackerOne を介して企業に報告した脆弱性(XSS)が無事、認定 されました。
認定されるまでかなりスパンがあり、その間 「バグバウンティの記事って少ねぇな...」 と思っていました。実際、私も情報収集にとても苦労しました。
そこで、今回は 資格マンだった私が脆弱性を報告するまでの過程 を記録していきます。
自分のスペック
- 高校3年生で 情報処理安全確保支援士試験 に合格(未登録)
- 胸を張って「出来ます!」と言える言語は Python のみ
- 現在は情報系の国公立大学に通う 1年生
- 大学前期は CTF に参加 したり、HackTheBox で脆弱性について学習
バグバウンティってなに?
知らない人はこの記事見てないと思いますが、一応...
要するに 企業に脆弱性を報告し、対価として報酬を貰う ことです。
脆弱性というのは、例えば私が今回報告した XSS(クロスサイトスクリプティング) だったり、 SQLインジェクションといった基本情報技術者試験などで耳にするシンプルなものから、 CSRFや認証の不備といった(個人的に)複雑なものまで様々です。
前置きが長いブログは嫌いなので、ちゃっちゃと本題に入っちゃいますね。
さあ、最強のバグハンターになるぞ!
前期でバグバウンティについての机上の学習を終えた私は、
一番有名なバグバウンティプラットフォームである HackerOne に登録し、報酬が発生しない競争率の低いプログラムである VDP に手を付け始めました。
(HackerOne様にはゴミみたいなレポートを多数読ませてしまい、とても迷惑を掛けてしまいました。しかし丁寧な対応をしていただける素晴らしいプラットフォームです。)
脆弱性、滅びる
うん、ガチで 無い。
いっくら探しても見つかりません。
「他のバグハンターがどのように脆弱性を見つけているのか」 イメージが湧かず、
とても脆弱性とは呼べないものをレポートとして送信してしまったり、GitHubでいろんな人が作成したツールを入れたりしてましたが、うまく活かせてませんでしたね。
この頃私が使っていたツールは以下の通り。
- BurpSuite(通信の傍受)
- Subzy(Subdomain Takeoverの検出ツール 精度は…)
- Dirsearch(ディレクトリ探索)
一度まぐれで 403Bypass を発見したのですが、
機密情報とは程遠い下書きページのようなものが表示されただけで、
もちろん報告しても脆弱性とは認定されませんでした。
挑戦から一か月が経った頃、このままだと一生発見できないなと思い始め、
世のバグハンターはどのように脆弱性を見つけているのかが気になり始めました。
今考えれば、ここから明らかにバグハントの要領が変わった と思います。
情報収集
YouTubeで 「BugBounty PoC」 と検索すると、
世のバグハンターたちが発見した脆弱性を見つけるまでの過程をキャプチャしている動画が多数見つかります。
CTFで言うWriteUpみたいな感じですね。
私は 「CodePrefer」 というYouTubeチャンネルがめちゃくちゃ参考になりました。
このチャンネルのお陰で、私の知らなかった脆弱性を知ることも出来ましたし、
バグハントのイメージを掴むきっかけにもなりました。
🔗 CodePrefer チャンネル
📺 https://www.youtube.com/@codeprefer9108
さあ、リベンジだ!
このYouTubeチャンネルを見る前よりも、
「ここ、脆弱性あるかも?」 と思う回数が明らかに増えましたね。
これまではユーザーが入力出来るフォームぐらいしか見てませんでしたが、
この頃からは ユーザー登録の過程からBurpSuiteで傍受し、OTP Bypassを試したり、アイコンをアップロード出来る機能でRFIを試したり。
とにかく チャンス が増えましたね。
...まあ、全然見つからないんですけど。
そして遂に...
情報収集を終えて2週間ほどが経過したある日、お風呂に入っていると、
突如天啓のように 「昨日調べたAIチャット機能のあるサイトにRCE脆弱性があるのでは?」 と思い浮かびました。
しかし肝心の ドメイン名が思い出せず、
HackerOneが公開している色々な企業のサイトを確認していました。
そのとき、少し気になるサイトが...
詳しくはお話できませんが、そのサイトはログインフォームでした。パラメータがGET方式で長々とあり、その中にredirecturlというものがありました。
この時点で私は「オープンリダイレクト」の脆弱性があると考え、試したが失敗。不貞腐れながら残りのパラメータを眺めていると、もう1つ、リンクを持つパラメータが。
試しにgoogleのURLを入力すると、なんとgoogleに遷移。オープンリダイレクトです。この時点で胸がドキドキワクワク状態だったのですが、ここで学んだ知識を思い出します。
javascript:alert(1);
そういやこういうXSSがあったな...確かブラウザがjavascript:で始まるURLを「実行可能なスクリプト」として扱うんだ。ひとまず1を適当な文字に変えて試すか...
頭がパニック状態です。まさかまだ脆弱性が存在するなんて...
これは完全にXSSです。このサイトにログインしているユーザーにこのXSSを利用したURLを踏ませれば、アカウントの乗っ取りや機密情報の漏洩のリスクがあります。
脆弱性報告は早い者勝ちです。他のバグハンターがこの脆弱性を報告する前に、ちゃっちゃとレポート書いておこう。
レポートを書こう!
ChatGPTとDeepL(翻訳サイト)を用いて私の稚拙な英語や知識を補っています。他のバグハンターが見れば鼻で笑われる程度の仕上がりではありますが、誰が見ても「脆弱性やん!」と分かるように、丁寧に、丁寧に仕上げました。
そして数日後...脆弱性が認定された証である「Triaged(Open)」の文字が!
今まで朝起きたらClosedされるのが当たり前だったので、変な汗が出ました。
最後に
オープンリダイレクトの方は脆弱性として認められなかったorz
やっぱりレポートの書き方がヘタクソなんですね、自分。
ということで総まとめなんですが、Youtubeで他のバグハンターのPoCを見るのがオススメ!といった話でした。
ここまで読んでいただきありがとうございました。