リバースプロキシ配下で「localhost からのアクセスは信頼」が破綻する問題
「127.0.0.1 からなら認証不要」というローカル開発向けの仕組みは、同一ホストのリバースプロキシ経由だと全外部リクエストが 127.0.0.1 発に見えるため、認証が丸ごとバイパスされる。
事例
- AI エージェントゲートウェイ Clawdbot は localhost 自動承認を持ち、
gateway.trustedProxiesが既定で空だったためX-Forwarded-Forを無視。リバースプロキシ経由で公開された 900 超のインスタンスが認証なしで開放され、API キーやチャット履歴が漏洩した(Shodan で HTML タイトル検索で発見された)。
対策
- localhost 信頼を使わない。ローカルでも常にトークン認証を要求する設計にする。
- どうしても使うなら、信頼するプロキシを明示(
trustedProxies等)し、X-Forwarded-Forから実クライアント IP を判定する。プロキシ未設定時は「外部扱い」にフェイルクローズ。 - 自分でセルフホストしたツールは、公開前に外部から認証なしでアクセスできないか確認する:
sh
curl -sI https://your-host.example.com/ # 401/403 になるべき - 管理 UI はインターネットに出さず、Tailscale / Cloudflare Access 等のゼロトラスト経由にする。