
Détecteur d'exécution basé sur eBPF pour les vulnérabilités d'évasion de conteneurs dans runc et Docker, surveillant les appels système et les appels du démon Docker pour détecter l'exploitation de CVE-2024-21626, CVE-2024-23651, CVE-2024-23652 et CVE-2024-23653 pendant les builds et l'exécution.
Ce dépôt est désormais archivé.
Aucune mise à jour ne sera apportée au code et il peut être non sécurisé, voire cassé, au moment où vous lirez cet avis. Considérez-le uniquement à des fins historiques et traitez-le avec précaution.

Dans ce dépôt, vous trouverez une implémentation de référence pour une détection dynamique basée sur eBPF des vulnérabilités runc et Docker CVE-2024-21626, CVE-2024-23651, CVE-2024-23652 et CVE-2024-23653. Elle s'accroche aux appels système Linux (par ex., chdir, mount) et aux invocations de fonctions du démon Docker et les associe aux builds Docker et aux processus de conteneurs afin d'identifier les exploitations de ces vulnérabilités.
Pour une approche basée sur l'analyse statique, veuillez consulter .
CVE-2024-21626 est une vulnérabilité dans le runtime de conteneurs runc permettant à un attaquant de s'échapper de l'isolation du conteneur et d'obtenir un RCE root complet via une image malveillante qui exploite un problème dans la gestion de l'instruction WORKDIR. Comme il existe une condition de « course » entre le moment où certains descripteurs de fichiers vers l'hôte sont ouverts et fermés, un attaquant peut créer un Dockerfile avec l'instruction suivante WORKDIR /proc/self/fd/[ID] (avec ID étant un descripteur de fichier dépendant du système) qui pointera vers le système de fichiers de la machine hôte sous-jacente. Cela peut être exploité lors de l'exécution de :
docker build - Dans 2 cas :
FROM qui contient une commande ONBUILD déclenchant l'exploit, par ex. ONBUILD WORKDIR /proc/self/fd/[ID]. L'instruction ONBUILD injecte la commande non pas dans l'image qui la contient mais dans l'image qui l'utilise comme image de base. Cela signifie que si une image de base est compromise ou intentionnellement malveillante, c'est-à-dire hébergée sur Dockerhub ou d'autres registres de conteneurs publics, l'exploitation est possible même si rien ne change dans l'image que la commande docker build construit réellement.docker runAinsi, cette vulnérabilité peut mettre en danger à la fois les systèmes de build et les environnements de production.
CVE-2024-23651 est une vulnérabilité dans Docker où une commande RUN utilise le drapeau --mount=cache. Il existe une vulnérabilité de type time-of-check/time-of-use (TOCTOU) entre la vérification qu'un répertoire source existe sur l'hôte du démon Docker et l'appel réel à l'appel système mount. Un attaquant peut concevoir un Dockerfile qui placerait un lien symbolique entre ces deux appels pour induire un montage bind arbitraire résultant en un RCE root complet sur l'hôte.
Cette vulnérabilité n'affecte que la commande docker build.
CVE-2024-23653 est une vulnérabilité dans Docker qui se produit lorsqu'un générateur LLB Buildkit personnalisé est utilisé avec la directive # syntax. Le générateur peut utiliser les appels GRPC Client.NewContainer et Container.Start pour exécuter un nouveau conteneur pendant le build. L'argument StartRequest.SecurityMode n'est pas correctement vérifié par rapport aux attentes de privilèges du démon Docker ou de l'appel docker build, ce qui permet à l'appelant GRPC de créer un conteneur privilégié pendant le build. Ce nouveau conteneur privilégié peut ensuite être utilisé pour s'échapper et obtenir un RCE root complet sur l'hôte de build.
Cette vulnérabilité n'affecte que la commande docker build.
CVE-2024-23652 est une vulnérabilité de suppression arbitraire dans Docker. Lorsque RUN --mount est utilisé dans un Dockerfile, si la cible du montage n'existe pas, elle sera créée pour cet environnement. Lorsque l'exécution se termine, ce répertoire créé sera nettoyé. Si la commande en cours d'exécution modifie le chemin utilisé pour le montage en un lien symbolique, la procédure de nettoyage traversera ce lien symbolique et pourra nettoyer des répertoires arbitraires dans le système de fichiers racine de l'hôte.
Cette vulnérabilité n'affecte que la commande docker build.
La détection au moment du build s'applique aux 4 vulnérabilités.
GOOS=linux GOARCH={{amd64/arm64}} go build.sudo (comme requis par eBPF) dans votre environnement de build (c'est-à-dire sudo ebpf-detector &).Leaky vessels vulnerability detected imprimé sur STDOUT, accompagné du CVE respectif, du nom de la vulnérabilité et d'informations forensiques supplémentaires.La détection au moment de l'exécution ne s'applique qu'à la vulnérabilité WORKDIR (CVE-2024-21626).
Dockerfile fourni et poussez-la vers un registre d'images.image dans le detector.yaml (marquée avec TODO).kubectl apply -f detector.yml.Leaky Vessels vulnerability detected imprimé dans les journaux des pods du DaemonSet.Les tests unitaires doivent être exécutés avec sudo, car ils dépendent d'eBPF : sudo go test ebpf-detector/....
WORKDIR au moment de l'exécution (CVE-2024-21626) se produit pendant l'initialisation du conteneur, elle ne sera donc pas détectée sur les conteneurs en cours d'exécution. La détection suppose également que le runtime de conteneurs est containerd.CVE-2024-23651) et de la suppression arbitraire lors du démontage de conteneur au moment du build Buildkit (CVE-2024-23652) sont basées sur le timing et peuvent présenter des faux négatifs en raison de conditions de course.Pour une liste à jour des bogues et problèmes, consultez les problèmes du projet.
Les contributions sont les bienvenues. Voir CONTRIBUTING.md pour plus de détails.
Le détecteur dynamique Leaky Vessels est sous licence Apache-2.0. Voir LICENSE pour plus d'informations.