Vulnerabilidad en Google Vertex AI SDK Permite Secuestro de Modelos

Publicado el

Introducción

Recientemente se ha descubierto una vulnerabilidad en el Google Cloud Vertex AI SDK para Python, que permite a un atacante, sin acceso al proyecto de la víctima, secuestrar la carga de modelos de aprendizaje automático y ejecutar código dentro de la infraestructura de Google. Este problema, identificado por Palo Alto Networks Unit 42, fue reportado a través del programa de recompensas por vulnerabilidades de Google.

Descripción de la Vulnerabilidad

El ataque se basa en una técnica denominada "Pickle in the Middle", que explota la forma en que el SDK selecciona un bucket temporal de Cloud Storage para las cargas de modelos. Si el usuario no especifica un bucket, el SDK genera un nombre predecible a partir del ID del proyecto y la región, como por ejemplo `project-vertex-staging-region`. Sin embargo, el SDK no verifica si el bucket pertenece a la víctima, lo que permite a un atacante crear un bucket con el mismo nombre en su propio proyecto.

De esta manera, cuando la víctima intenta cargar su modelo, el SDK lo sube al bucket del atacante, quien puede entonces reemplazar el modelo cargado por uno malicioso. Muchos modelos de Python se guardan utilizando pickle o joblib, que pueden ejecutar código al ser cargados. Así, cuando Vertex AI carga el modelo modificado, el código del atacante se ejecuta dentro del contenedor de servicio.

Detalles del Ataque

La eficacia del ataque depende de la rapidez. Unit 42 midió aproximadamente 2,5 segundos entre la carga de la víctima y la lectura del archivo por parte de Vertex AI. En una prueba de concepto, el atacante utilizó una Cloud Function que se activó tras la carga, reemplazando el modelo en solo 1,4 segundos antes de que Vertex AI pudiera leerlo. El payload robó un token OAuth del servidor de metadatos del contenedor de servicio y lo envió al atacante.

En el entorno de prueba de Unit 42, ese token no estaba limitado a la implementación comprometida, lo que le permitía acceder a otros artefactos del modelo en el mismo proyecto gestionado por Google, incluidos modelos de TensorFlow con pesos entrenados, así como metadatos de BigQuery, listas de acceso, registros de inquilinos, nombres de clústeres de GKE y rutas internas de imágenes de contenedor.

Condiciones del Ataque

El ataque solo se puede llevar a cabo bajo condiciones específicas: el bucket de staging por defecto de la víctima no debe existir ya en esa región y el parámetro `staging_bucket` debe dejarse sin asignar. La primera condición es común en nuevos proyectos de Vertex AI en una región, mientras que la segunda depende de que el desarrollador confíe en el valor por defecto del SDK en lugar de nombrar su propio bucket.

Respuesta de Google

Unit 42 reportó la vulnerabilidad a Google el 5 de marzo de 2026. Se probaron las versiones 1.139.0 y 1.140.0, que resultaron ser vulnerables. Google lanzó un parche inicial en la versión 1.144.0 el 31 de marzo, añadiendo un uuid4 aleatorio al nombre del bucket. La solución definitiva se implementó en la versión 1.148.0 el 15 de abril, incluyendo una verificación de propiedad del bucket para prevenir el bucket squatting en `Model.upload()`. Hasta la fecha de publicación, ni Unit 42 ni los boletines de seguridad de Google sobre Vertex AI han listado un CVE para este problema.

Recomendaciones

Se recomienda actualizar a la versión 1.148.0 o posterior para activar la verificación de propiedad. Además, es crucial establecer un `staging_bucket` explícito en una ubicación de Cloud Storage controlada por el usuario al cargar modelos. Como la lógica defectuosa reside en el SDK cliente, es fundamental verificar la versión de `google-cloud-aiplatform` en todos los entornos donde se ejecute, incluidos notebooks, trabajos de CI y pipelines de entrenamiento, no solo en servicios de producción.

Esta es la segunda vulnerabilidad de nombres de bucket predecibles que se ha descubierto en Vertex AI este año. Google ya había corregido el CVE-2026-2473 en febrero, un bug separado de bucket squatting en Vertex AI Experiments que también permitía la ejecución de código entre inquilinos, robo de modelos y envenenamiento.

La investigación previa de Unit 42 sobre los permisos del agente de servicio por defecto de Vertex AI trazó un camino relacionado desde un agente de IA desplegado hasta los datos de clientes e inquilinos.

Fuente

Ver noticia original