- Wiz Research a confirmé qu’une chaîne de vulnérabilités d’isolation entre tenants dans SAP AI Core permettait de partir d’une exécution de code dans une tâche d’entraînement IA légitime pour aboutir à la prise de contrôle du service et à l’accès à des secrets clients
- Le chemin d’attaque reposait sur un enchaînement de contournement des restrictions réseau d’Istio, d’exposition de jetons AWS dans la configuration de Loki, de partages EFS sans authentification et d’un accès non authentifié à Helm v2 Tiller
- Avec les privilèges obtenus, il était possible de lire et modifier des images et artefacts dans le Docker Registry interne de SAP, Google Container Registry et l’Artifactory interne, ainsi que d’obtenir les privilèges cluster-admin sur le cluster Kubernetes
- Un attaquant potentiel pouvait accéder aux identifiants AWS, Azure et SAP HANA Cloud des clients, ainsi qu’à des livrables IA privés comme des modèles, des jeux de données et du code, ou encore compromettre des artefacts internes
- SAP a corrigé toutes les vulnérabilités signalées et fait une rotation des secrets concernés, et Wiz a indiqué qu’aucune compromission de données clients n’avait eu lieu
Problème d’isolation entre tenants révélé dans SAP AI Core
- Wiz Research étudie l’isolation entre tenants chez les fournisseurs de services IA, et SAP AI Core constitue son troisième rapport après Hugging Face et Replicate
- SAP AI Core est un service managé qui permet aux utilisateurs de développer, entraîner et exécuter des services IA sur les ressources cloud de SAP
- Les services d’entraînement IA doivent accéder à de grands volumes de données clients sensibles, et SAP AI Core utilise des clés d’accès cloud pour accéder aux données internes des clients afin d’intégrer HANA et d’autres services cloud
- L’étude a commencé avec un compte client SAP disposant des privilèges de base, en créant un projet IA puis en générant un Pod Kubernetes via un fichier Argo Workflow autorisé par SAP AI Core
- Les utilisateurs pouvaient, par conception, exécuter du code arbitraire dans le Pod, mais dans l’environnement initial, le sidecar proxy Istio limitait l’accès réseau, ce qui rendait difficile le scan du réseau interne
Bug n°1 : contournement des restrictions d’Istio
- Le contrôleur d’admission de SAP bloquait les options de sécurité dangereuses, y compris les tentatives d’exécuter un conteneur en
root - Deux paramètres non bloqués ont cependant permis de contourner les restrictions réseau
shareProcessNamespacepermettait de partager l’espace de noms des processus avec le conteneur sidecar, donnant accès à la configuration du proxy Istio et au jeton d’accès au serveur central IstiodrunAsUseretrunAsGroupautorisaient d’autres UID queroot, ce qui permettait d’exécuter le processus avec l’UID d’Istio,1337
- Istio lui-même est exclu des règles iptables d’Istio, de sorte qu’un processus exécuté avec l’UID
1337fonctionnait sans restriction de trafic - Il a ensuite été possible d’utiliser le jeton Istio pour lire la configuration du serveur Istiod et récupérer des informations sur l’environnement interne
Bug n°2 : exposition de jetons AWS dans la configuration de Loki
- Une instance Grafana Loki a été découverte à l’intérieur du cluster, et une requête sur l’endpoint
/configpermettait d’afficher toute sa configuration - La réponse contenait les secrets AWS utilisés par Loki pour accéder à S3
- Ces secrets donnaient accès au bucket S3 de Loki, qui contenait de nombreux logs du service AI Core et des logs des Pods clients
- SAP estime que ces logs n’étaient pas sensibles
Bug n°3 : exposition de fichiers utilisateurs via des partages EFS sans authentification
- Six instances AWS Elastic File System, soit des EFS, écoutant sur le port
2049, ont été découvertes sur le réseau interne - Ces instances EFS permettaient de consulter ou modifier des fichiers sans identifiants, dès lors qu’un accès réseau était possible
- Le contenu des partages était librement accessible avec de simples outils NFS open source
- Les EFS stockaient de grands volumes de données IA, notamment du code et des jeux de données d’entraînement classés par identifiant client
Bug n°4 : un Helm Tiller sans authentification expose le Registry interne et Artifactory
- Le service Tiller, composant serveur de Helm v2, a été découvert sur le réseau interne
- Tiller communique via une interface gRPC sur le port
44134et est exposé par défaut sans authentification - L’interrogation de Tiller a révélé des secrets à forts privilèges pour le Docker Registry de SAP et le serveur Artifactory
- Avec les droits de lecture, il était possible de consulter des images et builds internes afin d’extraire des secrets commerciaux et des données clients
- Avec les droits d’écriture, il était possible de compromettre des images et builds et de mener une attaque de la chaîne logistique contre le service SAP AI Core
Bug n°5 : prise de contrôle du cluster Kubernetes via les droits d’écriture de Helm Tiller
- Tiller autorisait non seulement la lecture, mais aussi les opérations d’écriture
- Comme la commande
installrécupère un package Helm et le déploie sur le cluster Kubernetes, l’équipe de recherche a créé puis installé un package Helm malveillant capable de générer un nouveau Pod avec les privilègescluster-admin - Cette opération a permis d’obtenir le contrôle total du cluster
- Ce niveau de privilèges permettait d’accéder directement aux Pods d’autres clients et d’en voler des données sensibles comme des modèles, des jeux de données et du code
- Il permettait aussi de perturber les Pods clients, d’altérer les données IA et de manipuler les inférences des modèles
- Avec les mêmes privilèges, il était également possible de consulter en clair des secrets clients dépassant le périmètre de SAP AI Core
- Le compte AI Core de l’équipe contenait un secret de compte AWS pour l’accès aux données S3
- Il contenait un secret de compte SAP HANA pour l’accès au Data Lake
- Il contenait un secret de compte Docker Hub pour le pull d’images
- La même consultation a aussi mis au jour une clé d’accès SAP nommée
sap-docker-registry-secretpour Google Container Registry, avec des droits de lecture et d’écriture
Étendue d’accès confirmée et impact potentiel
- La chaîne de vulnérabilités permettait notamment les actions suivantes
- lire et modifier des images Docker dans le Registry de conteneurs interne de SAP
- lire et modifier des images Docker SAP dans Google Container Registry
- lire et modifier des artefacts sur le serveur Artifactory interne de SAP
- obtenir les privilèges cluster-admin sur le cluster Kubernetes de SAP AI Core
- accéder aux identifiants cloud des clients et à des livrables IA privés
- Un attaquant potentiel pouvait accéder aux données clients et compromettre des artefacts internes, avec un impact pouvant ensuite se propager aux services associés et à d’autres environnements clients
- Toutes les vulnérabilités ont été signalées à l’équipe sécurité de SAP, puis corrigées par SAP, qui a reconnu ces travaux sur sa page de crédits aux chercheurs en sécurité
- Les données clients n’ont pas été compromises
Problèmes mis en évidence du point de vue défensif
- La principale ligne de défense reposait sur Istio pour bloquer l’accès au réseau interne, mais une fois cette barrière contournée, plusieurs actifs internes ne demandaient aucune authentification supplémentaire
- Le réseau interne était traité comme une zone de confiance, si bien qu’un seul contournement pouvait se transformer en prise de contrôle du service
- Si les services internes avaient été davantage renforcés, l’impact aurait pu être limité à un incident de sécurité mineur plutôt qu’à une compromission complète du service
- Les services managés basés sur Kubernetes peuvent créer des pièges d’isolation entre tenants, car le plan de contrôle et le calcul client sont reliés logiquement par des API, des identités, du calcul partagé et une segmentation réseau logicielle
- L’entraînement IA exige par nature l’exécution de code arbitraire, ce qui impose des garde-fous afin que ce code non fiable reste correctement isolé des actifs internes et des autres tenants
Calendrier de divulgation
- 25 janvier 2024 : Wiz Research signale ses découvertes de sécurité à SAP
- 27 janvier 2024 : SAP répond et attribue un numéro de dossier
- 16 février 2024 : SAP corrige la première vulnérabilité et fait une rotation des secrets associés
- 28 février 2024 : Wiz Research contourne le correctif avec 2 nouvelles vulnérabilités et les signale à SAP
- 15 mai 2024 : SAP déploie des correctifs pour l’ensemble des vulnérabilités signalées
- 17 juillet 2024 : divulgation publique
1 commentaires
Avis sur Hacker News
Je comprends qu’il s’agisse d’un produit d’IA, mais ici la vulnérabilité se trouve dans la configuration k8s
Cela n’a pas grand-chose à voir avec le produit d’IA lui-même, l’entraînement de l’IA, le machine learning ou l’IA générative ; cela relève plutôt d’une mauvaise sécurité de plateforme cloud
Le fait que « l’attaquant ait pu exécuter un modèle d’IA malveillant et une procédure d’entraînement » est la cause racine, et c’est, par nature, de l’exécution de code
Je comprends que cela ait été étudié et investigué parce que les produits d’IA se répandent largement et qu’il faut donc faire attention à leur infrastructure
Appliquer la sécurité, connaître les besoins de sécurité, tester, ou ne pas lancer tant que ce n’est pas sûr : tout cela relève du rôle de vendeur de cette marque
J’espère que SAP fera un solide retour d’expérience sur les raisons pour lesquelles les recherches de Wiz n’ont pas été bloquées avant d’atteindre les droits d’administrateur complets du cluster
J’aimerais savoir si SAP a reçu des alertes sur cette activité et si elle a fait l’objet d’une enquête correcte. Je me demande aussi si SAP est soumise à des réglementations exigeant un système d’alerte suffisant sur les activités réseau suspectes, et si cette recherche pourrait constituer une preuve qu’ils ne les respectaient pas
La question est de savoir si elles sont réellement respectées, ou si elles ne figurent que dans un classeur posé sur une étagère
Les programmes de bug bounty exigent souvent ce genre de règles dans leur périmètre. Comme le chercheur travaille pour une société de sécurité, je m’attendrais à ce que ce soit aussi le cas ici
Les chercheurs indiquent généralement dans l’article à quel moment ils ont demandé une autorisation supplémentaire, mais ce n’est pas systématique
Je suis choqué qu’une instance tiller soit encore en cours d’exécution. Elle n’est plus prise en charge depuis 2020 : https://helm.sh/blog/helm-v2-deprecation-timeline/
Ici, il s’agit d’une grande entreprise et d’une migration hors de tiller qui peut être assez complexe, mais même sans ces circonstances atténuantes, on trouve facilement de vieux logiciels
C’est vraiment mauvais. Ils exploitaient un unique cluster K8s en s’attendant à de fortes garanties de multi-tenant ?
Tous les grands clouds utilisent des frontières de machines virtuelles entre clients et des clusters K8s distincts. Microsoft s’est aussi fait avoir de manière similaire il y a quelques années avec l’un de ses produits de fonctions, qui comptait sur K8s comme principale frontière de sécurité
Par exemple, dans un contexte d’exécution de code arbitraire comme l’entraînement de modèles, je ne vois pas bien quel rôle joue le multi-tenant K8s
À mes yeux, le principal problème est qu’une fois derrière Istio, qui fait office de proxy/pare-feu, ils faisaient confiance à toutes les communications du réseau interne. Mais il se peut aussi que je ne comprenne pas suffisamment les clusters k8s
C’est une cible mouvante, et vouloir rendre cela sûr avec des admission controllers n’est pas un très bon plan
Si l’on veut envisager un fort multi-tenant face à des tenants hostiles, il faut commencer par regarder des choses comme VirtualClusters (https://github.com/kubernetes-sigs/cluster-api-provider-nest...). Et encore, cela ne concerne que le plan de contrôle, pas du tout le plan de données
Même avec cette couche supplémentaire, je ne sais pas à quel point c’est sûr. Dans le monde des machines virtuelles aussi, il y a eu pendant des années des vulnérabilités d’évasion de VM complètement absurdes
Avoir un cluster séparé pour chaque client coûte absurdement cher et est mauvais pour la planète. Cela peut se justifier pour un produit premium où la sécurité est la priorité absolue, mais des clusters séparés par client, c’est essentiellement brûler de l’argent
Je pense que les entreprises qui s’introduisent dans des réseaux sans autorisation pour trouver des vulnérabilités et en faire du contenu de blog devraient être poursuivies
Cet article ressemble particulièrement à un texte offensif à peine emballé dans une divulgation de vulnérabilité. Le passage disant qu’ils « ont apprécié la coopération » sonne aussi un peu comme de l’extorsion
Vu sous cet angle, cela paraît assez différent, non ?
Mais comme le dit la pratique juridique, cela dérive vers une logique du type « si vous avez des milliards de dollars, la loi ne s’applique plus vraiment »
Quelqu’un a déjà utilisé Wiz ?
C’est peut-être la fusée la plus rapide parmi les éditeurs de logiciels d’entreprise. 100 millions de dollars d’ARR en 1,5 an, puis 350 millions de dollars à la fin de la troisième année
https://www.wiz.io/blog/100m-arr-in-18-months-wiz-becomes-th...
Avec la fonctionnalité de graphe, on peut interroger à peu près n’importe quoi sur tous les comptes si on le souhaite
Je suis content d’avoir convaincu les gens de mon entreprise de faire réaliser le test d’intrusion annuel du produit en environnement de production, et d’inclure toute l’infrastructure de production dans le périmètre
L’accent peut être mis sur un produit ou un système précis, mais tout est dans le périmètre. Le premier test est en cours et personne ne hurle encore, donc j’espère que ça va bien se passer
Je serais aussi curieux de savoir si tu peux recommander une boîte de pentest qui fasse vraiment le travail, au-delà d’un simple passage rapide avec Metasploit
Si j’ai bien lu, les données de compte des clients sont exposées à ces mêmes clients ? À part certains logs, semble-t-il
En tant que chercheur en sécurité, on pourrait penser qu’ils sauraient que la pixellisation est un mauvais choix pour masquer du texte
https://www.bleepingcomputer.com/news/security/researcher-re...
Flouter ou pixelliser semble en fait inutile, indépendamment de l’efficacité. Les données masquées ressemblent à des noms d’hôte locaux et à des parties de hash d’images
Édit : en y regardant de nouveau, il semble que certains endroits aient été floutés et d’autres pixellisés