Host1文字でAI認証回避|Starlette脆弱性の正体

伊東雄歩
監修者 伊東 雄歩

株式会社ウォーカー CEO。東北大学卒。MENSA会員、JDLA認定講師、健全AI教育協会理事。生成AI×教育・学習科学を専門とし、2億円超のシステム開発プロジェクトを統括。

taolis.net X note Voicy YouTube
  • Pythonの人気フレームワーク「Starlette」に深刻な認証バイパス脆弱性(CVE-2026-48710 / BadHost)が公表されました
  • HTTPのHostヘッダに「?」など1文字加えるだけで、保護したはずの管理画面に200 OKでアクセスできてしまいます
  • Starletteは週3億2,500万回ダウンロード、依存プロジェクトはGitHub上で40万件超え
  • FastAPI・vLLM・LiteLLM、そしてMCPサーバーが軒並み影響圏内で、AIエージェント運用に直撃
  • 修正版「Starlette 1.0.1」は公開済み、社内のAI基盤は今すぐ依存関係を確認してアップグレードしましょう

あなたの会社で動いているAIエージェントの「鍵」が、たった1文字で壊れるかもしれない、と聞いたらどう思いますか。2026年5月27日に公表されたCVE-2026-48710(通称BadHost)は、まさにそんな脆弱性です。週3億回以上ダウンロードされるPythonフレームワーク「Starlette」が震源で、MCPサーバーやFastAPI製のAI基盤が一斉に攻撃対象になりました。

Starlette「BadHost」とは何が起きたのか

まず事実を整理します。

CVE-2026-48710(BadHost)は、Python製のWebフレームワーク「Starlette」に存在する認証バイパスの脆弱性です。

セキュリティ会社X41が発見し、X41-2026-002 / GHSA-86qp-5c8j-p5mr / PYSEC-2026-161 という識別子でも管理されています。

影響を受けるのはStarlette 1.0.1より前のすべてのバージョンです。修正版である1.0.1は2026年5月21日にリリースされ、その翌日に脆弱性の詳細が公開されました。

つまり開発者から見ると、パッチが出てから内容が公にされるまでたった1日。攻撃側に回るプレイヤーも、防御側と同じスタートラインから走り出している状況です。

Starlette単体ではあまり名前を聞かないかもしれません。ただ、Python界隈で大人気のFastAPIはStarletteの上に建てられたフレームワークです。LLM推論サーバーのvLLMやLiteLLM、そしてMCP(Model Context Protocol)サーバーもStarletteを土台に動いています。

たった1文字で認証が崩れる仕組み

次に、なぜそんなに簡単に突破できてしまうのかを見ていきます。

Hostヘッダを「素直に」信じてしまう設計

StarletteはリクエストURLを組み立てるとき、HTTPのHostヘッダをそのまま連結して再パースしていました。Hostヘッダはブラウザや攻撃者が自由に書き換えられる場所なので、ここに細工を入れると、Starletteが「私はこういうパスへのリクエストを受けた」と認識する値(request.url.path)が、実際のパスと食い違ってしまいます。

ここでポイントになるのが、RFC 9112やRFC 3986というHTTPの仕様に沿った検証を、Starletteが事前に行っていなかったことです。

「?」を1個入れるだけで管理画面が開く

具体的な攻撃例を見ると、その単純さに驚きます。

正規ユーザーが /admin に未認証でアクセスすると、当然403 Forbiddenが返ります。ところが、リクエストのHostヘッダを Host: foo? のように「?」を1つ足した値に書き換えるだけで、同じ/adminへのアクセスが200 OKで通ってしまうのです。

パス判定のミドルウェアがrequest.url.pathを見ている場合、その値がHostヘッダの細工で書き換わってしまい、「保護されていない別のURL」だと誤認します。

攻撃に使えるのは「/」「?」「#」など、HTTPでURLの区切りに使われる文字です。前提条件はネットワーク到達性のみ。認証情報も、事前侵入も、複雑なエクスプロイトチェーンも要りません。

なぜAIエージェントに致命的なのか

普通の認証バイパスでも十分怖い話ですが、今回は「AIエージェントの裾野」に刺さっている点が深刻です。

MCPサーバーは、ClaudeやChatGPTなどのAIエージェントが外部システム(社内DB・メール・カレンダー・社内ファイル)にアクセスするときの「橋渡し役」です。ユーザーDBの認証情報、Google WorkspaceのOAuthトークン、Slackのアクセストークンなど、非常に強い権限のクレデンシャルを抱えているのが普通です。

つまり攻撃者から見れば、MCPサーバーは「鍵束置き場」のような存在。BadHostでこの認証層を突破できれば、その先に繋がっているメール本文、社内ファイル、顧客データへ一気にアクセスできてしまいます。

たとえばこんな運用が国内でも増えています。

  • 営業AIエージェントがMCP経由でSalesforce・Gmail・カレンダーに繋がっている
  • 社内ヘルプデスクAIがMCPで社内Wikiと人事DBを読みに行く
  • コーディングエージェントがMCPでGitHubとSentryと本番ログにアクセスする

BadHostが刺されば、これらが未認証の外部から丸見えになる可能性があります。MCPサーバーが「二段目の認証は前段で済んでいるはず」と信じて作られていることが多いのも、被害を大きくする要因です。

影響範囲:FastAPI・vLLM・LiteLLM・MCPの直撃マップ

Starletteを土台にする主要パッケージごとの影響を整理しておきます。

FastAPI

FastAPIはPython製APIサーバーの代表格です。AIサービスのバックエンドや社内マイクロサービスに広く採用されており、GitHub上で40万以上のプロジェクトが依存しています。Starlette側で生じた認証バイパスは、FastAPI製アプリケーション全般に波及します。

vLLM / LiteLLM

vLLMはLLM推論を高速化するエンジン、LiteLLMはOpenAI互換APIで複数LLMをまとめて捌くゲートウェイです。社内に自前のLLM基盤を持つ企業の多くがこのどちらか、もしくは両方を使っています。ここの認証が崩れると、内部LLMサーバーへのフリーアクセスを許してしまいます。

MCPサーバー

本記事で何度も触れているとおり、MCPサーバーは現代のAIエージェント基盤の中核です。BadHostでもっとも警戒すべきレイヤーで、X41も「最大の暴露面」と名指ししています。

過去の類似インシデントとの違い

Pythonエコシステムでは過去にもLog4j(Java)級のドミノ脆弱性として、jinja2やrequestsの脆弱性が話題になってきました。BadHostが特殊なのは次の3点です。

  • 影響面が「Web基盤+AI基盤」に二重に重なっている
  • 攻撃の難易度がほぼゼロ(curlでHostヘッダを書き換えるだけ)
  • パッチ公開と詳細公開の間が1日しかなく、対応のリードタイムが極端に短い

日本市場と国内AI実装者への影響

日本ではAIエージェント導入と社内MCPサーバー構築のラッシュが続いています。日経やITmediaが大手SIerのAnthropic協業を相次いで報じているとおり、Claude+MCPの実装は大企業の業務AIの主流コースになりつつあります。

そのMCPサーバーの大部分は、PythonとFastAPI、つまりStarletteの上で動いています。日本国内のAI実装現場でも次のような声が出ています。

  • 「社内ヘルプデスクAIのMCPサーバーは社内クラウドに置いてあるけれど、認証は社内VPN前提だった」
  • 「顧客向けAIチャットのバックエンドがFastAPIで、認証ミドルウェアを自前で書いている」
  • 「LLM推論基盤にvLLMを使っていて、社内ネット越しに叩ける状態」

VPN内に置いていても、内部からの攻撃や、別サービス経由のSSRF(サーバーサイドリクエスト偽装)と組み合わされれば、BadHostは現実的なリスクになります。

金融庁・日本銀行が銀行に対して「AI脅威に1ヶ月で備えよ」と通知を出している流れともリンクしており、「Starlette 1.0.1へのアップグレード」は今月のセキュリティ運用必須項目と言ってよい状況です。

今すぐやるべき具体対応

では実際に何をすればいいのか。AI基盤を運用している人向けに、3ステップで整理します。

1. 依存関係チェックと一括アップグレード

pip listpoetry showで、Starlette・FastAPI・vLLM・LiteLLM・MCP関連パッケージのバージョンを確認します。

Starlette本体は1.0.1以降へ。FastAPIや上位パッケージも、最新のStarletteを取り込んだバージョンに上げる必要があります。本番運用中のサービスはステージングで動作確認してからロールアウトしましょう。

2. badhost.orgのスキャナで自社サービスを点検

X41は無料のオンラインスキャナをbadhost.orgで公開しています。社内向けエンドポイントについても、社内からスキャナのCLI版(公開予定のSemgrepルールとCodeQLクエリ)を使い、自前ミドルウェアがrequest.url.pathに依存していないか確認するとよいでしょう。

3. 認証ミドルウェアの実装方針を見直す

パッチを当てた上でも、認証判定でrequest.url.pathを使わず、scope["path"]を使うように実装方針を改める価値があります。後者は攻撃者がHostヘッダで書き換えられない値で、こちらに統一しておけば「将来同種の問題が出ても被害が小さい」設計になります。

よくある質問(FAQ)

Q1. Starletteを直接使っていなくても危ないですか?

はい、危険です。FastAPI、vLLM、LiteLLM、MCPサーバーはStarletteの上で動いています。間接的な依存も含めて確認してください。

Q2. すでに攻撃を受けているかどうかを調べる方法はありますか?

Webサーバーのアクセスログで、Hostヘッダに「/」「?」「#」など普通は混入しない文字が入ったリクエストを検索するのが第一歩です。badhost.orgで公開予定のSemgrepルールも、コード側の脆弱パターン検出に役立ちます。

Q3. クラウド上のマネージドAIサービスを使っていても影響はありますか?

OpenAIやAnthropicなどのモデルAPIそのものへの影響は限定的ですが、それらを呼び出す自社のFastAPI / MCPサーバーが脆弱なケースがあります。「クラウドだから安心」ではなく、自社で書いたコードと依存パッケージを確認しましょう。

Q4. CVSSスコアが7台なのに「クリティカル」と言われるのはなぜですか?

公式スコアは10段階中7前後ですが、X41やCSO Onlineは「実質クリティカル」と評価しています。攻撃に認証も特殊条件も要らず、依存範囲が広いため、現場では深刻度を一段高く見ておくべき脆弱性です。

Q5. 修正版にアップグレードできない事情があるときの暫定対応は?

WAFやリバースプロキシ(Nginx、Cloudflareなど)で、不正なHostヘッダ(「/」「?」「#」を含む値)を拒否するルールを入れるのが現実的です。あくまで応急処置で、最終的にはStarlette 1.0.1以降への更新を必ず行ってください。

まとめ:1文字で崩れるAI基盤を防ぐために

本記事のポイントを振り返ります。

  • CVE-2026-48710(BadHost)は、Hostヘッダ1文字で認証を回避できるStarletteの脆弱性
  • 週3.25億ダウンロード・依存プロジェクト40万件超と、影響範囲は近年最大級
  • FastAPI、vLLM、LiteLLM、MCPサーバーすべてが射程内
  • 修正版Starlette 1.0.1へのアップグレードと、認証ミドルウェアのscope["path"]移行が必須
  • WAFでHostヘッダの不正文字を弾くのは応急処置として有効

次のアクションは1つだけです。今日のうちに自社のAI基盤の依存ツリーをpip listpoetry showで確認し、Starletteのバージョンを点検しましょう。

参考文献

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です