この記事は デジタル創作サークル UniProject Advent Calendar 2025 23 日目および 本番環境などでやらかしちゃった人 Advent Calendar 2025 の 19 日目の記事です。
11 月 13 日、その出来事は突然おこる
11 月 13 日、14 時手前、事態は突然発生しました。
なんと弊サークルの Discord サーバーにて荒らしが発生したのです。
何が起こったのか
まずは、すぐさま止めてメンバーを落ち着かせた上で、何が起こったのかを整理しました。
わかることとしては、以下の 2 つだけでした...
- Webhook が @everyone を連発した
- だいぶ昔に使っていたものだった
残念ながら、Discord の仕様では Webhook の @everyone を無効化する方法はないようで、URL が漏れたら一発でやられる仕様になっていました。
どこから URL は漏れたのか
まずは、Discord のメッセージを洗ってみたものの、発見には至らず...
ありそうなところと言えば、
- Discord に投稿してしまった
- プログラムに意図せずに組み込んだ
の 2 択かなと考え、GitHub のコミットを洗ってみました。
消したはずのコミット
やはり発見...しかし、このコミットは今の main ブランチからは外れたものでした。
つまり、このコミットは消したはずのコミットだったのです。
なぜこんなことが起きたのか
GitHub のドキュメントに記述がありました。
履歴を書き換えてフォース プッシュするだけの場合、機密データを含むコミットは他の場所からアクセスできる可能性があります。
- リポジトリのクローンまたはフォーク内
- GitHub のキャッシュされたビューで SHA-1 ハッシュを使って、直接
- それらを参照するプル リクエストを通じて。
つまり、消えたようで消えていなかったのです...
どうすればよかったのか
もちろんながら、Discord の WebhookURL を再発行すべきでした。
GitHub からデータを抹消するには、GitHub のサポートに問い合わせる方法も示されていますが、こちらは、機密情報のローテーションで対応できない場合のみです。
そもそも、クローンされているものに対して変更を加えられないので、そんなことは絶対に起こしてはいけませんし、普通に pre-commit などで検知してやるのがいいのかもしれません。
最後に
Credential を Slack に書くなという話も含め、機密情報の取り扱いには十分気をつけていきたいですね...
参考文献
