Une vulnérabilité CVE-2024-21626 a été trouvée dans l'outil de lancement de conteneurs isolés runc, utilisé dans Docker et Kubernetes, permettant d'accéder au système de fichiers de l'environnement hôte depuis un conteneur isolé. Lors d'une attaque, un malfaiteur peut écraser certains fichiers exécutables dans l'environnement hôte et ainsi exécuter son propre code en dehors du conteneur. Dans les environnements d'exécution crun et youki, qui utilisent runc, ainsi que dans LXC, le problème ne se manifeste pas. La vulnérabilité a été corrigée dans la version runc 1.1.12.
En utilisant les outils Docker ou Kubernetes, une attaque peut être réalisée en préparant une image de conteneur spécialement conçue, à partir de laquelle, après son installation et son lancement, il est possible d'accéder au système de fichiers externe depuis le conteneur. Dans le cas de Docker, une exploitation est possible via un Dockerfile spécialement conçu. La vulnérabilité peut également être exploitée en lançant des processus dans le conteneur en utilisant la commande « runc exec » avec un lien du répertoire de travail vers l'espace de nom de l'environnement hôte.
La vulnérabilité est causée par une fuite de descripteurs de fichiers internes. Avant l'exécution du code à l'intérieur du conteneur dans runc, tous les descripteurs de fichiers sont fermés à l'aide du drapeau O_CLOEXEC. Cependant, après l'exécution ultérieure de la fonction setcwd(), un descripteur de fichier reste ouvert, pointant vers le répertoire de travail et continuant d'être accessible après le lancement du conteneur. Plusieurs scénarios de base d'attaque sur l'environnement hôte, utilisant le descripteur de fichier restant, ont été proposés.
Par exemple, l'attaquant peut spécifier dans l'image du conteneur le paramètre process.cwd, pointant vers « /proc/self/fd/7/ », ce qui entraînera le lien du répertoire de travail au processus pid1 dans le conteneur, étant dans l'espace de montage de l'environnement hôte. Ainsi, dans l'image du conteneur, il est possible de configurer l'exécution de « /proc/self/fd/7/../../../../bin/bash » et, via l'exécution d'un script shell, d'écraser le contenu de « /proc/self/exe », qui renvoie à la copie hôte de /bin/bash.
Une autre variante d'attaque permet à un attaquant, enfermé dans un conteneur, d'accéder au répertoire de l'environnement hôte si des processus privilégiés sont lancés dans le conteneur spécifié à l'aide de la commande « runc exec » avec l'option « —cwd ». L'attaquant peut remplacer le chemin du processus en cours d'exécution par un lien symbolique pointant vers « /proc/self/fd/7/ » et ainsi accéder à « /proc/$exec_pid/cwd » pour obtenir l'accès au système de fichiers côté hôte. L'attaquant peut également forcer la réécriture des fichiers exécutables sur le côté hôte en organisant l'exécution d'un fichier exécutable depuis l'environnement hôte (« /proc/self/fd/7/../..../../bin/bash ») suivie de la réécriture du fichier « /proc/$pid/exe », qui renvoie au fichier en cours d'exécution.
De plus, cinq autres vulnérabilités ont été identifiées dans les composants de l'outil Docker :
- CVE-2024-23651 — condition de course dans le paquet BuildKit, utilisé dans Docker pour transformer le code source en artefacts de construction. La vulnérabilité est causée par l'utilisation d'un point de montage commun avec un cache (« —mount=type=cache,source= ») dans des étapes de construction s'exécutant en parallèle, ce qui permet d'accéder aux fichiers de l'environnement hôte depuis le conteneur de construction lors du traitement d'un Dockerfile spécialement conçu. La vulnérabilité a été corrigée dans BuildKit 0.12.5.
- CVE-2024-23652 — un défaut dans la suppression de fichiers vides créés pour le point de montage lors de l'utilisation de l'option « —mount » permet la suppression d'un fichier en dehors du conteneur lors du traitement d'un Dockerfile spécialement conçu. La vulnérabilité a été corrigée dans BuildKit 0.12.5.
- CVE-2024-23653 — une erreur dans l'implémentation de l'API dans BuildKit permet l'exécution d'un conteneur avec des privilèges élevés, malgré l'état de la configuration security.insecure. La vulnérabilité a été corrigée dans BuildKit 0.12.5.
- CVE-2024-23650 — un client ou une interface malveillant(e) pour BuildKit peut provoquer l'arrêt anormal d'un processus en arrière-plan de BuildKit. La vulnérabilité a été corrigée dans BuildKit 0.12.5.
- CVE-2024-24557 — possibilité d'empoisonnement du cache dans Moby, un composant pour construire des systèmes spécialisés d'isolation de conteneurs. Lors du traitement d'une image de conteneur spécialement conçue, il est possible d'insérer des données dans le cache qui peuvent être utilisées lors des étapes de construction ultérieures. La vulnérabilité a été corrigée dans Moby 25.0.2 et 24.0.9.
Source : opennet.ru
