# BadHost 漏洞（CVE-2026-48710）——数百万 AI 代理面临风险

> Starlette 框架中一个仅需单字符注入的 HTTP Host 头漏洞，威胁 FastAPI、vLLM、LiteLLM 及数千个 MCP 服务器——攻击者可绕过认证、读取高价值数据甚至远程执行代码。

## 事件核心

2026 年 5 月 22 日，安全研究团队 X41 D-Sec 公开披露了编号为 **CVE-2026-48710**（代号 BadHost）的严重漏洞。该漏洞存在于轻量级 Python ASGI 框架 **Starlette**（每周 3.25 亿次下载）中，影响版本 < 1.0.1。由于 FastAPI、vLLM、LiteLLM、Text Generation Inference、MCP 服务器、AI Agent 框架等大量 AI 基础设施均依赖 Starlette，该漏洞波及范围极广。

漏洞由 X41 D-Sec 在 OSTIF 赞助的审计中发现，2026 年 1 月 27 日发现，2 月 4 日通知厂商，5 月 21 日补丁发布，5 月 22 日公开披露。

## 关键数据

- **CVSS 评分：** GitHub Advisory 给 **6.5**（中等），X41 D-Sec 评定 **7.0/10**（高危），Secwest 称「实质上低估了」实际威胁
- **受影响版本：** Starlette >= 0.8.3、< 1.0.1（影响横跨数年版本）
- **周下载量：** 3.25 亿次/周
- **已发现暴露数据类别：** 10 大类，涵盖生物制药临床数据库、个人身份信息（PII）、全邮箱访问权限、HR 候选人数据、云拓扑、个人健康/财务记录等
- **补丁版本：** Starlette 1.0.1，于 2026 年 5 月 21 日发布

## 技术原理

漏洞极其简单：Starlette 在重构 `request.url` 时，直接将 HTTP `Host` 请求头与请求路径拼接（如 `f"http://{host_header}{path}"`），然后重新解析 URL。但 Starlette **不对 Host 头进行任何格式验证**。

攻击方式：
```
正常请求：GET /admin HTTP/1.1 + Host: example.com
           → request.url.path 返回 /admin（正确）

恶意请求：GET /admin HTTP/1.1 + Host: foo?
           → 重构为 http://foo?/admin
           → request.url.path 返回 /（公开路径 ✅ 认证绕过）
```

路由系统仍使用 HTTP 请求行中的真实路径 `/admin` 分发请求，但中间件读取 `request.url.path` 做权限判断时看到的是绕过后的公开路径。**跨层信任导致认证崩坏**，可进一步导致 SSRF（服务端请求伪造）甚至远程代码执行（RCE）。

需使用原始 TCP socket 发送攻击请求，因为标准 HTTP 客户端会自动规范化畸形 Host 头。

## 背景与上下文

**为什么 AI Agent 是重灾区：**

MCP（Model Context Protocol）服务器让 AI 代理连接外部系统（数据库、邮件、日历等），存储了大量第三方凭证。X41 D-Sec 的大规模扫描发现大量暴露的 MCP 服务器，泄露内容包括：

| 领域 | 暴露数据 |
|------|---------|
| 生物制药 AI | 临床试验数据库、M&A 数据、SSRF |
| 身份验证 | 人脸分析、KYB、实时 PII、内部代码库 |
| IoT/工业 | SSH 访问设备、远程代码执行 |
| 邮件/SaaS | 完整邮箱读写/删除、S3 导出、Webhook |
| HR/招聘 | 候选人 PII、招聘管道数据 |
| 云监控 | AWS 拓扑、分布式追踪、指标查询 |
| 个人健康/财务 | 营养日志、费用记录、订阅信息 |

## 行业影响

- **AI 代理基础设施面临信任危机：** 如果部署 MCP 服务器的企业未及时更新，攻击者可获取「整个数字王国」的钥匙
- **开源生态暴露面：** 由于 FastAPI 在 Python AI 领域几乎无处不在（vLLM、LiteLLM、推理网关、评估面板等均依赖），修复需要全链路协调
- **AI 安全验证缺口：** 该漏洞暴露了 AI 基础设施在 Web 安全方面的通用问题——多数 AI 项目由 ML 工程师而非安全工程师编写，认证环节薄弱

## 不同视角

- **X41 D-Sec 认为「严重」**：因为攻击复杂度低（无需认证、只需原始 HTTP 连接）、影响面大
- **GitHub 评分 6.5 的理由：** CVSS 向量显示机密性和完整性影响有限（L:L），但实际场景中已发现的泄露数据范围比 CVSS 标准假设更严重
- **安全社区建议：** 即使系统在防火墙后也应立即更新，因为内网横向移动可通过本漏洞实现

**缓解措施：** 升级 Starlette ≥ 1.0.1；使用反向代理（nginx、Caddy、Traefik）过滤畸形 Host 头；在应用代码中使用 `scope["path"]` 而非 `request.url.path` 做权限判断；运行 Nemesis 提供的在线扫描器 [badhost.org](https://badhost.org)。

---

## 参考链接

- [Ars Technica — Millions of AI agents imperiled by critical vulnerability](https://arstechnica.com/information-technology/2026/05/millions-of-ai-agents-imperiled-by-critical-vulnerability-in-open-source-package/)
- [X41 D-Sec 官方公告](https://x41-dsec.de/lab/advisories/x41-2026-002-starlette/)
- [GitHub 安全公告 (GHSA-86qp-5c8j-p5mr)](https://github.com/Kludex/starlette/security/advisories/GHSA-86qp-5c8j-p5mr)
- [BadHost 在线扫描器](https://badhost.org/)
- [Cyber Kendra 安全博客](https://www.cyberkendra.com/2026/05/badhost-cve-2026-48710-one-rogue-header.html)
- [OSS 漏洞数据库](https://osv.dev/vulnerability/PYSEC-2026-161)