Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-22038 — CVE-2026-22038の詳細な分析。AutoGPT Stagehandブロックにおける高深刻度の脆弱性で、APIキーを平文でログに記録する問題について、根本原因、影響、および是正策を含む。 | Kitploit
ツール/GitHubGitHub/sivaadityacoder/cve-2026-22038
脆弱性分析コード分析シークレット検出学習と教育ログ分析
GitHubsivaadityacoder/cve-2026-22038

CVE-2026-22038

CVE-2026-22038の詳細な分析。AutoGPT Stagehandブロックにおける高深刻度の脆弱性で、APIキーを平文でログに記録する問題について、根本原因、影響、および是正策を含む。

リポジトリを見る
4ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-22038 — AutoGPT Stagehand ブロックがAPIキーを平文でログに記録

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保護を明示的にバイパスしていることがわかりました。

脆弱なファイル:

root@kitploit:~
autogpt_platform/backend/backend/blocks/stagehand/blocks.py

3つのブロックが影響を受け、それぞれ同じパターンになっています:

StagehandObserveBlock(185〜188行目)

root@kitploit:~
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行目)

root@kitploit:~
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行目)

root@kitploit:~
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ブロックを実行し、アプリケーションログを検索しました:

root@kitploit:~
grep "secret:" /var/log/autogpt/application.log

出力により、実際のAPIキーが平文で表示されていることが確認されました:

root@kitploit:~
[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であり、これらの文はローカルのデバッグセッションだけでなく、通常の本番環境でも実行されることを意味します。これらのブロックが認証情報付きで実行されるたびに、シークレットがログファイルに書き込まれます。


影響

  • 認証情報の窃取 — ログファイルに平文のAPIキーが保存され、ログにアクセスできるすべての人が閲覧可能
  • 金銭的損害 — 盗まれたキーが被害者の費用で高額なAPI呼び出しに使用される
  • データアクセス — 盗まれた認証情報により、被害者のそれらのサービス上のデータへのアクセスが許可される可能性
  • クォータの枯渇 — 攻撃者が意図的にレート制限を使い果たしてサービスを拒否できる
  • 長期間の露出ウィンドウ — ログファイルは多くの場合30〜90日間保持されるため、一度使用されたキーが数ヶ月間露出したままになる可能性
  • コンプライアンス問題 — シークレットのログ記録はPCI-DSS、SOC 2、GDPRの要件に違反する

攻撃シナリオ:

  1. 攻撃者は、設定ミスのある集約システム(Splunk、ELK、Datadog、CloudWatch)、侵害された監視アカウント、または過剰な内部アクセスを介してログファイルへの読み取りアクセスを取得します。
  2. secret:、sk-proj-、sk-ant-などのパターンをログで検索します。
  3. ログ出力から実際のAPIキーを抽出します。
  4. キーを検証します:
root@kitploit:~
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"}]}'
  1. 有効なキーを使用してAPI呼び出しを行い、クォータを消費したり、被害者のデータにアクセスしたりできます。

露出した認証情報: Stagehand / Browserbase APIキー、OpenAI APIキー、Anthropic APIキー、Groq APIキー、およびStagehandブロックで設定されたすべてのLLMプロバイダー認証情報。


修正

autogpt-platform-beta-v0.6.46のパッチでは、logger.info()文から.get_secret_value()呼び出しが削除されています。

推奨アプローチ — ログからシークレットを完全に削除:

root@kitploit:~
# 修正前(脆弱):
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)"
)

代替案 — ログ構造を維持したままマスク処理:

root@kitploit:~
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文字のみが公開されます — 完全なシークレットを明かさずに、どのキーが使用されたかを識別するのに十分です。


重要なポイント

  1. ログ文で.get_secret_value()を呼び出さないこと。 フレームワークがシークレットマスキング型(SecretStr、SecretBytesなど)を提供している場合、その機能を活用させてください。ロガー内でアンラップメソッドを呼び出すと、その目的全体が無効になります。

  2. INFOは本番レベルのログ記録です。 デバッグスタイルの認証情報ダンプはINFOに到達すべきではありません。どの認証情報がアクティブかを本当に確認する必要がある場合は、機密性のないメタデータ(プロバイダー名、キープレフィックス、最後の4文字)のみをログに記録してください。

  3. ログファイルは攻撃対象領域です。 他の機密データストアと同様に扱ってください — アクセスを制限し、ローテーションし、何が入るかを監査してください。集約ツール(Splunk、ELK、Datadog)は多くの場合広範な読み取りアクセス権を持つため、ログ行内のシークレットは事実上それらのシステム内のシークレットでもあります。

  4. 修正は常にバグよりも簡単です。 2つのログ行を削除する(またはマスク処理された同等のものに置き換える)だけで、この露出は完全に解消されます。本番環境に残された「一時的なデバッグログ」によるセキュリティ負債は一般的であり、コードレビューで防ぐことができます。

  5. 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が割り当てられる

参考情報

  • GitHub Security Advisory GHSA-rc89-6g7g-v5v7
  • CWE-532: 機密情報のログファイルへの挿入
  • OWASP Logging Cheat Sheet
  • Trickest CVE Database Entry
ツールをダウンロード