「localhost からなら認証なし」のエージェントは、リバースプロキシの後ろに置くと全世界に開く
自前で動かす AI エージェントやその管理画面が「127.0.0.1 からの接続は自動で許可」になっていると、同じマシンの nginx や Caddy から転送された外部の通信も localhost から来たように見える。信頼するプロキシを設定しないまま公開すると、誰でも管理画面に入れてしまう。
実際に起きたこと(Clawdbot、2026-01)
- 研究者が Shodan で管理画面のタイトルを検索し、900 以上の公開ゲートウェイ(ポート 18789)を見つけた。多くは認証なしで、設定ファイル・Anthropic の API キー・Telegram/Slack のトークン・数か月分の会話履歴が読めた
- 原因は localhost 自動承認。リバースプロキシ経由だと送信元が 127.0.0.1 になり、
gateway.trustedProxiesが既定で空のためX-Forwarded-Forも見られず、チェックを素通りした - 一部は root のコンテナで動いており、ホスト上でのコマンド実行まで可能だった
自分のエージェントで確かめること
- 管理画面や API にパスワードかトークン認証を必ず付ける(Clawdbot なら
gateway.auth.mode: "password") - リバースプロキシを使うなら、信頼するプロキシ(trusted proxies)を設定し、本当の送信元 IP で判定させる
- そもそもインターネットに出さない。Tailscale Serve や Cloudflare Tunnel(アクセス制御つき)で、自分だけが届く形にする
- 外から
curlして認証なしで中身が返らないか確かめる - 漏れた可能性があるなら API キーやボットのトークンを作り直す
注意点
- 同じ問題は、エージェントに限らず「localhost なら管理者」という作りの開発用サーバー全般で起きる
- 事件の詳細は報道と研究者の報告によるもの。今の OpenClaw(旧 Clawdbot)の既定値は変わっている可能性がある(ツールは
clawdbot security audit --deepでの確認を勧めていた)