您现在必须立即检查您的 FastAPI 和 Starlette 版本。最近发现的 CVE-2026-48710 漏洞,又称“BadHost”,并非一个简单的 Bug。攻击者只需操纵 Host 请求头,就能完全废掉您精心构建的认证系统,并轻而易举地获取 AI Agent 的敏感数据,这是一个致命的安全漏洞。
🚨 先说结论:您现在应该立即做的事
如果您是正在阅读本文的开发者或安全运营人员,请不要犹豫。核心任务是立即将 Starlette 版本升级到 1.0.1 或更高版本。如果环境无法立即更新,则必须修改 Nginx 或 Traefik 等反向代理的配置,使其严格校验 Host 请求头。
该漏洞对基于 FastAPI 构建的现代 AI 服务栈(如 vLLM、LiteLLM、MCP 服务器等)构成了直接威胁。这不仅仅是“某个网站被攻破”的问题,而是一个结构性缺陷,攻击者可以通过此缺陷夺取 AI Agent 的权限,进而获取用户的电子邮件、医疗数据,甚至控制云基础设施。

🔍 问题出在哪里?“BadHost”的狡猾运作原理
本次漏洞的核心在于“服务器看到的路径与框架识别的路径不一致”。听起来名声狼藉的“BadHost”是如何运作的呢?
通常我们在运行 Web 服务器时,安全中间件会检查:“该用户是否有权访问 /protected 路径?”然而,攻击者会发送如下狡猾的请求:
GET /protected
Host: example.com/health?x=看好了,神奇(但可怕)的事情发生了:
- 实际路由:服务器看到请求路径为
/protected,判断“啊,这是需要认证的地方”。 - Starlette 的解析:然而,Starlette 框架内部的
request.url对象会将Host请求头中包含的/health?x=部分错误地解析为路径的一部分。结果,框架误以为用户正在访问安全的/health路径。 - 认证绕过:认证中间件认为
/health是安全的并予以放行,但实际逻辑却是在/protected上执行。最终,攻击者无需开门即可进入室内。
这绝非简单的拼写错误级别的 Bug,而是在三个不同的代码组件交互过程中产生的设计级缺陷。该漏洞极其精细,甚至连最先进的 AI 模型(如 Anthropic 等)都难以自行发现这种微妙的逻辑漏洞。

🌐 为什么 AI 生态系统尤为危险?
这次漏洞之所以在全球范围内引起恐慌,正是因为 AI 基础设施栈的结构。
现代 AI 服务大多运行在基于 Python 的异步框架 Starlette 和 FastAPI 之上。特别是以下核心组件直接暴露在本次漏洞之下:
- LLM 推理及代理服务器:如 vLLM、LiteLLM 等提供模型服务的核心引擎。
- MCP (Model Context Protocol) 服务器:AI Agent 与外部工具(电子邮件、日历、数据库)通信时的门户。由于设计原因,MCP 通常需要未认证的 OAuth 发现端点,这为攻击者提供了极具吸引力的通道。
- AI Agent 框架:拥有多种权限以执行用户指令的 Agent 可能会通过此漏洞被劫持。
这已经超出了单纯修改网页内容的范畴,攻击者入侵后能获得的“战利品”极其巨大。从临床试验数据等敏感医疗信息,到企业的云管理权限,甚至可以读取并撰写个人的全部电子邮件。

✅ 防止损失的 4 步防御策略
好了,恐慌到此为止。现在让我们制定具体的行动计划。
1. 最优先任务:更新 Starlette
这是最可靠且唯一的根本解决方法。请立即将 Starlette 版本升级至 1.0.1 或更高版本。新版本经过设计,会忽略 Host 请求头中包含的异常路径,从而从源头上封堵此类攻击。
2. 重新设计认证方式(脱离基于路径的认证)
许多开发者在中间件中使用 request.url.path 来实现基于路径的认证。但本次漏洞正是利用了可以操纵 request.url.path 这一点。
- 替代方案:使用无法被操纵的
scope["path"]代替request.url.path。 - 更佳方法:不要使用中间件,而是利用 FastAPI 内置的功能,如
Depends()、Security()或@requires()装饰器,在端点(Endpoint)级别进行认证。FastAPI 的路由算法基于实际的 HTTP 路径运行,因此对本次漏洞具有免疫力。
3. 通过反向代理进行深度防御 (Defense in Depth)
将 ASGI 服务器(如 Uvicorn 等)直接暴露在互联网上是非常危险的。
- 请在前端部署 符合 RFC 标准的反向代理(如 Nginx、Caddy、Traefik)。
- 这些代理会将
Host请求头进行标准化(Normalization)和校验,从而在中间阶段拦截错误的请求头,防止其到达框架层。
4. 进行漏洞扫描
如果您担心自己的服务器是否已经遭到攻击,可以尝试使用安全社区(如 X41 D-Sec 等)提供的 在线扫描器。快速检查您的服务是否正在使用存在漏洞的 Starlette 版本。

💡 结语:供应链安全的重要性

这次 CVE-2026-48710 事件给我们留下了重要的教训:我们使用的某一个开源库,或者该库中的一个微小逻辑,都有可能摧毁整个庞大的 AI 生态系统。
正如我们编写自己的代码一样,保障我们所依赖的供应链 (Supply Chain) 安全,已成为现代开发者的必备能力。与其自满于“我的代码很安全”,不如不断自问:“我使用的工具安全吗?”
现在请打开终端,输入 pip show starlette 吧。您的服务安全吗?
针对此次漏洞,您的团队制定了怎样的应对措施?或者您是否经历过类似的请求头操纵攻击?欢迎在评论区分享您的经验!
参考资料
- BadHost – CVE-2026-48710: Starlette Host-Header Auth Bypass · news.ycombinator.com




