何が起きたのか
2026年5月、FastAPIの土台であるPythonフレームワークStarletteに、認証回避の重大な脆弱性CVE-2026-48710(通称BadHost)が公表されました。修正はStarlette 1.0.1です。OSTIFが支援した監査でX41 D-Secが発見し、Ars Technicaが報じました。
深刻な理由:Starletteは週に約3億2,500万回ダウンロードされ、vLLM、LiteLLM、AIエージェントとツールやデータベースをつなぐMCPサーバー、Google ADK-Python、Ray Serve、BentoML、エージェント管理画面など、PythonのAI基盤の多くを支えています。
仕組み
StarletteはHostヘッダーとパスを連結してrequest.urlを組み立てますが、Hostを検証していませんでした。攻撃者がHost: example.com/health?x=のような値を送ると:
- ルーターは本来のパス(例:
/admin)に処理を渡す - しかし認証ミドルウェアは「汚染された」パス(公開されている
/health)を見て通してしまう
その結果、ミドルウェアで行うパスベースのセキュリティルールは、ヘッダーの1文字で回避できます。
MCPサーバーは特に狙われやすい対象です。MCPの仕様では公開のOAuth検出エンドポイントが必須で、見つけやすいためです。X41のスキャンでは、脆弱なシステムから臨床試験データ、本人確認、メールボックス全体、人事データ、産業機器へのSSHアクセスなどが露出していました。
報道によると、Claude MythosでもProject Glasswingでこのバグを見つけられませんでした。個別には正しく動く3つの層の組み合わせで生じるためです。
対策
- Starletteを1.0.1以降に更新する(同梱するFastAPIも)
- すぐに更新できない場合は、セキュリティ判断を行うミドルウェアや依存関係で
request.url.pathをrequest.scope["path"]に置き換える - Hostを検証するリバースプロキシ(nginx、Caddy、Traefik、HAProxy)を前段に置く
- 古いバージョンが固定されている可能性のあるコンテナイメージや仮想環境を監査する
- badhost.orgに無料スキャナーがある
教訓
AIエージェントの基盤は急成長し、誰も見直していないセキュリティ上の前提を抱えています。FastAPIでMCPサーバーやLLMプロキシを動かしているなら、最優先で対応しましょう。
出典
- The Agent Report (28/05/2026): https://the-agent-report.com/2026/05/badhost-starlette-cve-critical-ai-agent-vulnerability/
AIエージェントやMCPサーバーを社内で運用していますか。KGA ITが無料でセキュリティを確認します:kga-it.com