Zeabur のセキュリティインシデント後に差し替えるべきキー:チェックリストと順番

Zeabur では 8 月と 10 月にセキュリティインシデントが発生しました。差し替えるべきキーと順番、そして検証で見つかった落とし穴「Zeabur のバックアップから復元すると古いパスワードも戻る」をまとめました。

要点

  • Zeabur 上の環境変数はすべて漏洩したと考える。決済、AI API、クラウドアカウント、メール送信サービスのキーは今日中に差し替える。
  • それ以外のキーは、移行時に新しいプラットフォームで新しいキーを作り、動作を確認してから古いキーを無効化する。
  • Zeabur の data.sql から復元すると、データベースのパスワードが古いものに戻る。復元後にパスワードを変更する。
  • GitHub の Zeabur App は、すべての移行が終わってから削除する。
この記事の検証方法(実機検証 1 件、公式ドキュメント準拠 2 件)
実際に検証した内容
  • Zeabur の PostgreSQL バックアップ形式(pg_dumpall の data.sql)には ALTER ROLE ... PASSWORD が含まれ、復元するとパスワードが古いものに戻る(Docker で検証)
公式ドキュメントに基づく内容(未検証)
  • 2 件のインシデントの詳細:報道と Zeabur の告知に基づいています。Zeabur は影響範囲の全容を公表していません
  • 各サービスでキーを無効化・再発行するボタンの場所:画面は変わることがあるため、各サービスの管理画面で確認してください
目次(4 項目)
  1. 前提:環境変数はすべて漏洩したと考える
  2. 順番:お金に直結するものを先に、残りは移行時に
  3. 検証で見つかった落とし穴:バックアップを復元すると古いパスワードも戻る
  4. 移行後の後片付け

前提:環境変数はすべて漏洩したと考える

Zeabur は 8/28、一部プロジェクトの環境変数に不正アクセスがあったと告知しました。対象には「API キー、データベース接続文字列、クラウドサービスのキー」など一般的な認証情報が含まれていました(CodeCat による告知内容の引用)。Zeabur は 9/7 にセキュリティのアップグレードを実施しましたが、10/14 にさらに影響の大きいインシデントが発生し、その後サービス終了を発表しています。

あなたのデータが影響を受けたかどうかは分からないので、いちばん安全なのは Zeabur の環境変数に置いていたキーをすべて差し替えることです。

順番:お金に直結するものを先に、残りは移行時に

今日中に差し替える:漏洩すると直接金銭的な損害につながるキー。

種類例差し替え後に確認すること
決済Stripe などのシークレットキー最近の取引と返金の履歴
AI APIOpenAI、Anthropic、Gemini の API キー請求に不審な利用がないか。ついでに利用上限を設定する
クラウドアカウントAWS のアクセスキー、GCP サービスアカウントの JSON、Cloudflare の API トークン見覚えのないリソースが作られていないか
メール送信サービスSendGrid、Resend、Mailgun送信ログ(詐欺メールの送信に悪用されるおそれ)

移行時に差し替える:新しいプラットフォームで新しいキーを設定し、新しいサービスが正常に動くことを確認してから古いキーを無効化します。差し替えは 1 回で済み、サービスも止まりません。

  • データベースのパスワード(新しい DB はもともと新しいパスワードですが、次の節の落とし穴に注意)
  • LINE のチャネルシークレットとチャネルアクセストークン、Discord・Telegram の Bot トークン
  • Google・Facebook ログインの OAuth クライアントシークレット
  • JWT/セッションの署名鍵:変更すると全ユーザーが一度ログアウトされますが、正常な動作です
  • n8n に保存している各サービスの credentials(n8n 編を参照)

検証で見つかった落とし穴:バックアップを復元すると古いパスワードも戻る

Zeabur の PostgreSQL バックアップは、pg_dumpall で作成された data.sql です。同じ形式で検証したところ、ファイルの冒頭に次の 2 行がありました。

CREATE ROLE root;
ALTER ROLE root WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS PASSWORD 'SCRAM-SHA-256$4096:...';

psql で新しいデータベースに復元すると、root のパスワードが Zeabur 上の古いパスワードに戻ります。そのパスワードがインシデントで漏洩していれば、新しいデータベースも安全ではありません。

対処法(どちらか一方):

  • 復元前に、data.sql から CREATE ROLE と ALTER ROLE の 2 行を削除する
  • 復元後すぐにパスワードを変更する:ALTER ROLE root WITH PASSWORD '新しい長いパスワード';

より良いのは、pg_dump でデータベース本体だけをバックアップする方法です。ロールやパスワードは含まれません。詳しくはデータベース編を参照してください。

移行後の後片付け

  • GitHub の Zeabur App を削除する:GitHub → Settings → Applications → Installed GitHub Apps → Zeabur → Uninstall。すべて移行し終えてから削除してください。先に削除すると Zeabur 上のサービスを再デプロイできなくなります
  • 専用サーバーの SSH キー:Zeabur の専用サーバーに SSH 公開鍵を登録していた場合、新しいマシンでは新しい鍵ペアを使う
  • Zeabur 上のデータを削除する:バックアップが手元にあることを確認したら、サービス、ボリューム、プロジェクトを削除する。返金申請の際にアカウントデータの削除もあわせて依頼し、書面で記録を残す
  • 証拠を残す:不審な請求があった明細のスクリーンショットを保存しておく。Zeabur にインシデントの補償を申請するときに必要になります(移行ガイドの返金の節を参照)