SAPwned: vulnerabilidad de SAP AI expuso entornos cloud de clientes y resultados privados de IA
(wiz.io)- Wiz Research confirmó que, mediante una cadena de vulnerabilidades de aislamiento de tenants en SAP AI Core, la ejecución de código iniciada desde una tarea legítima de entrenamiento de IA podía derivar en la toma del servicio y el acceso a secretos de clientes
- La ruta de ataque combinaba en cadena una evasión de las restricciones de red de Istio, la exposición de tokens de AWS en la configuración de Loki, recursos compartidos EFS sin autenticación y acceso sin autenticación a Helm v2 Tiller
- Con los permisos obtenidos, era posible leer y modificar imágenes y artefactos del Docker Registry interno de SAP, Google Container Registry y Artifactory interno, y también obtener permisos cluster-admin en el clúster de Kubernetes
- Un atacante potencial podía acceder a credenciales de AWS, Azure y SAP HANA Cloud de los clientes, así como a resultados privados de IA como modelos, datasets y código, o contaminar artefactos internos
- SAP corrigió todas las vulnerabilidades reportadas y rotó los secretos relacionados, y Wiz afirmó que no hubo filtración de datos de clientes
Problemas de aislamiento de tenants revelados en SAP AI Core
- Wiz Research ha estado investigando el aislamiento de tenants en proveedores de servicios de IA, y SAP AI Core es su tercer reporte después de Hugging Face y Replicate
- SAP AI Core es un servicio administrado que permite a los usuarios desarrollar, entrenar y ejecutar servicios de IA sobre recursos cloud de SAP
- Los servicios de entrenamiento de IA necesitan acceder a grandes volúmenes de datos sensibles de clientes, y SAP AI Core usa claves de acceso cloud que acceden a datos internos de clientes para integrarse con HANA y otros servicios cloud
- La investigación comenzó creando un proyecto de IA desde una cuenta de cliente de SAP con permisos básicos y generando un Pod de Kubernetes mediante un archivo de Argo Workflow permitido por SAP AI Core
- Por diseño, los usuarios podían ejecutar código arbitrario dentro del Pod, pero en el entorno inicial un sidecar de proxy de Istio restringía el acceso de red, lo que dificultaba escanear la red interna
Bug #1: evasión de restricciones de Istio
- El admission controller de SAP bloqueaba opciones de seguridad riesgosas, y también impedía intentos de ejecutar contenedores como
root - Dos configuraciones no bloqueadas permitieron evadir las restricciones de red
shareProcessNamespacepermitía compartir el namespace de procesos con el contenedor sidecar, lo que hacía posible ver la configuración del proxy de Istio y el token de acceso al servidor central IstiodrunAsUseryrunAsGrouppermitían UID distintos deroot, por lo que era posible ejecutar procesos con1337, el UID de Istio
- Como Istio en sí queda excluido de las reglas iptables de Istio, los procesos ejecutados con UID
1337operaban sin restricciones de tráfico - Luego, con el token de Istio, fue posible leer la configuración del servidor Istiod y obtener información del entorno interno
Bug #2: exposición de tokens de AWS en la configuración de Loki
- Dentro del clúster se encontró una instancia de Grafana Loki, y mediante una solicitud al endpoint
/configse pudo ver la configuración completa - La respuesta incluía secretos de AWS que Loki usaba para acceder a S3
- Esos secretos otorgaban acceso al bucket S3 de Loki, que contenía muchos logs del servicio AI Core y logs de Pods de clientes
- SAP consideró que esos logs no eran sensibles
Bug #3: exposición de archivos de usuarios en recursos compartidos EFS sin autenticación
- En la red interna se encontraron seis instancias de AWS Elastic File System, es decir EFS, escuchando en el puerto
2049 - Esas instancias de EFS permitían ver o editar archivos sin credenciales siempre que hubiera acceso de red
- Con solo herramientas NFS de código abierto se podía acceder libremente al contenido compartido
- En EFS había grandes volúmenes de datos de IA, como código y datasets de entrenamiento clasificados por ID de cliente
Bug #4: Helm Tiller sin autenticación expuso Registry interno y Artifactory
- En la red interna se encontró el servicio Tiller, el componente de servidor de Helm v2
- Tiller se comunica mediante una interfaz gRPC en el puerto
44134y, por defecto, queda expuesto sin autenticación - Las consultas a Tiller expusieron secretos con altos privilegios para SAP Docker Registry y servidores Artifactory
- Con permisos de lectura era posible leer imágenes internas y builds para extraer secretos comerciales y datos de clientes
- Con permisos de escritura era posible contaminar imágenes y builds para ejecutar un ataque a la cadena de suministro contra el servicio SAP AI Core
Bug #5: toma del clúster de Kubernetes mediante permisos de escritura de Helm Tiller
- Tiller permitía no solo operaciones de lectura, sino también de escritura
- Como el comando
installrecibe un paquete Helm y lo despliega en un clúster de Kubernetes, el equipo de investigación creó e instaló un paquete Helm malicioso que generaba un nuevo Pod con permisoscluster-admin - Con este proceso obtuvieron permisos completos sobre el clúster
- Esos permisos alcanzaban para acceder directamente a Pods de otros clientes y robar datos sensibles como modelos, datasets y código
- También podían interferir con Pods de clientes, contaminar datos de IA y manipular inferencias de modelos
- Con los mismos permisos también podían consultar en texto plano secretos de clientes que iban más allá del alcance de SAP AI Core
- La cuenta de AI Core del equipo de investigación tenía secretos de una cuenta de AWS para acceso a datos en S3
- Había secretos de una cuenta de SAP HANA para acceso a Data Lake
- Había secretos de una cuenta de Docker Hub para hacer pull de imágenes
- En la misma consulta también se identificó una clave de acceso de SAP para Google Container Registry llamada
sap-docker-registry-secret, y esa clave otorgaba permisos tanto de lectura como de escritura
Alcance de acceso confirmado e impacto potencial
- Las acciones posibles mediante la cadena de vulnerabilidades eran las siguientes
- Leer y modificar imágenes Docker del Registry interno de contenedores de SAP
- Leer y modificar imágenes Docker de SAP en Google Container Registry
- Leer y modificar artefactos del servidor Artifactory interno de SAP
- Obtener permisos cluster-admin en el clúster Kubernetes de SAP AI Core
- Acceder a credenciales cloud de clientes y a resultados privados de IA
- Un atacante potencial podía acceder a datos de clientes y contaminar artefactos internos, extendiendo el impacto a servicios relacionados y a entornos de otros clientes
- Todas las vulnerabilidades fueron reportadas al equipo de seguridad de SAP y corregidas por SAP, que las reconoció en su página de créditos para investigadores de seguridad
- Los datos de clientes no fueron comprometidos
Problemas revelados desde la perspectiva defensiva
- La principal línea de defensa era una arquitectura en la que Istio bloqueaba el acceso a la red interna, pero una vez superada esa barrera, varios activos internos no requerían autenticación adicional
- Al tratar la red interna como una zona confiable, una sola evasión escaló hasta una toma del servicio
- Si los servicios internos hubieran estado reforzados, el impacto del ataque podría haberse reducido de una toma completa del servicio a un incidente de seguridad menor
- Los servicios administrados basados en Kubernetes pueden caer en trampas de aislamiento de tenants, porque el plano de control y la computación de clientes quedan conectados lógicamente mediante APIs, identidades, computación compartida y segmentación de red basada en software
- Como el entrenamiento de IA requiere por naturaleza ejecutar código arbitrario, se necesitan guardrails para separar correctamente el código no confiable de los activos internos y de otros tenants
Cronograma de divulgación
- 25 de enero de 2024: Wiz Research reportó los hallazgos de seguridad a SAP
- 27 de enero de 2024: SAP respondió y asignó un número de caso
- 16 de febrero de 2024: SAP corrigió la primera vulnerabilidad y rotó los secretos relacionados
- 28 de febrero de 2024: Wiz Research eludió el parche con 2 vulnerabilidades nuevas y las reportó a SAP
- 15 de mayo de 2024: SAP desplegó correcciones para todas las vulnerabilidades reportadas
- 17 de julio de 2024: divulgación pública
1 comentarios
Opiniones en Hacker News
Entiendo que sea un producto de IA, pero aquí la vulnerabilidad está en la configuración de k8s.
No tiene mucho que ver con el producto de IA en sí, ni con el entrenamiento de IA, machine learning o IA generativa; se parece más a una seguridad de plataforma en la nube deficiente.
Que “un atacante pudiera ejecutar un modelo de IA malicioso y procedimientos de entrenamiento” es la causa raíz, y eso en esencia es ejecución de código.
Entiendo que se investigó porque los productos de IA se están masificando y hay que tener cuidado con esa infraestructura.
Aplicar seguridad, saber que la seguridad es necesaria, probarla o no lanzar hasta que sea segura son todas cosas que esa marca debe hacer como vendedora.
Me gustaría que SAP hiciera una retrospectiva fuerte sobre por qué la investigación de Wiz no fue bloqueada antes de llegar a permisos de administrador de todo el clúster.
Quisiera saber si SAP recibió alertas sobre esta actividad y si la investigó correctamente. También me pregunto si SAP está sujeta a regulaciones que le exijan tener suficientes mecanismos de alerta ante actividad de red sospechosa, y si esta investigación podría ser evidencia de que no los cumplió.
El problema es si realmente las cumplen o si solo están en una carpeta guardada en un estante.
Los programas de bug bounty también suelen exigir estas reglas dentro del alcance definido. Como el investigador pertenece a una empresa de seguridad, esperaría que aquí también haya sido así.
Los investigadores suelen indicar en el artículo en qué punto pidieron autorización adicional, aunque no siempre lo hacen.
Me impacta que hubiera una instancia de tiller corriendo. Está sin soporte desde 2020: https://helm.sh/blog/helm-v2-deprecation-timeline/
Aquí se trata de una gran empresa y hay una migración algo compleja para salir de tiller, pero aun sin esas circunstancias atenuantes es fácil encontrar software antiguo.
Esto es realmente malo. ¿Operaban un único clúster de K8s y esperaban garantías sólidas de multi-tenancy?
Los principales proveedores cloud usan límites de máquinas virtuales y clústeres K8s separados entre clientes. Microsoft también sufrió algo parecido hace unos años en uno de sus productos de funciones, donde esperaba que K8s fuera el principal límite de seguridad.
Por ejemplo, en una situación en la que se ejecuta código arbitrario, como entrenamiento de modelos, no tengo claro qué papel cumple el multi-tenancy de K8s.
A mi entender, el principal problema fue que, una vez detrás de Istio como proxy/firewall, confiaban en toda la comunicación de la red interna. Aunque quizá sea que no entiendo lo suficiente los clústeres k8s.
Es un objetivo en movimiento, así que el plan de hacerlo seguro con admission controllers tampoco es muy bueno.
Si quieres considerar multi-tenancy fuerte asumiendo tenants hostiles, deberías empezar mirando cosas como VirtualClusters (https://github.com/kubernetes-sigs/cluster-api-provider-nest...). Y eso solo habla del plano de control, ni siquiera toca el plano de datos.
Ni siquiera sé qué tan seguro es con esa capa adicional. Incluso en el ámbito de las máquinas virtuales, durante años hubo vulnerabilidades absurdas de escape de VM.
Tener un clúster separado por cliente es absurdamente caro y además malo para el planeta. Podría tener sentido en un producto premium donde la seguridad sea la prioridad máxima, pero clústeres separados por cliente básicamente equivalen a quemar dinero.
Creo que las empresas que se infiltran en redes sin permiso para encontrar vulnerabilidades y generar contenido de blog deberían ser procesadas.
Este artículo en particular suena como un texto ofensivo apenas disfrazado de divulgación de vulnerabilidades. Lo de “agradecieron la colaboración” también suena un poco a extorsión.
Visto desde ese ángulo, ¿no se ve bastante diferente?
Pero, como suele mostrar la práctica legal, termina aplicando aquello de que “si tienes miles de millones de dólares, la ley ya no se aplica”.
¿Alguien ha usado Wiz?
Puede que sea el cohete más rápido entre las empresas de software empresarial. En 1.5 años llegó a 100 millones de dólares de ARR, y al final del tercer año alcanzó 350 millones de dólares
https://www.wiz.io/blog/100m-arr-in-18-months-wiz-becomes-th...
Con la función de grafo, si quieres puedes consultar prácticamente cualquier cosa en todas las cuentas
Me alegra haber convencido a la gente de la empresa de ejecutar la prueba de penetración anual del producto en el entorno de producción, e incluir toda la infraestructura de producción dentro del alcance
El foco puede estar en un producto o sistema específico, pero todo está dentro del alcance. La primera prueba está en curso y todavía nadie está gritando, así que espero que salga bien
También me pregunto si puedes recomendar una empresa de pentesting que haga un trabajo serio, más allá de pasar por encima con Metasploit
Si leí bien, ¿los datos de cuenta de los clientes se exponen al mismo cliente? Solo algunas partes de los logs parecen ser la excepción
Si eres investigador de seguridad, pensaría que sabes que pixelar texto para ocultarlo no es una buena opción
https://www.bleepingcomputer.com/news/security/researcher-re...
Independientemente de si el desenfoque o el pixelado son efectivos, en la práctica parecen innecesarios. Los datos ocultos parecen ser nombres de host locales y partes de hashes de imágenes
Edit: viéndolo de nuevo, parece que en algunas partes usaron desenfoque y en otras pixelado