- 2025年8月3日、DrawAFish!のウェブサイトで約6時間にわたり大規模なセキュリティインシデントが発生した
- 管理者パスワードの流出、認証漏れのAPI、JWT脆弱性など主要なセキュリティ脆弱性が複数重なり攻撃に晒された
- その結果、すべてのユーザー名が侮辱的な表現に変更され、不快な画像が承認されると同時に、既存の安全な画像が削除された
- 手作業による復旧、認証ロジックの修正、バックアップの確認などで問題の解決を進めた
- 主な教訓は、高速開発(“vibe-coding”)とテスト・コードレビュー不足が、セキュリティ上重大な結果を招く可能性があること
DrawAFish.comの概要と2025年8月3日の事故要約
- DrawAFish.com は、ユーザーが自分で魚を描き、他のユーザーと一緒に水槽で泳がせる楽しさのあるウェブサイト
- 2025年8月1日、Hacker News 1位に入り大きな注目を集めた。開発者はCopilotなどのツールで機能を素早く実装する“vibe-coding”方式を採用していた
- しかし2025年8月3日の未明、深刻なセキュリティ事故が発生した
- 約6時間にわたり、あらゆるユーザー名が低俗な表現に変更され、不適切な画像が承認されるなど混乱が起きた
- 最終的に管理者が手動でロールバック作業を実施した
脆弱性の詳細分析
1. 過去に流出した6桁の管理者パスワード
- 開発者は当初、自分の幼少期のIDとパスワード(6桁)を管理者アカウントに使用していた
- このパスワードは、過去にNeopetsなどのサイトデータ流出を通じてすでにオンライン上で公開されていた
- 開発者はその後Google Authを使うようにしたが、以前のパスワードを削除しなかったため、攻撃者にとって脆弱性が残っていた
- 攻撃者は流出した情報を使って管理者認証に成功し、侮辱的な画像の承認や正常画像の削除などの悪意ある行為を行った
2. 認証なしのユーザー名変更API
- プロフィールのバックエンド開発時に“高速開発”を優先するあまり、認証確認機能なしでユーザー名変更APIを実装した
- 実質的に誰でも任意のユーザー名を変更できた
3. JWT検証の不備
- JWTトークンベースの認証で、トークンとuserId/emailの照合なしに管理者作業を実行可能に実装していた
- つまり攻撃者は、管理者認証情報で発行されたトークンだけで誰のリクエストにも管理者権限を使うことができた
- 興味深いことに、あるHacker Newsユーザーがこの脆弱性を使って侵入者より先に不適切な資料を削除し、緊急対応に貢献した
復旧プロセス
- 開発者は午前7時45分ごろに異常状況を認識し、すぐにデスクトップから対処を開始した
- Firebaseのバックアップが未設定だったためバックアップに依存できず、コードを迅速に修正して認証を強制適用した
- すべてのモデレーションログを追跡し、悪意のある作業をキャンセルするスクリプトを開発した(これもvibe-coding方式で作成)
- 緊急時に管理者権限を使った第三者(Hacker Newsユーザー)のアクセスアカウントも遮断し、連絡してコードベースのセキュリティリファクタリングに関するフィードバックを受け追加パッチを実施した
開発文化と教訓
- 開発者は“vibe-coding”、すなわち高速プロトタイプ作成と最小限のレビュー文化が楽しさと高い生産性をもたらす一方、実際には深刻なセキュリティ脆弱性につながる可能性があることを経験した
- LLM(Copilot)は高速なコード生成に非常に有用だが、コードの品質とセキュリティ責任は開発者自身にあることを示した
- テスト、認証ロジック、コードレビューなどの基本的なセキュリティ手順を省くと、スモールプロジェクトでも外部攻撃に対して極めて脆弱になり得ることを示した事例である
結論と洞察
- DrawAFish.comの事例は、実サービス運用環境でしばしば見落とされる基本的なセキュリティ対策の重要性を示す
- オープンソースツールや高速開発ツールに依存する場合でも、必ずテスト、認証、コードレビュー、パスワード管理などの基本的課題を確認しなければならない
- 想定外の規模の注目(例:Hacker News上位ランク)により、攻撃対象面とリスクが急激に拡大する可能性がある
- Postmortemを透明性を保って記録することで、今後の類似のスタートアップや個人開発者に現実的なセキュリティの教訓を伝える
まだコメントはありません。