要点
開発プラットフォーム Zeabur は、8 月の侵害の後に内部の管理鍵などを無効化または入れ替えたと報告したが、期限のない管理者トークンなどは入れ替えの対象に入っていなかった。10 月、共有クラスタにはそのトークンと内部の AWS キーで、GCP の専用サーバーには古い GCP の鍵を起点に入られ、プラットフォームのデータベースから利用者の環境変数が読まれた。Zeabur は 12 月 31 日でサービスを終える。入れ替えたと報告しても、旧い資格情報が使われるたびに失効を照合しなければ、期限のない鍵は通り続ける。
実行の前の照合=管理者資格情報が使われるたびに、いま有効で、この範囲の操作に許されているかを照合し、記録に残すこと。検知=異常な使用が起きた後に気づくこと。
期限なしのトークンで入れた
通った操作
- 通った操作
- 期限のない管理者トークンと内部の AWS キーによる、共有クラスタの管理画面での設定の読み取りと命令の実行(10 月 14 日から)。古い GCP のサービスアカウントの鍵を起点にした(Zeabur の評価)、専用サーバー 101 台への root でのログイン。内部の読み取り専用アカウントによる、プラットフォームのデータベースの読み取り(10 月 15 日、調査の開始後)。
- 受け付けた側に届くもの
- 一般に、管理の API やデータベースに届くのは、有効な資格情報による正規の経路からの要求である。Zeabur は、有効な資格情報と正規の経路が使われたため、最初の使用から約 36 時間アラートが出なかったとしている。
- 公表されていないこと
- 初期の資格情報をどう入手したか(Zeabur は 8 月の侵害で漏れた GitHub App の秘密鍵との関係を仮説として挙げるが、確認できていないとしている)、古い GCP の鍵の漏えい元(いずれも Zeabur は確認できていないとしている)。攻撃者の素性を示す記載は見当たらない。Hetzner と DigitalOcean は操作の監査ログを持たないとされ、一部のサーバーの管理アクセスは使われたかを確認できないとしている。
実行前の照合
経路を問わず区別できる条件は、管理の操作やデータの書き出しを受け付ける側が、使われた資格情報の有効期限、範囲、失効の状態を、実行の前に照合することである。
期限のない管理者の鍵は、入れ替えの一覧から漏れた時点で、次の侵害の入口になる。
- 誰が出すか
- 管理者資格情報を発行する側(運営の管理者)。資格情報を、有効期限と操作できる範囲を付けて発行し、入れ替えや失効の状態を一つの台帳で持つ。
- どこで照合するか
- クラスタの管理 API と、データベースやシークレットの書き出しの境界。使われるたびに、期限が切れていないか、範囲の内か、失効していないかを照合し、合わない要求は実行しない。
- 何が残るか
- どの資格情報が、いつ、どこから、どの範囲に使われたかの記録。侵害の後に、どの値が読まれたかを絞り込める。
調査を始めた日のうちにトークンは失効したが、その間にデータベースは読まれ、対応中に入れ替えた鍵はバックアップを経て使われた。管理鍵が失効されないまま使われうる点は、LiteLLM の汚染版の配布とも共通する論点である。
Lemma でできること
Lemma は、実行前の照合を、管理の操作やデータの書き出しを受け付ける境界に組み込む。侵入を見つけるのではなく、届いた要求の資格情報が、いま有効で、任された範囲の内かを照合する。
注意したい業界・業務
- 業界開発者向けサービス
- 利用者の API キーや接続情報を預かるホスティング、CI、デプロイの事業者。一つの管理者資格情報で、多くの利用者の秘密の値に届く。
- 業務アカウント・権限の管理
- 管理者トークン、クラウドの鍵、サービスアカウントの鍵の発行、保管、入れ替え、失効。侵害の後の入れ替えの範囲の決め方を含む。
いまの対策と Lemma の違い
三つの列は左から順に、今回の共有クラスタの管理 API(経路 A)、プラットフォームのデータベースの読み取り、GCP の専用サーバーへのログイン(経路 B)に当たる。
| 対策 | 管理 API での読み取り・実行 | データベース・シークレットの書き出し | パスワードでのサーバーへのログイン |
|---|---|---|---|
| 侵害の後の鍵の入れ替え | 一部 | 一部 | 一部 |
| 秘密の値を平文で置かない | 一部 | 関係しない | 一部 |
| 異常の検知とアラート | 効かない | 一部 | 効かない |
| 調査開始後の失効と入れ替え | 一部 | 一部 | 一部 |
| Lemma(実行の前の照合) | 効く | 効く | 効かない |
鍵の入れ替えは一覧から漏れた資格情報に届かず、検知は有効な資格情報と正規の経路からの要求を見分けにくい。Lemma は、資格情報が使われるたびに、その期限、範囲、失効の状態を照合する。
注:Lemma の照合が働くのは、管理 API やデータの書き出しの境界に照合を組み込み、資格情報の発行と失効を一つの台帳で持つ場合に限る。今回の事案に最も近い通り方(期限なしの管理者トークンが使われた)で働くのは、台帳が期限のない資格情報を不正として扱い、失効済みの資格情報を通さない運用をしている場合である。期限内の資格情報がそのまま奪われて範囲の内で使われた場合や、照合する仕組みごと乗っ取られた場合は通る。サーバーのパスワードでのログインは、この照合の外にある。表は何を照合しているかの比較で、今回の事案で止まったかどうかを示すものではない。Lemma は、侵入を検出・防止するものではない。
管理者資格情報について、組織で確認する 3 項目
- 侵害の後に入れ替えた資格情報について、旧い値でアクセスできないことを試して確認しているか。
- バックアップや設定リポジトリに、平文の鍵が残っていないことを確認しているか。
- 管理画面や管理 API に、公開インターネットから直接届かないようにしているか。
事実と時系列
- サービス
- Zeabur は、アプリのデプロイとホスティングを提供する開発プラットフォーム(運営は米デラウェア州の法人 Zeabur Inc.)。利用者は、アプリの環境変数(API キー、データベースの接続情報、署名鍵など)をプラットフォームに預けている。
- 経路 A(共有クラスタ)
- 内部の AWS キーと、共有クラスタの管理者トークン。トークンは 2024 年 1 月 10 日に有効期限なしで作られ、2026 年 1 月 20 日に平文で非公開の設定リポジトリに書かれた。共有クラスタの管理画面は公開インターネットから到達でき、全サービスの設定とシークレットの読み取りと、コンテナ内での命令の実行ができた。10 月 15 日には、本番のシークレット約 53 件(内部ネットワークの管理者資格情報、データベースのアカウント、GitHub App の秘密鍵を含む)が読まれた。
- 経路 B(GCP の専用サーバー)
- 古い GCP のサービスアカウントの鍵(漏えい元は確認できていない)。専用サーバーの初期設定に平文で置かれた root パスワードを、この鍵で読んだと Zeabur は評価している。Zeabur の時系列によれば、この平文の問題は 9 月 3 日に把握されていたが、事案の時点で直っていなかった。101 台(ユーザー 92 人分)に root でログインされ、50 台に永続的な SSH 鍵が追加された。
- データベースの読み取り
- 10 月 15 日 15:30 UTC、攻撃者は侵害した GCP のサーバーから、経路 A で得た内部ネットワークの管理者資格情報を使って内部ネットワークにノードを加えた(Zeabur の記載)。そのノードから、内部の読み取り専用アカウントでプラットフォームのデータベースを読んだ(16:10〜16:47 UTC)。環境変数 3,218,965 件と、アカウント 321,810 件分の情報(プロフィール画面の情報として、メールアドレス、ユーザー名、電話番号など)。
- そのほかの影響
- Zeabur は、攻撃者が 865 のデータベースサービスで命令を実行した(すべて成功したわけではない)、Zeabur の GCP プロジェクトに仮想マシン 5 台を作って顧客のサーバーのディスクの複製 16 本をアタッチした、Hetzner の 359 台と DigitalOcean の 48 台のサーバーの管理アクセスが影響の対象に含まれ使われたかは確認できない、と説明している。
- バックアップの鍵
- クラスタの日次のバックアップには、すべてのシークレットが入っていた。対応中の 15:40 UTC に入れ替えた鍵は 16:00 のバックアップに取り込まれ、20:30 UTC に攻撃者に使われたと Zeabur は説明している。
時系列
- 共有クラスタの管理者トークンを、有効期限なしで作る。
- 管理者トークンが、平文で設定リポジトリに書かれる。
- 1 度目の侵害。9 月 7 日公開の報告は、内部の管理鍵、データベースのパスワード、キャッシュのパスワードを無効化または入れ替えたと述べた。10 月の暫定報告は、この記述を不完全だったと訂正し、クラスタの管理者トークンと AWS キーは入れ替えの対象に入っていなかったとしている。
- 01:36 UTC に内部の AWS キー、01:40 UTC に管理者トークンが初めて使われる。13:40 UTC、GCP の専用サーバーへの root ログインが始まる。
- 13:56 UTC、ユーザーの報告を受けて調査を始める。その後も、本番のシークレットの読み取り(14:52〜16:51)、内部ネットワークへのノードの追加(15:30)、データベースの読み取り(16:10〜16:47)が続く。管理画面へのアクセスの制限(14:43)、管理者トークンの失効(15:32)、攻撃者のノードの削除(17:58)、ログインの署名鍵の更新と全ユーザーのログアウト(20:25)。攻撃者の最後の活動は 21:05 UTC。
- サービスの終了を発表する。
- 暫定報告を公表する。
- 移行、残高の返金、侵害による損害の申し出の受け付け(11 月 30 日まで)を案内する。
事実は Zeabur の暫定報告(2026-10-19、更新予定)、8 月の侵害の報告、サービス終了の発表と移行・返金の案内(いずれも一次)に拠る。公表されていないことは、対策が無かったことを意味しない。11 月 2 日時点で、Zeabur のブログ一覧に暫定報告の続報は出ていない。
公表後の対応
- 資格情報の入れ替え: 管理者トークン、GitHub App の秘密鍵、ログインの署名鍵、Hetzner と DigitalOcean のトークン(10 月 16 日 01:09 UTC)、プラットフォームのアクセストークン 11,536 件、zSend の API キー 566 件を失効または入れ替えた。AWS キー 24 件を無効にした。クラスタのバックアップに平文のシークレットを入れるのをやめ、バックアップの鍵をほかのシークレットと分けて置いた。
- 検知の追加: 管理者のアクセスの異常、コンテナ内の命令、シークレットやデータベースの一括の読み取り、新しい内部ネットワークのノード、見慣れない場所からのクラウドの鍵の使用に、アラートを整えている。
- 利用者への依頼: 8 月の後に入れ替えた人も含め、Zeabur に預けたパスワードと鍵をすべて入れ替えるよう求めている。台北と香港のリージョンのデータベースのバックアップは、漏えいしたものとして扱うよう求めている。
- サービスの終了と申し出: 12 月 1 日から有料プランと専用サーバーの更新を止め、12 月 31 日に全サービスを止めてデータを消す。侵害で損害を受けた利用者は、11 月 30 日までにサポートで申し出る(対象のアカウントとサービス、漏れた鍵の種類、事案の期間の他社の請求書や利用記録が要る)。
Sources
- 一次・暫定報告Zeabur「Zeabur October 2026 security incident (preliminary report)」
- 一次・当事者の公表Zeabur「Zeabur August 2026 security incident」
- 一次・当事者の公表Zeabur「Zeabur is shutting down: what happens next」
- 一次・当事者の公表Zeabur「Zeabur service migration, refunds, and security incident claims」
- 一次・利用規約Zeabur 利用規約の会社情報(Zeabur Inc.、デラウェア州法人)
報道・解析 1 件
- 報道BleepingComputer「Zeabur shutting down after second security breach in two months」