Descripción general
LibreChat es un clon mejorado de ChatGPT que ofrece soporte para múltiples proveedores de IA. En todas las versiones hasta la 0.7.6 inclusive, se ha identificado una vulnerabilidad de tipo Insecure Direct Object Reference (IDOR) en el endpoint de gestión de claves API correspondiente a la operación PUT /api/keys.
Detalle técnico
El fallo se origina en el uso del operador spread de JavaScript al construir el objeto de actualización en el servidor. Aunque el sistema establece el identificador del usuario autenticado antes de aplicar el spread, el orden de operaciones permite que los parámetros enviados en el cuerpo de la petición sobreescriban los valores previamente fijados por el servidor.
Esto significa que cualquier usuario autenticado puede incluir un parámetro userId arbitrario en el cuerpo de la petición HTTP, logrando que la operación de escritura se aplique sobre la cuenta de otro usuario en lugar de la propia. El vector de ataque es directo y no requiere privilegios elevados ni condiciones especiales más allá de disponer de una sesión autenticada válida.
PUT /api/keys HTTP/1.1
Content-Type: application/json
Authorization: Bearer <token_del_atacante>
{
"userId": "<id_de_la_victima>",
"provider": "openai",
"key": "sk-atacante-controlado"
}
Impacto
La explotación de esta vulnerabilidad permite a un atacante autenticado realizar dos tipos de acciones maliciosas sobre la cuenta de cualquier otra víctima registrada en la plataforma:
-
Sustitución de claves API: el atacante puede reemplazar las claves API legítimas de la víctima (por ejemplo, las correspondientes a OpenAI, Anthropic o Azure) por claves bajo su propio control. De este modo, las conversaciones y solicitudes de la víctima serían enrutadas a través de infraestructura controlada por el atacante, lo que abre la puerta a la interceptación de contenido, el consumo fraudulento de cuota y la exposición de datos sensibles.
-
Denegación de servicio selectiva: el atacante puede sustituir las claves válidas de la víctima por valores inválidos o ficticios, impidiendo que la víctima pueda utilizar los proveedores de IA configurados en su cuenta y causando una interrupción funcional de su servicio.
Alcance y versiones afectadas
La vulnerabilidad afecta a todas las instancias de LibreChat en versiones hasta la 0.7.6 inclusive. Cualquier despliegue que permita el registro de múltiples usuarios y el uso de claves API propias es susceptible de ser explotado por cualquier usuario con acceso autenticado a la plataforma.
Solución y mitigación
El problema ha sido corregido en la versión 0.8.3-rc1. Se recomienda actualizar a esta versión o a cualquier versión estable posterior que incorpore el parche. La corrección implica garantizar que el identificador del usuario autenticado se aplique después del spread del cuerpo de la petición, o bien que el parámetro userId proveniente del cliente sea ignorado y descartado explícitamente antes de procesar la operación de escritura.
Mientras no sea posible aplicar el parche, se recomienda restringir el acceso al endpoint PUT /api/keys mediante controles de red o proxies inversos que limiten las peticiones a usuarios de confianza, aunque esta medida no elimina el riesgo de forma definitiva en entornos multiusuario.
