Baseten GitHub PAT Exposure via Public Harbor Image – How Strix Found Admin Access in 25 Minutes
TL;DR
2026年7月、自律型ハッキングエージェント Strix は、BasetenのHarborレジストリから公開されているDockerイメージに埋め込まれたGitHub個人用アクセストークン(PAT)を発見した。このトークンは2023年3月に作成され、Basetenの主要製品リポジトリ、GitOpsリポジトリ、Homebrewタップ、および複数のプライベートカスタマーリポジトリへの 管理者権限とプッシュアクセス を付与していた。発見後、報告され、トークンは即座にローテーションされ、公開レジストリプロジェクトは24時間以内にプライベート化された。
漏洩の発見経緯
Strixは *.baseten.co ドメインに対してブラックボックス調査を実施し、公開されたHarborレジストリ(gcp-us-east4-zlw.registry.baseten.co)を特定。匿名で baseten/baseten-app イメージをプルした。イメージマニフェストとレイヤーを抽出した後、Strixは以下の手順を実施した:
- イメージのファイルシステムおよび構成に対して TruffleHog を実行。
- Dockerビルド履歴(
history[].created_by)に保存されたGitHub PATを検出。 GET /userリクエストを発行してトークンの有効性を検証。返されたアカウントはbasetenbotであった。
"Dockerビルド履歴に記録されたトークン、その後GitHubがそれを basetenbot と識別。資格情報は非表示にされています。" – Strixブログ投稿
漏洩したトークンの影響範囲
GitHubはトークンのOAuthスコープを repo と報告しており、リポジトリ全体へのアクセス権限を意味する。Strixはこのトークンでアクセス可能なリポジトリを列挙し、以下の結果を得た:
| リポジトリ(オブスカレート) | 権限 |
|---|---|
basetenlabs/b***(製品) |
admin: true, push: true |
basetenlabs/f***(GitOps) |
admin: true, push: true |
basetenlabs/h***(CLI) |
admin: true, push: true |
| その他のプライベートリポジトリ | 読み取り/書き込み |
これらの権限により攻撃者は以下の行動が可能になる:
- 推論プラットフォームのソースコードを変更。
- 本番クラスタを制御するGitOpsマニフェストを改ざん。
- CLI配布チャネルに悪意あるバイナリを注入。
- 業務上機密性の高いデータを含むカスタマーリポジトリにアクセス。
根本原因:ビルド資格情報の漏洩
このトークンは2023年3月3日に Dockerビルドステップ で生成され、ビルド引数を通じてGitHubトークンを注入していた:
ARG GITHUB_TOKEN
RUN GITHUB_TOKEN=${GITHUB_TOKEN} bash -c '\
if [[ "${GITHUB_TOKEN}" != "" ]]; then \
git config --global --add \
url."https://${GITHUB_TOKEN}@github.com/".insteadOf "git@github.com:"; \
fi'
Dockerはイメージのビルド履歴に正確なコマンドラインを記録しており、意図せずトークンの原文が永続化された。根本的な問題は以下の通り:
- シークレットをビルド引数として使用 – Dockerは値をメタデータに保存する。
- Git設定にトークンを永続化 – たとえ引数が後から削除されても、資格情報はイメージに残り続ける。
推奨される修復手順
- シークレットをビルド引数として渡さない。Docker BuildKitのシークレットマウント(
--secret id=github,src=...)を使用して、イメージメタデータに表示されない一時的な資格情報を提供する。 docker history --no-truncを使用するか、コンフィグブロブをダウンロードしてhistory[].created_byを確認し、漏洩した値を検査する。- 漏洩したトークンを即座にローテーションし、すべてのリポジトリで不正な変更がないか監査する。
- 最小権限の原則 を適用:ビルドトークンには、必要な特定のプライベート依存関係への読み取り専用アクセスのみを付与し、有効期限を短くする。
- 内部イメージをホストするコンテナレジストリを プライベート化 する。意図的に公開する場合を除き、公開しないようにする。
报告のタイムラインと対応
| 日時 | 行動 |
|---|---|
| 2026年7月13日 23:10 | Strixによる報告 – 有効な basetenbot トークン、公開Harborプロジェクト、リポジトリ権限 |
| 2026年7月14日 午前 | BasetenがHarborプロジェクトをプライベート化 |
| 2026年7月14日 16:34 | Basetenセキュリティチームが深刻度を確認、トークンをローテーション、イメージ削除を要請 |
| 2026年7月14日 17:05 | レポーターが削除を確認し、低深刻度の追加発見を報告 |
| 2026年7月17日 | 残りの発見をクローズ |
| 2026年9月 | 公開報告を準備・承認 |
Basetenのセキュリティチームは迅速に対応し、数時間以内にトークンをローテーションし、レジストリをプライベート化。さらに、感謝のギフトも送付した。
"Strixの責任ある報告に感謝します。漏洩した鍵を即座に無効化し、公開コンテナイメージを削除しました。ログの確認により、脆弱性は利用されておらず、顧客データも漏洩していません。" – Basetenセキュリティ担当者(HNコメント)
コミュニティの反応
- 肯定的評価 – 複数のコメント者が迅速な修復と自律型テストの価値を称賛。
- 倫理的懸念 – セキュリティベンダーが明示的な事前合意なしに、将来のベンダーに対して自律型エージェントを実行することの適切性に疑問を呈する声も。法的曖昧さを指摘する者もいた。
- 技術的考察 – 伝統的なペネトレーションテストツールでも同様の問題は発見可能だが、AI駆動エージェントのスピードと自動化の利点を強調する声もあった。
オペレーターへの教訓
- コンテナイメージを長期間の攻撃表面とみなす – 古いイメージにも有効なシークレットが含まれる可能性がある。
- ファイルシステムレイヤーとビルドメタデータの両方でシークレットスキャンを自動化する。
- CI/CDパイプラインおよびコンテナビルド用に、短期間有効で範囲限定のトークンを導入する。
- 自律型セキュリティエージェント(Strixなど)を定期的に自社ドメインに対して実行し、攻撃者が発見する前に隠れた漏洩を発見する。
GitHubベースのビルドや公開コンテナレジストリに依存している場合、今日中に既存のイメージを監査してください。漏洩したトークンのコストは、予防に必要な努力と比べて桁違いに高くなる可能性があります。
Sources
関連
- Dispatch
- Dispatch
- プロジェクト
- Dispatch
- Dispatch