BadHost漏洞:CVE-2026-48710 深度分析
⚠️ BadHost漏洞:CVE-2026-48710 深度分析
警报等级:严重 🔴
影响范围:FastAPI、vLLM、LiteLLM、MCP生态,约3.25亿次周下载
漏洞类型:主机头注入 / 请求走私
披露时间:2026年5月27日
一句话总结
Starlette(FastAPI背后的框架)存在一个被命名为"BadHost"的高危漏洞,攻击者可以通过构造特殊的Host头,绕过安全检查、注入恶意内容、甚至窃取运行AI Agent的服务器上的敏感数据。
这个漏洞为什么重要?
1. 波及范围太大
Starlette不是一个默默无闻的小框架:
- 周下载量:3.25亿次
- 下游框架:FastAPI(几乎所有AI Agent后端)、vLLM(GPU推理)、LiteLLM(模型网关)、LangChain的部分组件
- MCP生态:几乎所有使用模型上下文协议的AI工具都受影响
简单说:你部署的AI服务,大概率躺枪了。
2. 直接影响AI安全
这个漏洞的特殊之处在于它的攻击场景:
- 攻击者可以入侵运行AI Agent的服务器
- 窃取敏感数据
- 窃取第三方账户凭证(API密钥、数据库密码等)
对于企业级AI应用来说,这意味着:
- Agent访问的后端系统可能被攻破
- 用户的对话历史、隐私数据可能被窃取
- API密钥泄露 → 攻击者可以免费使用你的模型服务
3. 已经有数据暴露
初步扫描显示,多个领域的数据已经处于暴露状态:
- 生物制药AI
- 电子邮件/SaaS平台
- 身份验证系统
- HR招聘平台
技术原理(偏技术向)
Host头注入基础
HTTP请求中的Host头用于告诉服务器"我想访问哪个域名"。正常情况下,Host头会被服务器用来:
- 路由请求(虚拟主机)
- 生成绝对URL
- 验证请求来源
但如果服务器过度信任Host头,攻击者就可以利用它进行:
- 缓存投毒(让CDN/代理缓存恶意内容)
- 密码重置钓鱼(生成指向攻击者服务器的链接)
- 敏感Cookie/令牌窃取
BadHost的特殊性
根据X41 D-Sec的分析,BadHost漏洞的特殊之处在于:
攻击者构造的Host: evil.com
↓
Starlette错误地信任了这个值
↓
生成的URL指向了攻击者控制的域名
↓
当Agent发送请求时,敏感数据被路由到了攻击者服务器
这意味着:只要你的AI Agent在某个环节生成了绝对URL(比如发送webhook、回调、OAuth跳转),攻击者就可以截获。
利用链示例
# 一个典型的AI Agent回调场景
async def on_agent_complete(result):
# 通知外部系统
callback_url = f"https://{request.headers['host']}/callback"
await httpx.post(callback_url, json=result)
如果攻击者发送请求时携带 Host: attacker-controlled.com,那么这个callback_url就会指向攻击者的服务器,result(包含敏感数据)就被偷走了。
影响排查清单
你的服务是否受影响?对照检查:
| 组件 | 是否受影响 | 检查方法 |
|---|---|---|
| FastAPI 应用 | ✅ 是 | 检查是否使用 request.url 或 request.headers['host'] |
| vLLM 推理服务 | ✅ 是 | 检查是否有外部回调/webhook |
| LiteLLM 网关 | ✅ 是 | 检查代理配置 |
| MCP 工具服务器 | ✅ 是 | 检查工具调用的URL生成逻辑 |
| 自定义Agent | ✅ 可能 | 检查是否有URL生成逻辑 |
修复方案
方案一:立即升级(推荐)
# Starlette 1.0.1 已修复此漏洞
pip install starlette==1.0.1
# FastAPI 基于 Starlette,同样需要确保版本
pip install --upgrade fastapi starlette
方案二:中间件过滤(临时方案)
如果你暂时无法升级,可以在FastAPI中添加中间件:
from fastapi import FastAPI, Request
from starlette.middleware.base import BaseHTTPMiddleware
app = FastAPI()
@app.middleware("http")
async def secure_host(request: Request, call_next):
# 只允许可信的host
allowed_hosts = ["yourdomain.com", "localhost"]
host = request.headers.get("host", "").split(":")[0]
if host not in allowed_hosts:
return JSONResponse(
status_code=400,
content={"error": "Invalid host"}
)
return await call_next(request)
方案三:检查是否有异常访问
查看你的服务器日志,搜索异常的Host头:
# Nginx日志中查找可疑的host头
grep -E "Host: (?!yourdomain\.com)" /var/log/nginx/access.log
对AI安全从业者的启示
1. 框架安全不等于应用安全
FastAPI很安全,但用FastAPI写的应用不一定安全。Host头注入是一个"经典"漏洞,但在AI Agent的新场景下有了新的危害维度。
2. 信任边界要重新审视
AI Agent会调用外部工具、访问外部API、发送webhook。在设计时需要思考:
- 生成的URL是否可能被篡改?
- 回调地址是否经过验证?
- 第三方服务的凭证是否隔离?
3. MCP协议的安全考量
Model Context Protocol让AI Agent可以调用外部工具,但这也扩大了攻击面。如果MCP服务器存在漏洞,整个Agent生态都可能受影响。
时间线
| 时间 | 事件 |
|---|---|
| 2026年5月27日 | X41 D-Sec披露漏洞,发布技术分析 |
| 2026年5月27日 | Starlette 1.0.1版本发布,修复漏洞 |
| 2026年5月27日 | 开放在线扫描工具供开发者自查 |
参考链接
结语
BadHost漏洞再次提醒我们:AI系统的安全不仅仅是模型本身的安全,还包括整个技术栈的安全。
作为AI安全从业者,除了关注模型投毒、Prompt注入这些"高大上"的问题,也要重视Web安全的基础问题——毕竟,再聪明的Agent也要跑在服务器上,而服务器还是要处理HTTP请求的。
本文整理自安全社区披露,漏洞详情以官方公告为准
撰写时间:2026-05-28

浙公网安备 33010602011771号