Grok Build cargó repositorios Git completos en xAI Storage, no solo los archivos que leyó – CYBERDEFENSA.MX

La CLI de codificación Grok Build de xAI estaba cargando repositorios Git completos, con el historial de confirmación completo y todo, en un depósito de Google Cloud Storage ejecutado por xAI, no solo los archivos que necesitaba una tarea de codificación.

Un investigador que publica como cerebroversión de prueba 0.2.93capturó una de esas cargas, clonó el paquete git de la solicitud interceptada y recuperó un archivo que al agente se le había dicho claramente que no abriera.

La carga se realizó en un canal separado del modelo en sí, y es difícil discutir la división de bytes. En un repositorio de 12 GB de archivos que el modelo nunca leyó, el modelo dirige el tráfico a /v1/responses llegó a aproximadamente 192 KB, mientras que el canal de almacenamiento a /v1/storage movió 5,10 GiB, una brecha de aproximadamente 27.800 veces entre lo que necesitaba el modelo y lo que dejaba la máquina.

Esa carga de almacenamiento se ejecutó en 73 fragmentos de aproximadamente 75 MB, cada uno de los cuales devolvió HTTP 200, y a través del tamaño del investigador barrió el tamaño total del repositorio rastreado. El cubo de destino, grok-code-session-tracesse nombra en binario y en etapas metadata.json cuyas rutas por archivo apuntan a gs://grok-code-session-traces/.

El archivo no leído fue src/_probe/never_read_canary.txtplantado con un marcador único. La clonación del paquete capturado lo recuperó palabra por palabra junto con el historial de confirmación completo del repositorio, y la misma prueba se replicó en un segundo repositorio no relacionado. Las capturas lo que establecen es transmisión, aceptación y almacenamiento, no entrenamiento.

El desmontaje no afirma que xAI esté entrenado en el código, que el personal lo lea o que los archivos ignorados por git siempre sean barridos. Los archivos rastreados más el historial es lo que muestra el cable.

Ciberseguridad

El camino de los secretos es separado y más sencillo. Cuando Grok lee un archivo, su contenido pasa al turno del modelo y se realiza un seguimiento. .env fue con ellos sin redactar, canario API_KEY y DB_PASSWORD valores y todo. El mismo contenido también llegó a un session_state archivo destinado al almacenamiento. Los secretos plantados eran falsos, por lo que no se filtró nada real en la prueba. El comportamiento sigue siendo el problema: un archivo de credenciales que el agente leyó durante una tarea salió y se almacenó sin redacción.

La configuración que elegirían la mayoría de los desarrolladores no hizo nada aquí. Con «Mejorar el modelo» desactivado, Grok aún cargó el repositorio y el propio servidor. /v1/settings la respuesta seguía regresando trace_upload_enabled: true. Esa palanca determina si sus datos entrenan el modelo. No rige si su código sale de la máquina. Son dos controles diferentes y sólo uno de ellos estuvo expuesto al usuario.

Cada agente de codificación en la nube tiene que enviar alguna fuente a un modelo remoto para realizar su trabajo, por lo que se espera el primer canal. Enviar todo el repositorio rastreado y su historial es un límite más amplio que enviar los archivos que necesita una tarea.

Un repositorio puede contener código propietario, URL internas, datos de clientes y credenciales que se eliminaron del árbol de trabajo pero que aún se encuentran en el historial de confirmaciones. En propia comparación de herramientas cruzadas de cereblabClaude Code y Codex no enviaron ningún paquete de repositorio; Gemini no envió ninguno en una prueba inactiva, aunque su ejecución de tarea realista fue bloqueada por cuotas antes de terminar.

Grok Build fue el caso atípico. Siguen siendo herramientas en la nube que envían los archivos que abren, por lo que «solo local» es el modelo mental incorrecto para cualquiera de ellas. Pero la recolección al por mayor del espacio de trabajo era específica de Grok Build.

La respuesta de xAI

El 13 de julio lo mismo. 0.2.93 El binario dejó de realizar solicitudes de almacenamiento. cereblab volvió a realizar la prueba seis veces y no vio nada /v1/storage cargas, y el servidor ahora regresó disable_codebase_upload: true y trace_upload_enabled: false.

El desarrollador Peter Dedene informó que la misma bandera fue devuelta a su cuentapor lo que el cierre no fue solo la observación de una sola máquina del cereblab. El cliente probado permaneció 0.2.93 aunque la configuración de su servidor cambió, se trató de un cambio del lado del servidor, no de una solución enviada en una actualización. xAI no ha confirmado si llega a todas las cuentas o es permanente.

Ciberseguridad

Hasta ahora, xAI ha abordado el problema en X en lugar de mediante un aviso de seguridad o una nota de registro de cambios. El Cuenta @SpaceXAI dijo que los equipos empresariales con retención de datos cero nunca tienen código o datos de seguimiento almacenados, que el uso de claves API respeta ZDR y que los consumidores que no lo han habilitado pueden ejecutar /privacy en la CLI para deshabilitar la retención y eliminar datos previamente sincronizados.

Elon Musk fue más allá, dicho todos los datos de usuario cargados hasta ahora serían «borrados total y absolutamente», sin dejar nada atrás. ZDR cubre equipos empresariales y el uso de API, por lo que para suscriptores individuales el /privacy El comando es el control que se ofrece.

Para cualquiera que ya haya ejecutado la herramienta, la decisión es no esperar a xAI. Rote cualquier credencial que Grok haya podido enviar: cualquier cosa que haya leído, cualquier cosa en un archivo rastreado y cualquier cosa en el historial de git que llevaba el paquete, incluido un secreto que usted confirmó y luego eliminó.

Un archivo que fue ignorado y nunca confirmado quedó fuera del paquete. Uno comprometido avanza en la historia y borrarlo más tarde no lo hace retroceder. Un análisis separado de la compilación 0.2.99. Encontré el código de carga todavía en el binario, retenido por la bandera del servidor, por lo que xAI puede volver a activarlo sin una actualización.

Y todavía no ha dicho por qué se cargaron repositorios completos de forma predeterminada, cuánto tiempo se conservaron o cuántos usuarios se vieron afectados. La exclusión voluntaria de la capacitación no es una promesa de que su código permanecerá fijo, y vale la pena comprobar usted mismo lo que sale de la máquina.

La cadena de vulnerabilidad LiteLLM permite a usuarios con pocos privilegios hacerse cargo de servidores de puerta de enlace AI – CYBERDEFENSA.MX

Una cuenta predeterminada con bajos privilegios en un proxy LiteLLM puede ascender a administrador completo y ejecutar código en el servidor encadenando tres vulnerabilidades, revelaron investigadores de Obsidian Security.

LiteLLM es una puerta de enlace de IA de código abierto ampliamente implementada que gestiona llamadas a más de 100 proveedores de modelos detrás de una interfaz compatible con OpenAI.

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és de él.

Obsidian califica el CVSS de cadena completa con 9.9, en el rango Crítico. berriaiel mantenedor, incluyó el conjunto de correcciones completo en LiteLLM v1.83.14-stable, que GitHub enumera como lanzado el 2 de mayo. Actualice a esa versión o posterior para cerrar la cadena de tres CVE.

los tres bichos

El primer enlace es CVE-2026-47101una omisión de autorización. 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ón del usuario.

Se supone que el campo limita lo que puede hacer una clave. En cambio, el proxy también lo trata como una concesión alternativa, por lo que alguien que no sea administrador puede crear una clave con Allow_routes: [«/*»]un comodín que llega a todas las rutas, incluidas las exclusivas para administradores. La misma escritura no verificada aparece en los otros puntos finales de administración de claves, razón por la cual la solución requirió tres solicitudes de extracción para llegar.

Una vez pasada la puerta de ruta, los manejadores detrás de ella se vuelven accesibles. Varios de ellos suponen que la puerta ya ha pasado el control, lo que abre dos caminos.

uno es CVE-2026-47102escalada de privilegios. El punto final /user/update permite al usuario editar su propio registro, pero no restringe qué campos puede escribir. Se acepta y guarda una actualización automática con user_role: «proxy_admin», lo que promueve a la persona que llama a administrador de proxy completo. Un org_admin puede llegar a este punto final a través de una ruta de código legítima y prevista sin necesidad de omitirla; un usuario interno predeterminado lo alcanza después de CVE-2026-47101.

Ciberseguridad

VulnCheck, que asignó el CVE, le otorga una puntuación de 8,7 en CVSS 4.0 y 8,8 en 3.1.

El otro es CVE-2026-40217un escape de espacio aislado en Custom Code Guardrail, que compila y ejecuta Python proporcionado por el administrador. Los puntos finales de producción ejecutaron el código a través de exec() sin filtrado a nivel de fuente. Cuando exec() obtiene un dictado global sin __builtins__, Python inyecta silenciosamente el módulo integrado completo, que entrega el código __import__, open y eval. Una carga útil simple que llamara a os.system fue suficiente para un shell inverso.

Una ruta separada en el punto final del área de juegos /guardrails/test_custom_code, encontrada de forma independiente por X41 D-Secderrotó una lista de denegación de expresiones regulares mediante la reescritura del código de bytes en tiempo de ejecución. Ambos terminaron en la ejecución de código del lado del servidor.

Lo que obtiene un atacante

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én expone todas las claves de proveedor configuradas, para OpenAI, Anthropic, Gemini, Bedrock, Azure y el resto.

Las claves en la configuración o el entorno son texto sin formato; Las claves de la base de datos están cifradas pero se pueden recuperar con la clave salt. Todo lo que se envía a través de la puerta de enlace, indicaciones y respuestas, se vuelve legible, que en implementaciones reales es donde terminan la PII, el código fuente, los tickets internos y los secretos pegados.

Si el proxy también se ejecuta como protocolo de contexto modelo (MCP) o puerta de enlace de agente, los tokens de OAuth y las credenciales de herramientas también están dentro del alcance.

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ánsito.

Obsidiana demostrada esto contra Claude Code enrutado a través de un proxy comprometido. Esta no es una inyección inmediata. En lugar de persuadir al modelo para que se comporte mal, el atacante utiliza el mecanismo de devolución de llamada integrado de LiteLLM, un punto de extensión que se activa con cada solicitud y nunca aparece en la interfaz de usuario del administrador. La devolución de llamada intercambia la respuesta del modelo por una llamada de herramienta falsificada y reescribe el contexto de verificación de seguridad para que la acción se lea como aprobada.

En la demostración, el desarrollador escribe una palabra, hola, y el atacante abre un shell inverso en la máquina del desarrollador.

Separado de la cadena, LiteLLM le entrega a proxy_admin una ruta de ejecución de código 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ón de diseño más que de un error, y los parches no lo cambian, por lo que llegar al administrador es efectivamente llegar a la ejecución del código.

Obsidian reprodujo un caparazón 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és de los puntos finales de vista previa de MCP de LiteLLM; fue explotado en estado salvaje y agregado al catálogo KEV de CISA a principios de este mes.

Ciberseguridad

Nada de esto es el primer momento difícil para LiteLLM este año. En marzo, un compromiso de la cadena de suministro bloqueó dos versiones de LiteLLM en PyPI y, en abril, se aprovechó una inyección SQL crítica dentro de las 36 horas posteriores a la divulgación.

Obsidian enmarca la cadena aquí como una falla revelada con una demostración funcional, no como una explotación vista en la naturaleza, pero la posición del proxy sigue convirtiéndola en un objetivo.

que hacer

Actualice a v1.83.14 estable o posterior, la primera versión con el conjunto completo de correcciones. Luego audite. Vuelva a verificar cada cuenta que tenga proxy_admin y trate esa función como acceso a nivel de host. Revise cada medida de seguridad de código personalizado en el proxy.

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ía un atacante posterior a RCE. Verifique la integridad del código implementado, no solo la configuración. Si se sospecha una exposición, rote las claves del proveedor, las credenciales de la base de datos y los tokens MCP almacenados.

Un proxy comprometido no sólo filtra datos. Se sitúa entre el agente y el modelo y puede forjar las respuestas sobre las que actúa el agente. La cadena que lleva a un atacante allí 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ó.

La representante Delia Ramírez asume el cargo de principal demócrata de ciberseguridad de la Cámara de Representantes

La representante de Illinois, Delia Ramírez, asumirá el cargo de principal demócrata en el subcomité de ciberseguridad del panel de Seguridad Nacional de la Cámara de Representantes, reemplazando al ex representante Eric Swalwell después de su renuncia.

Los demócratas del Comité aprobaron el cambio el martes en una reunión previa a una “audiencia en la sombra” sin la mayoría republicana, centrada en proteger las elecciones de la interferencia de la administración Trump.

Ramírez ganó las elecciones al Congreso por primera vez en 2022 y fue reelegida en 2024. Se ha desempeñado como vicemiembro del comité desde 2023. Ahora es miembro de mayor rango del Subcomité de Ciberseguridad y Protección de Infraestructura.

Ella tiene críticas niveladas durante las audiencias del comité sobre los recortes de personal de la administración Trump en la Agencia de Seguridad de Infraestructura y Ciberseguridad, y fue critico de cómo se aseguraron los datos bajo la iniciativa del Departamento de Eficiencia Gubernamental de la administración dirigida por Elon Musk.

«Bajo una presidencia de Musk y Trump, está claro que la seguridad de la información de los estadounidenses no es una prioridad. Quiero decir, un civil privado sin autorización de seguridad se abrió camino hasta el Tesoro, instaló servidores privados y robó información confidencial de una agencia. Si eso no es una crisis de seguridad nacional, una crisis de ciberseguridad, entonces no sé qué es». Ramírez dijo en una audiencia a principios de 2025.. «La verdadera amenaza a nuestra seguridad nacional son 'fElon' Musk, Trump y su flagrante abuso de poder para robar información y obligar a los empleados a abandonar las agencias».

Ella legislación copatrocinada El año pasado tuvo como objetivo fortalecer la fuerza laboral de ciberseguridad mediante la promoción de medidas para ayudar a los trabajadores de comunidades subrepresentadas y desfavorecidas a unirse al campo.

Pero ella también tuvo críticas de la ciberseguridad estadounidense bajo la administración Biden, incluido el papel de Microsoft en la violación de SolarWinds.

Swalwell dejó el cargo tras su dimisión del Congreso como representante de California en medio de acusaciones de conducta sexual inapropiada.

Su ascenso completa un cambio total de liderazgo para el subcomité. Representante Andy Ogles, republicano por Tennessee, tomó el mazo a fines del año pasado después de que el ex presidente Andrew Garbarino, RN.Y., asumiera el cargo de presidente del comité en pleno.

El subcomité está preparado para celebrar una audiencia el miércoles sobre CISA y su papel como agencia de gestión de riesgos sectoriales para una serie de sectores de infraestructura críticos.

Un portavoz de Ramírez no respondió de inmediato a una solicitud de comentarios sobre su nuevo rol.

Tim Starks

Escrito por Tim Starks

Tim Starks es reportero senior de CyberScoop. Sus paradas anteriores incluyen trabajar en The Washington Post, POLITICO y Congressional Quarterly. Originario de Evansville, Indiana, se ocupa de la ciberseguridad desde 2003. Envíe un correo electrónico a Tim aquí: tim.starks@cyberscoop.com.