CVE ID: CVE-2026-22038
製品: AutoGPT Platform(Stagehand統合)
影響を受けるバージョン: autogpt-platform-beta-v0.6.45 までの全バージョン
修正バージョン: autogpt-platform-beta-v0.6.46
脆弱性タイプ: CWE-532 — 機密情報のログファイルへの挿入
深刻度: 高
報告者: Panuganti Siva Aditya (@sivaadityacoder)
報告日: 2025年12月19日
GitHub Advisory: GHSA-rc89-6g7g-v5v7
AutoGPTは、ユーザーが自律型AIエージェントを構築・実行できるオープンソースプラットフォームです。OpenAI、Anthropic、Groqなどのブラウザ自動化およびLLMプロバイダーに接続するStagehand統合が含まれています。
Stagehandブロックのコードレビュー中に、認証情報オブジェクトがlogger.info()呼び出しに直接渡されていることに気付きました。各ログ文を追跡したところ、.get_secret_value()がインラインで呼び出されており、Pydanticが提供するSecretStr保護を明示的にバイパスしていることがわかりました。
脆弱なファイル:
autogpt_platform/backend/backend/blocks/stagehand/blocks.py
3つのブロックが影響を受け、それぞれ同じパターンになっています:
StagehandObserveBlock(185〜188行目)
logger.info(f"OBSERVE: Stagehand credentials: {stagehand_credentials}")
logger.info(
f"OBSERVE: Model credentials: {model_credentials} for provider "
f"{model_credentials.provider} secret: {model_credentials.api_key.get_secret_value()}"
)
StagehandActBlock(285〜288行目)
logger.info(f"ACT: Stagehand credentials: {stagehand_credentials}")
logger.info(
f"ACT: Model credentials: {model_credentials} for provider "
f"{model_credentials.provider} secret: {model_credentials.api_key.get_secret_value()}"
)
StagehandExtractBlock(373〜376行目)
logger.info(f"EXTRACT: Stagehand credentials: {stagehand_credentials}")
logger.info(
f"EXTRACT: Model credentials: {model_credentials} for provider "
f"{model_credentials.provider} secret: {model_credentials.api_key.get_secret_value()}"
)
悪用可能性を確認するため、有効な認証情報を使用して各Stagehandブロックを実行し、アプリケーションログを検索しました:
grep "secret:" /var/log/autogpt/application.log
出力により、実際のAPIキーが平文で表示されていることが確認されました:
[INFO] OBSERVE: Model credentials: ... secret: sk-proj-abc123xyz789...
[INFO] ACT: Model credentials: ... secret: sk-ant-api03-def456uvw...
[INFO] EXTRACT: Model credentials: ... secret: sk-1234567890abcdef...
AutoGPTコードベースは、APIキーにPydanticのSecretStr型を正しく使用しています。SecretStrオブジェクトがf-stringに含まれるか通常の方法で出力されると、**********として表示されます — この保護は意図的なものです。
根本原因は、開発者がlogger.info()文の内部で.get_secret_value()を直接呼び出したことです。これによりシークレットが明示的にアンラップされ、生の文字列値がロガーに渡され、SecretStrの組み込みマスキングを完全にバイパスしています。
ログレベルはINFOであり、これらの文はローカルのデバッグセッションだけでなく、通常の本番環境でも実行されることを意味します。これらのブロックが認証情報付きで実行されるたびに、シークレットがログファイルに書き込まれます。
攻撃シナリオ:
secret:、sk-proj-、sk-ant-などのパターンをログで検索します。curl https://api.openai.com/v1/chat/completions \
-H "Authorization: Bearer sk-proj-abc123xyz789..." \
-H "Content-Type: application/json" \
-d '{"model": "gpt-4", "messages": [{"role": "user", "content": "test"}]}'
露出した認証情報: Stagehand / Browserbase APIキー、OpenAI APIキー、Anthropic APIキー、Groq APIキー、およびStagehandブロックで設定されたすべてのLLMプロバイダー認証情報。
autogpt-platform-beta-v0.6.46のパッチでは、logger.info()文から.get_secret_value()呼び出しが削除されています。
推奨アプローチ — ログからシークレットを完全に削除:
# 修正前(脆弱):
logger.info(
f"OBSERVE: Model credentials: {model_credentials} for provider "
f"{model_credentials.provider} secret: {model_credentials.api_key.get_secret_value()}"
)
# 修正後(修正済み):
logger.info(
f"OBSERVE: Model credentials for provider {model_credentials.provider} (API key redacted)"
)
代替案 — ログ構造を維持したままマスク処理:
def redact_secret(value: str) -> str:
if len(value) <= 8:
return "***"
return f"{value[:4]}...{value[-4:]}"
logger.info(
f"OBSERVE: Model credentials for provider {model_credentials.provider} "
f"secret: {redact_secret(model_credentials.api_key.get_secret_value())}"
)
マスク処理アプローチでは、最初と最後の4文字のみが公開されます — 完全なシークレットを明かさずに、どのキーが使用されたかを識別するのに十分です。
ログ文で.get_secret_value()を呼び出さないこと。 フレームワークがシークレットマスキング型(SecretStr、SecretBytesなど)を提供している場合、その機能を活用させてください。ロガー内でアンラップメソッドを呼び出すと、その目的全体が無効になります。
INFOは本番レベルのログ記録です。 デバッグスタイルの認証情報ダンプはINFOに到達すべきではありません。どの認証情報がアクティブかを本当に確認する必要がある場合は、機密性のないメタデータ(プロバイダー名、キープレフィックス、最後の4文字)のみをログに記録してください。
ログファイルは攻撃対象領域です。 他の機密データストアと同様に扱ってください — アクセスを制限し、ローテーションし、何が入るかを監査してください。集約ツール(Splunk、ELK、Datadog)は多くの場合広範な読み取りアクセス権を持つため、ログ行内のシークレットは事実上それらのシステム内のシークレットでもあります。
修正は常にバグよりも簡単です。 2つのログ行を削除する(またはマスク処理された同等のものに置き換える)だけで、この露出は完全に解消されます。本番環境に残された「一時的なデバッグログ」によるセキュリティ負債は一般的であり、コードレビューで防ぐことができます。
SecretStr保護はオプトインであり、自動ではありません。 開発者は、誰も明示的に値をアンラップしない限り保護が維持されることを理解する必要があります。コードレビューでは、認証パス以外での.get_secret_value()の使用をすべてフラグする必要があります。
| 日付 | イベント |
|---|---|
| 2025年12月19日 | HuntrおよびGitHub Security Advisoryを通じてAutoGPTメンテナーに報告 |
| 2025〜2026年 | メンテナーのNicholas Tindleが報告を確認 |
| 2026年4月以前 | autogpt-platform-beta-v0.6.46で修正 |
| 2026年4月25日 | CVE-2026-22038が割り当てられる |