Retour au blog
DockerKubernetesCVE-2019-5736conteneursévasioncluster

Docker et Kubernetes : CVE critiques et sécurité des conteneurs

Docker et Kubernetes concentrent des vulnérabilités permettant l'évasion de conteneurs et la compromission du cluster. Analyse des CVE majeures et hardening de votre infrastructure conteneurisée.

23 avril 20264 min de lecture

La conteneurisation avec Docker et l'orchestration avec Kubernetes sont devenus les standards de l'infrastructure moderne. Mais des vulnérabilités dans ces composants peuvent permettre à un attaquant de s'échapper d'un conteneur pour compromettre l'hôte, ou de prendre le contrôle de l'ensemble d'un cluster Kubernetes.

CVE-2019-5736 : Runc Container Escape (CVSS 8.6)

L'évasion de conteneur la plus célèbre

CVE-2019-5736 est une vulnérabilité dans runc — le runtime de conteneurs utilisé par Docker, containerd, CRI-O et d'autres. Elle permet à un conteneur malveillant d'écraser le binaire runc sur l'hôte, obtenant ainsi l'exécution de code arbitraire sur le système hôte avec les privilèges root.

Comment ça fonctionne :

En exploitant le fait que /proc/self/exe dans un conteneur pointe vers le binaire runc de l'hôte pendant l'exécution, un attaquant peut :

  1. Ouvrir un descripteur de fichier vers /proc/self/exe
  2. Attendre que le processus runc se termine
  3. Écraser le binaire runc avec du code malveillant
  4. La prochaine exécution de runc exécute le code malveillant sur l'hôte

Versions affectées : runc < 1.0-rc6, Docker < 18.09.2

CVE-2022-0492 : Évasion via cgroup v1 (CVSS 7.8)

Une mauvaise vérification des autorisations dans la gestion des cgroups Linux permettait à un conteneur non privilégié d'écrire dans le fichier release_agent d'un cgroup, ce qui était exécuté avec les privilèges root de l'hôte à la libération du cgroup.

# Exploit simplifié
mkdir /tmp/cgroup && mount -t cgroup -o rdma cgroup /tmp/cgroup
mkdir /tmp/cgroup/x
echo 1 > /tmp/cgroup/x/notify_on_release
host_path=$(sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab | head -1)
echo "$host_path/cmd" > /tmp/cgroup/release_agent
# Exécution de /cmd sur l'hôte lors du nettoyage du cgroup

CVE-2021-25741 : Symlink Escape dans Kubernetes (CVSS 8.1)

Une faille dans kubelet permettait à un pod malveillant de créer des liens symboliques qui, lors du montage de volumes hostPath, permettaient d'accéder à des fichiers arbitraires sur le nœud Kubernetes hôte, y compris les secrets système.

CVE-2018-1002105 : Privilege Escalation dans Kubernetes (CVSS 9.8)

L'une des pires CVE Kubernetes. Une faille dans le serveur d'API Kubernetes permettait à n'importe quel utilisateur authentifié (même sans droits particuliers) d'exécuter des requêtes directement vers les backends de l'API avec les privilèges du serveur d'API lui-même — soit les droits cluster-admin.

CVE-2024-21626 : Runc Escape (CVSS 8.6)

En 2024, une nouvelle évasion runc via WORKDIR mal géré. Un conteneur pouvait s'échapper vers l'hôte en utilisant un descripteur de fichier laissé ouvert vers le répertoire de travail lors de l'exécution du conteneur.

Sécuriser Docker

1. Ne jamais exécuter des conteneurs en --privileged

# DANGEREUX — donne accès total à l'hôte
docker run --privileged myimage

# CORRECT — restreindre les capabilities
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE myimage

2. Utiliser un utilisateur non-root dans les conteneurs

# Dockerfile
FROM node:18-alpine
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser

3. Activer les security profiles (AppArmor/Seccomp)

# Utiliser le profil seccomp par défaut de Docker
docker run --security-opt seccomp=/etc/docker/seccomp.json myimage

4. Mettre à jour Docker et runc régulièrement

# Vérifier les versions
docker version
runc --version

# Mettre à jour
apt-get update && apt-get upgrade docker-ce containerd.io

5. Scan d'images avec Trivy

# Scanner une image pour les CVE
trivy image nginx:latest
trivy image --severity HIGH,CRITICAL myapp:1.0

Sécuriser Kubernetes

1. Activer RBAC et principe du moindre privilège

# Créer un role restreint
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]

2. Utiliser Pod Security Standards

# Enforcer un niveau de sécurité strict sur un namespace
apiVersion: v1
kind: Namespace
metadata:
  name: production
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/audit: restricted

3. Network Policies pour isoler les pods

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-ingress
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  # Aucune règle = tout le trafic entrant bloqué par défaut

4. Activer l'audit logging Kubernetes

# kube-apiserver flags
--audit-log-path=/var/log/kubernetes/audit.log
--audit-log-maxage=30
--audit-policy-file=/etc/kubernetes/audit-policy.yaml

5. Secrets chiffrés au repos

# Configuration encryption de l'API server
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
  - secrets
  providers:
  - aescbc:
      keys:
      - name: key1
        secret: <base64-encoded-secret>

6. Ne pas exposer le dashboard Kubernetes sur internet

Le Kubernetes Dashboard a été vecteur de nombreuses compromissions (Tesla, Shopify...) quand exposé sans authentification.

Outils de sécurité pour conteneurs

  • Trivy : scanner de CVE pour images et clusters
  • Falco : détection d'anomalies runtime dans les conteneurs
  • kube-bench : audit de conformité CIS Kubernetes
  • kube-hunter : test de pénétration automatisé Kubernetes
  • OPA/Gatekeeper : policy enforcement pour Kubernetes

Vérifiez les CVE Docker et Kubernetes sur cveo.tech — cherchez docker, kubernetes ou runc pour l'inventaire complet.

Surveillez les CVE avec l'IA

Recherche IA, scoring CVSS, surveillance de parc et alertes automatiques.