Un bug du noyau Linux peut permettre aux pirates de s’échapper des conteneurs Kubernetes

kubernetes

Une vulnérabilité affectant le noyau Linux et identifiée comme CVE-2022-0185 peut être utilisée pour échapper aux conteneurs dans Kubernetes, donnant accès aux ressources sur le système hôte.

Les chercheurs en sécurité préviennent que l’exploitation de ce problème de sécurité est plus facile et plus prometteuse qu’initialement estimé, et que la correction est une question urgente puisque le code d’exploitation sera bientôt rendu public.

Les évasions de conteneurs sont un type particulier de cyberattaques qui peuvent ouvrir la voie à une infiltration plus profonde et à un mouvement latéral sur le réseau compromis.

Un défaut pas si limité

CVE-2022-0185 est une vulnérabilité de dépassement de mémoire tampon basée sur le tas dans le composant du noyau Linux « File System Context » qui peut entraîner une écriture hors limites, un déni de service et l’exécution de code arbitraire.

Le déclenchement du flux permet à un attaquant de modifier les valeurs dans la mémoire du noyau et d’accéder à tout processus exécuté sur le même nœud.

Basé sur avis de sécurité produit par Distributions Linux la semaine dernière, la faille peut être exploitée par un utilisateur local pour élever ses privilèges sur le système.

Cependant, pour que le processus d’exploit fonctionne, l’attaquant doit tirer parti d’un espace de noms non privilégié ou utiliser « unshare » pour entrer dans un espace de noms avec la permission CAP_SYS_ADMIN.

Cette fonctionnalité n’est pas le paramètre par défaut sur Docker, et l’utilisation de l’indicateur « –privileged » lors du démarrage du conteneur n’est pas une pratique courante.

De plus, la commande « unshare » est bloquée par défaut par le filtre « seccomp » de Docker, donc l’exécution de la commande n’est pas autorisée en premier lieu.

Des analystes de Aquasec notez que lorsque Docker ou d’autres plates-formes de conteneurs sont utilisées dans un cluster Kubernetes, le filtre seccomp est désactivé par défaut, de sorte que la commande « unshare » n’est pas bloquée.

la commande unshare s'exécute normalement dans Kubernetes
la commande unshare s’exécute normalement dans Kubernetes
Source : Aquasec

En tant que tel, un attaquant pourrait exécuter la commande et obtenir un shell avec toutes les fonctionnalités, y compris l’exécution de code sur le système compromis en tant que root.

Crédités pour la découverte de cette vulnérabilité sont des membres de Croisés de Rust (CoR) Équipe CTF William Liu et Jamie Hill-Daniel. Au total, l’équipe compte 21 membres d’Europe et des États-Unis

S’adressant à EZpublish-france.fr, les membres du CdR ont déclaré qu’ils prévoyaient de publier le code d’exploitation pour CVE-2022-0185 dans un peu plus d’une semaine, afin de donner plus de temps pour les correctifs. Le code sera disponible dans Dépôt GitHub du CdR.

Le bug de débordement de tas affecte toutes les versions du noyau Linux à partir de 5.1-rc1 jusqu’aux dernières versions corrigées (5.4.173, 5.10.93, 5.15.1). Cela affecte Ubuntu 20/21, Debian 11 et certains packages Red Hat.

Un code d’exploitation pour cette vulnérabilité a été créé et l’un des chercheurs qui l’a découvert a démontré qu’il pouvait être exploité avec succès.

L’équipe du CoR a également déclaré qu’elle avait également créé un code d’exploitation fonctionnel pour le système d’exploitation optimisé Google Container pour les conteneurs Docker.

Atténuation

La mise à niveau du noyau Linux vers la version 5.16.2 ou ultérieure résout le problème. Cependant, le la mise à jour n’est pas disponible pour toutes les distributions Linux et la construction du noyau à partir de la source n’est pas une option adoptée par de nombreux administrateurs système.

Dans ces cas, il est conseillé aux utilisateurs de désactiver les espaces de noms d’utilisateurs non privilégiés et de ne conserver les pods avec CAP_SYS_ADMIN que sur les charges de travail où cela est absolument essentiel.

Sur Ubuntu, utilisez cette commande pour désactiver les espaces de noms non privilégiés :

sysctl -w kernel.unprivileged_userns_clone=0

Les utilisateurs de Red Hat qui n’ont pas besoin de déploiements conteneurisés peuvent désactiver les espaces de noms d’utilisateurs avec la commande suivante :

# echo "user.max_user_namespaces=0" > /etc/sysctl.d/userns.conf
# sysctl -p /etc/sysctl.d/userns.conf

Si vous avez besoin de conteneurs non privilégiés, assurez-vous que le filtre seccomp bloque activement l’appel « unshare ».

Pour les charges de travail individuelles, seccomp peut être ajouté en tant que définition dans le champ « securityContext ». Kubernetes a un tutoriel détaillé sur la façon de procéder, alors assurez-vous de Vérifiez-le.