{"id":1197,"date":"2026-06-15T17:35:42","date_gmt":"2026-06-15T17:35:42","guid":{"rendered":"https:\/\/cybercolombia.co\/index.php\/2026\/06\/15\/la-cadena-de-vulnerabilidad-litellm-permite-a-usuarios-con-pocos-privilegios-hacerse-cargo-de-servidores-de-puerta-de-enlace-ai-cyberdefensa-mx\/"},"modified":"2026-06-15T17:35:42","modified_gmt":"2026-06-15T17:35:42","slug":"la-cadena-de-vulnerabilidad-litellm-permite-a-usuarios-con-pocos-privilegios-hacerse-cargo-de-servidores-de-puerta-de-enlace-ai-cyberdefensa-mx","status":"publish","type":"post","link":"https:\/\/cybercolombia.co\/index.php\/2026\/06\/15\/la-cadena-de-vulnerabilidad-litellm-permite-a-usuarios-con-pocos-privilegios-hacerse-cargo-de-servidores-de-puerta-de-enlace-ai-cyberdefensa-mx\/","title":{"rendered":"La cadena de vulnerabilidad LiteLLM permite a usuarios con pocos privilegios hacerse cargo de servidores de puerta de enlace AI \u2013 CYBERDEFENSA.MX"},"content":{"rendered":"<div id=\"articlebody\">\n<p>Una cuenta predeterminada con bajos privilegios en un proxy LiteLLM puede ascender a administrador completo y ejecutar c\u00f3digo en el servidor encadenando tres vulnerabilidades, revelaron investigadores de Obsidian Security.<\/p>\n<p>LiteLLM es una puerta de enlace de IA de c\u00f3digo abierto ampliamente implementada que gestiona llamadas a m\u00e1s de 100 proveedores de modelos detr\u00e1s de una interfaz compatible con OpenAI.<\/p>\n<p>Una toma de control del servidor expone cada clave de proveedor que posee, los secretos que descifran sus credenciales almacenadas y cada mensaje y respuesta que pasa a trav\u00e9s de \u00e9l.<\/p>\n<p>Obsidian califica el CVSS de cadena completa con 9.9, en el rango Cr\u00edtico. <b>berriai<\/b>el mantenedor, incluy\u00f3 el conjunto de correcciones completo en LiteLLM v1.83.14-stable, que GitHub enumera como lanzado el 2 de mayo. Actualice a esa versi\u00f3n o posterior para cerrar la cadena de tres CVE.<\/p>\n<h2>los tres bichos<\/h2>\n<p>El primer enlace es <a href=\"https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2026-47101\">CVE-2026-47101<\/a>una omisi\u00f3n de autorizaci\u00f3n. Cuando un usuario normal (un usuario interno) genera una clave API virtual, LiteLLM almacena el campo de rutas permitidas proporcionado por la persona que llama sin compararlo con la funci\u00f3n del usuario.<\/p>\n<p>Se supone que el campo limita lo que puede hacer una clave. En cambio, el proxy tambi\u00e9n lo trata como una concesi\u00f3n alternativa, por lo que alguien que no sea administrador puede crear una clave con Allow_routes: [\u00ab\/*\u00bb]un comod\u00edn que llega a todas las rutas, incluidas las exclusivas para administradores. La misma escritura no verificada aparece en los otros puntos finales de administraci\u00f3n de claves, raz\u00f3n por la cual la soluci\u00f3n requiri\u00f3 tres solicitudes de extracci\u00f3n para llegar.<\/p>\n<p>Una vez pasada la puerta de ruta, los manejadores detr\u00e1s de ella se vuelven accesibles. Varios de ellos suponen que la puerta ya ha pasado el control, lo que abre dos caminos.<\/p>\n<p>uno es <a href=\"https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2026-47102\">CVE-2026-47102<\/a>escalada de privilegios. El punto final \/user\/update permite al usuario editar su propio registro, pero no restringe qu\u00e9 campos puede escribir. Se acepta y guarda una actualizaci\u00f3n autom\u00e1tica con user_role: \u00abproxy_admin\u00bb, lo que promueve a la persona que llama a administrador de proxy completo. Un org_admin puede llegar a este punto final a trav\u00e9s de una ruta de c\u00f3digo leg\u00edtima y prevista sin necesidad de omitirla; un usuario interno predeterminado lo alcanza despu\u00e9s de CVE-2026-47101.<\/p>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thehackernews.uk\/ai-cant-stop-d\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Ciberseguridad\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjPEV6-530TOlxG6PjrmdlY623wpBwduZ7t1HV6flcmO5R4q4AmfixDUzW0CrhlvMVNWbhvOIso-UDNTka4W_W9Chrdj_dglwBZwi7DuePM2IMIl-hfUYVIqBXgfpr_2619K8Gptb4LzwJ6gUbi7lWl2M8AFQJsHEaw63Q7tZ6708YGruiHrr0Y2W9YYxLQ\/s728-e100\/ThreatLocker-d.png\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>VulnCheck, que asign\u00f3 el CVE, le otorga una puntuaci\u00f3n de 8,7 en CVSS 4.0 y 8,8 en 3.1.<\/p>\n<p>El otro es <a href=\"https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2026-40217\">CVE-2026-40217<\/a>un escape de espacio aislado en Custom Code Guardrail, que compila y ejecuta Python proporcionado por el administrador. Los puntos finales de producci\u00f3n ejecutaron el c\u00f3digo a trav\u00e9s de exec() sin filtrado a nivel de fuente. Cuando exec() obtiene un dictado global sin __builtins__, Python inyecta silenciosamente el m\u00f3dulo integrado completo, que entrega el c\u00f3digo __import__, open y eval. Una carga \u00fatil simple que llamara a os.system fue suficiente para un shell inverso.<\/p>\n<p>Una ruta separada en el punto final del \u00e1rea de juegos \/guardrails\/test_custom_code, encontrada de forma independiente por <a href=\"https:\/\/www.x41-dsec.de\/lab\/advisories\/x41-2026-001-litellm\/\">X41 D-Sec<\/a>derrot\u00f3 una lista de denegaci\u00f3n de expresiones regulares mediante la reescritura del c\u00f3digo de bytes en tiempo de ejecuci\u00f3n. Ambos terminaron en la ejecuci\u00f3n de c\u00f3digo del lado del servidor.<\/p>\n<h2>Lo que obtiene un atacante<\/h2>\n<p>LiteLLM se encuentra en un cuello de botella, por lo que el alcance es amplio. Una cadena completa expone la clave maestra, la clave salt que descifra las credenciales almacenadas y la URL de la base de datos. Tambi\u00e9n expone todas las claves de proveedor configuradas, para OpenAI, Anthropic, Gemini, Bedrock, Azure y el resto.<\/p>\n<p>Las claves en la configuraci\u00f3n o el entorno son texto sin formato; Las claves de la base de datos est\u00e1n cifradas pero se pueden recuperar con la clave salt. Todo lo que se env\u00eda a trav\u00e9s de la puerta de enlace, indicaciones y respuestas, se vuelve legible, que en implementaciones reales es donde terminan la PII, el c\u00f3digo fuente, los tickets internos y los secretos pegados.<\/p>\n<div class=\"separator\" style=\"clear: both;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjnKip7mmSHI_3xuDXtGN9iR7kBNTTAtRw2cSUWZhNjrI7CHRDzRPN28cr2mryfdJ-nxzGzP8lLkv_IK_GXvVRCelBmM0cG0EzAkwdtFCXXpWrO3xXDrltfNGTzms0-dlQHJovhPSKWVSzcLcb4wWb5eT0nq9yzLKVaoGz42a1BOpQdzAxnSeFFoqBr874\/s1700-e365\/llm-exploit.jpg\" style=\"display: block;  text-align: center; clear: left; float: left;\"><img decoding=\"async\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjnKip7mmSHI_3xuDXtGN9iR7kBNTTAtRw2cSUWZhNjrI7CHRDzRPN28cr2mryfdJ-nxzGzP8lLkv_IK_GXvVRCelBmM0cG0EzAkwdtFCXXpWrO3xXDrltfNGTzms0-dlQHJovhPSKWVSzcLcb4wWb5eT0nq9yzLKVaoGz42a1BOpQdzAxnSeFFoqBr874\/s1700-e365\/llm-exploit.jpg\" alt=\"\" border=\"0\" data-original-height=\"691\" data-original-width=\"1694\"\/><\/a><\/div>\n<p>Si el proxy tambi\u00e9n se ejecuta como protocolo de contexto modelo (MCP) o puerta de enlace de agente, los tokens de OAuth y las credenciales de herramientas tambi\u00e9n est\u00e1n dentro del alcance.<\/p>\n<p>El mayor riesgo no es lo que lee un atacante sino lo que puede reescribir. La puerta de enlace se encuentra en el cable entre un agente de IA y el modelo, por lo que un compromiso le permite alterar las respuestas en tr\u00e1nsito.<\/p>\n<p><a href=\"https:\/\/www.obsidiansecurity.com\/blog\/litellm-privilege-escalation-rce\">Obsidiana demostrada<\/a> esto contra Claude Code enrutado a trav\u00e9s de un proxy comprometido. Esta no es una inyecci\u00f3n inmediata. En lugar de persuadir al modelo para que se comporte mal, el atacante utiliza el mecanismo de devoluci\u00f3n de llamada integrado de LiteLLM, un punto de extensi\u00f3n que se activa con cada solicitud y nunca aparece en la interfaz de usuario del administrador. La devoluci\u00f3n de llamada intercambia la respuesta del modelo por una llamada de herramienta falsificada y reescribe el contexto de verificaci\u00f3n de seguridad para que la acci\u00f3n se lea como aprobada.<\/p>\n<p>En la demostraci\u00f3n, el desarrollador escribe una palabra, hola, y el atacante abre un shell inverso en la m\u00e1quina del desarrollador.<\/p>\n<p>Separado de la cadena, LiteLLM le entrega a proxy_admin una ruta de ejecuci\u00f3n de c\u00f3digo intencional: su soporte MCP le permite a un administrador registrar servidores stdio MCP que el proxy inicia como subprocesos locales. Se trata de una compensaci\u00f3n de dise\u00f1o m\u00e1s que de un error, y los parches no lo cambian, por lo que llegar al administrador es efectivamente llegar a la ejecuci\u00f3n del c\u00f3digo.<\/p>\n<p>Obsidian reprodujo un caparaz\u00f3n inverso de esta manera en v1.88.0. Un error genuino en la misma maquinaria stdio-MCP, CVE-2026-42271, permite a las personas que llaman generar subprocesos a trav\u00e9s de los puntos finales de vista previa de MCP de LiteLLM; fue explotado en estado salvaje y agregado al cat\u00e1logo KEV de CISA a principios de este mes.<\/p>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thehackernews.uk\/vpn-threat-report-m\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Ciberseguridad\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhFlTC7RrRZGiFAgASS0noWSL0qsQGFVp8-Hvuw9yp3X3VKRuTcb5SsPX09wJzrdIM6pu1_5lS4EeZp7Sx4iYBpNJkrGnpr08yyaS1HQ5_5TxaCsP6O0OtHNuOkesn6CbNjao1GPulCJk-uljYMSfMZfBYNrngpe669t7jlRn1FqiEnXhsFD1WVkpaYIVgh\/s728-e100\/ai-d.jpg\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>Nada de esto es el primer momento dif\u00edcil para LiteLLM este a\u00f1o. En marzo, un compromiso de la cadena de suministro bloque\u00f3 dos versiones de LiteLLM en PyPI y, en abril, se aprovech\u00f3 una inyecci\u00f3n SQL cr\u00edtica dentro de las 36 horas posteriores a la divulgaci\u00f3n.<\/p>\n<p>Obsidian enmarca la cadena aqu\u00ed como una falla revelada con una demostraci\u00f3n funcional, no como una explotaci\u00f3n vista en la naturaleza, pero la posici\u00f3n del proxy sigue convirti\u00e9ndola en un objetivo.<\/p>\n<h2>que hacer<\/h2>\n<p>Actualice a v1.83.14 estable o posterior, la primera versi\u00f3n con el conjunto completo de correcciones. Luego audite. Vuelva a verificar cada cuenta que tenga proxy_admin y trate esa funci\u00f3n como acceso a nivel de host. Revise cada medida de seguridad de c\u00f3digo personalizado en el proxy.<\/p>\n<p>Verifique las devoluciones de llamada cargadas desde config.yaml en litellm_settings.callbacks, ya que nunca aparecen en la consola y son exactamente donde se esconder\u00eda un atacante posterior a RCE. Verifique la integridad del c\u00f3digo implementado, no solo la configuraci\u00f3n. Si se sospecha una exposici\u00f3n, rote las claves del proveedor, las credenciales de la base de datos y los tokens MCP almacenados.<\/p>\n<p>Un proxy comprometido no s\u00f3lo filtra datos. Se sit\u00faa entre el agente y el modelo y puede forjar las respuestas sobre las que act\u00faa el agente. La cadena que lleva a un atacante all\u00ed tiene una confianza fuera de lugar en cada capa: la puerta de ruta confiaba en el campo proporcionado por la persona que llama, los controladores confiaban en la puerta de ruta y nadie realmente comprob\u00f3.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Una cuenta predeterminada con bajos privilegios en un proxy LiteLLM puede ascender a administrador completo y ejecutar c\u00f3digo en el servidor encadenando tres vulnerabilidades, revelaron investigadores de Obsidian Security. LiteLLM es una puerta de enlace de IA de c\u00f3digo abierto ampliamente implementada que gestiona llamadas a m\u00e1s de 100 proveedores de modelos detr\u00e1s de una [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":752,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25,5],"tags":[249,2164,31,24,2316,3122,1253,265,3121,317,32,87,1115,313],"class_list":["post-1197","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-noticias","category-trending","tag-cadena","tag-cargo","tag-con","tag-cyberdefensa-mx","tag-enlace","tag-hacerse","tag-litellm","tag-permite","tag-pocos","tag-privilegios","tag-puerta","tag-servidores","tag-usuarios","tag-vulnerabilidad"],"_links":{"self":[{"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/posts\/1197","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/comments?post=1197"}],"version-history":[{"count":0,"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/posts\/1197\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/media\/752"}],"wp:attachment":[{"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/media?parent=1197"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/categories?post=1197"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/tags?post=1197"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}