🚨

GitHub OAuthアプリを使ったスパム攻撃を停止させる

2024/02/22に公開1

2024年2月21日ごろから、"Github Jobs"を名乗るGitHubの開発者ポジションをオファーするスパム攻撃が発生しています。

スパムのメール例

仕組みとしては、GitHubのIssueやPRでmentionをするとメールの通知が届くのを利用して、コメントでスパムメッセージを送りつけるものです。

以前からこのスパムは存在していましたが、今回おきた問題はGitHub OAuth Appを用意して、スパムコメントで24時間以内にここから申請してくださいという感じの誘導して、OAuthアプリの認証を行わせる攻撃が含まれていました。
このスパムOAuthアプリは、GitHubのprivateリポジトリの読み取りやコメントの読み書きなどの権限も持っていたため、このスパムアプリを認可してしまうと、その人のアカウントでさらにスパムコメントが増えるという問題が起きていました。

GitHub OAuthアプリが持っていた権限

詳細は、次のGitHub Discussionを参照してください。

このスパムアプリは次のようなフローで動いていました。

  1. https://auth.githubtalentcommunity.online/ というフィッシング用のサイトに誘導する
    • この誘導にGitHub Issue/PRのコメント通知を悪用していた
  2. そのサイトで、GitHubのOAuth Appの認可を行うリンクを踏ませる(10秒ぐらいで認証画面に自動的にリダイレクトもしていた)
  3. 認可すると、そのユーザーの権限でさらにスパムコメントを行う
    • リポジトリを取得する権限などもあったのでデータも盗まれている可能性はある
    • 現在はOAuth App自体が削除されているため、すでに権限は失効している

こういったOAuth Appの仕組みがあるサービスではよく起きる攻撃ですが、OAuth Appで強い権限を取得(ここ自体は正常フロー)して、その権限を使ってスパムを行うという手法です。
GitHubを名乗ったコメントでOAuthの画面に飛ばすので、間違えて許可してしまう人が多かったという感じだと思います。

スパムを止める

このGitHub OAuth Appのスパムを止めるためには、次のような方法があります

  1. GitHub OAuth Appを止める
  2. auth.githubtalentcommunity.online のドメインを止める
  3. auth.githubtalentcommunity.online をホスティングしてるサーバを止める
  4. Google Safe Browsingに報告する

1. GitHub OAuth Appを止める

GitHub OAuth AppをGitHubに止めてもらうことで、そのアプリを使ったスパムはできなくなります。

GitHubでは、コメントやユーザーページからスパムを報告することができます。
今回は途中からコメント権限を取得して別のアカウントでもスパムが継続していたので、若干難しいですが、
コメントでどういう攻撃かを伝えればGitHub側で対応してくれると思います。

2. auth.githubtalentcommunity.online のドメインを止める

Analyse a phishing site - phish.reportというサービスを使うと、
指定したサイトのabuseの報告先をまとめて知ることができます。

今回のauth.githubtalentcommunity.onlineのスパムが始まった時にスキャンした結果は次の通りです。

phish.reportのスクリーンショット

ドメインはGoDaddyで取得されていので、GoDaddyに報告することでドメインを止めることができます。

3. auth.githubtalentcommunity.online をホスティングしてるサーバを止める

最初は、auth.githubtalentcommunity.online は fly.io を使ってホスティングされていました。

そのため、fly.ioにこの問題を報告して、1時間後にはサーバが停止しました。(fly.ioから削除された)

2月21日(水) 13:15 に次のようなメール <abuse@fly.io> に送りました。

- Phishing App for GitHub: https://auth[.]githubtalentcommunity[.]online/

This app seems be hosted on Fly.io via https://phish.report/analysis/url_ddf6tk1wqr5s

This app is being used in attacks that force users to authenticate to the GitHub application, steal the repositories of those authenticated users, and further spread spam comments.

For more details, please see next discussions:
https://github.com/orgs/community/discussions/109171

2月21日(水) 14:32には次のような返事が返ってきて、サーバが停止しました。

Thanks for letting us know, this has been removed.

そのあと、攻撃者はサーバをAWS/EC2に移行して攻撃を再開していました。
ただ、この時にはすでにGitHub側でOAuth Appを削除していたため、攻撃はできなくなっていました。(サイトだけが動いてる状態)

もう一度 phish.report で確認するとAWSに移動していたので、AWSに同じように問題を報告しました。

phish.reportのスクリーンショット. AWSに移動してることがわかる

AWSにabuseを報告してこちらも大体1時間ぐらいで返事が返ってきました。

簡単なまとめとして、ホスティングサービスはこのような問題を報告すると、すぐに対応してくれるという感じなので報告してみることをお勧めします。

4. Google Safe Browsingに報告する

Google Safe Browsingは、Googleが運用しているフィッシングサイトをブロックする仕組みです。Googleと付いていますが、ここでブロックされるとFirefoxやSafariなどのブラウザでもブロックされるので、大体のブラウザでアクセスできなくなります。
また、GmailやGoogle検索などでもこの情報を使ってフィッシングサイトをブロックしています。

そのため、Webサイトの場合はGoogle Safe Browsingに報告するのは結構効果的です。
Google Safe Browsingには、次のようなフィッシングサイトの報告フォームがあります。

今回は、このフォームから報告して大体10時間後ぐらいにはブロックされていました。

Chromeのフィッシング詐欺警告

その他

ドメインのDNSを見ていて、herokudnsを使っているのがわかりました。

$ dig auth.githubtalentcommunity.online

; <<>> DiG 9.10.6 <<>> auth.githubtalentcommunity.online
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41211
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;auth.githubtalentcommunity.online. IN	A

;; ANSWER SECTION:
auth.githubtalentcommunity.online. 3600	IN CNAME sleepy-earwig-5x1s0ydr3d5vllh38363zqy4.herokudns.com.
sleepy-earwig-5x1s0ydr3d5vllh38363zqy4.herokudns.com. 60 IN A 54.237.133.81
sleepy-earwig-5x1s0ydr3d5vllh38363zqy4.herokudns.com. 60 IN A 54.161.241.46
sleepy-earwig-5x1s0ydr3d5vllh38363zqy4.herokudns.com. 60 IN A 52.202.168.65
sleepy-earwig-5x1s0ydr3d5vllh38363zqy4.herokudns.com. 60 IN A 18.205.222.128

HerokuにContact | HerokuからAbuseの報告を送ることができます。
こちらは特に返事はなかったですが、現在はDNSの設定も消えているようです。

まとめ

GitHubの人も書いていますが、スパムコメントなどがあっても反応せずにAbuseの報告をすることで、サービス側で対応してくれます。

フィッシングサイトを報告するときはphish.reportを使うと、どこに報告すればいいかがわかります。今回は色々報告してみて、ドメイン以外はすぐに対応してもらえてので、こういう問題があるときは報告してみるといいと思います。

Discussion

daisuke osadadaisuke osada

詳細なリポート感謝です。

ホストするサービスが充実したいま、どこで区切るか、通報すればよいか?を考えるきっかけになりました!