cyber:vulnerabilite:docker
Différences
Ci-dessous, les différences entre deux révisions de la page.
| cyber:vulnerabilite:docker [2025/06/27 15:07] – créée admin | cyber:vulnerabilite:docker [2025/07/04 15:22] (Version actuelle) – admin | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ====== Docker - Générique ====== | ||
| + | ===== Description ===== | ||
| + | **Docker est un logiciel de containerisation d' | ||
| + | |||
| + | Docker fonctionne en utilisant des **technologies de virtualisation du système d' | ||
| + | |||
| + | Cet environnement virtuel est créé en utilisant des fonctionnalités de virtualisation telles que les **namespaces** et les **cgroups** de Linux : | ||
| + | * Les namespaces permettent de créer des espaces de noms virtuels qui sont isolés les uns des autres, de sorte que chaque conteneur a l' | ||
| + | * Les cgroups, quant à eux, permettent de limiter l' | ||
| + | |||
| + | Ainsi, lorsque vous exécutez une image Docker dans un conteneur, Docker crée un environnement virtuel isolé en utilisant les namespaces et les cgroups de Linux, et y exécute l' | ||
| + | |||
| + | Le fonctionnement de Docker repose sur l' | ||
| + | |||
| + | L' | ||
| + | |||
| + | En résumé, **Docker utilise des couches pour enregistrer les modifications apportées à une image de base, ce qui permet de partager facilement ces images et de conserver l' | ||
| + | |||
| + | ===== Prérequis d' | ||
| + | |||
| + | Pour exploiter des vulnérabilités sur Docker, il est nécessaire d’avoir accès à un export d'une image Docker, ou bien un shell directement dans un container exécutant l' | ||
| + | |||
| + | ==== Connaissances nécessaires ==== | ||
| + | * Comprendre le fonctionnement de Docker (images, containers, layers, etc.) ; | ||
| + | * Connaitre les failles de sécurité courantes liées à Docker ; | ||
| + | * Connaissances de base du système d' | ||
| + | |||
| + | ==== Outils nécessaires ==== | ||
| + | * Outil d' | ||
| + | |||
| + | ===== Flux d' | ||
| + | ==== Explorer ==== | ||
| + | |||
| + | Récupérer différentes images Docker intéressantes à analyser depuis des registres en ligne comme **Docker Hub** ou **GitLab**. | ||
| + | |||
| + | ==== Expérimenter ==== | ||
| + | |||
| + | Il existe plusieurs façons d' | ||
| + | * **Utilisation de scanners de vulnérabilités** : il existe de nombreux outils qui peuvent scanner une image Docker pour détecter les vulnérabilités connues ; | ||
| + | * **Examen manuel des fichiers et des paquets inclus dans l' | ||
| + | * **Vérifier les privilèges accordés au conteneur** : si le conteneur a des privilèges élevés, il peut être possible de les exploiter pour échapper au container. Par exemple, si le conteneur a les privilèges de root, il peut être possible de lancer des commandes qui permettent de sortir du container ; | ||
| + | * **Vérifier les fichiers partagés avec le conteneur** : si des fichiers sont partagés entre le conteneur et l' | ||
| + | |||
| + | ==== Exploiter ==== | ||
| + | |||
| + | ===== Conséquences potentielles ===== | ||
| + | |||
| + | L' | ||
| + | * **L' | ||
| + | * **La compromission de l' | ||
| + | * **La propagation à d' | ||
| + | |||
| + | ===== Contre-mesures ===== | ||
| + | |||
| + | Les contre-mesures suivantes peuvent être mises en œuvre : | ||
| + | * **Inspecter l' | ||
| + | * **N' | ||
| + | * **Éviter d' | ||
| + | * **Supprimer toutes les capabilities " | ||
| + | * **Utiliser l' | ||
| + | |||
| + | ====== Comment cela fonctionne ? ====== | ||
| + | |||
| + | Les scénarios suivants peuvent être joués via l’exploitation de cette vulnérabilité : | ||
| + | * Accès aux données de l’hôte suite à l’exposition de la socket Docker dans le container. | ||
| + | * Accès aux données de l’hôte suite à l’ajout de l’option **—privileged** lors du lancement du conteneur. | ||
| + | |||
| + | ===== Exemple 1 ===== | ||
| + | |||
| + | Si un attaquant réussit à compromettre une application s’exécutant dans un container Docker et que ce dernier est en mesure d’exécuter des commandes dans le conteneur avec un utilisateur sans privilèges, | ||
| + | |||
| + | < | ||
| + | hellodocker@ubuntu: | ||
| + | / | ||
| + | |||
| + | hellodocker@ubuntu: | ||
| + | hellodocker docker | ||
| + | |||
| + | hellodocker@ubuntu: | ||
| + | |||
| + | root@ubuntu: | ||
| + | uid=0(root) gid=0(root) groups=0(root) | ||
| + | </ | ||
| + | |||
| + | Cette commande permet de monter le répertoire **/** de l’hôte dans le répertoire **/mnt** d’un nouveau conteneur, puis avec **chroot** de se placer dans le nouveau contexte **/mnt** et de lancer un shell avec la commande **sh**. | ||
| + | |||
| + | ===== Exemple 2 ===== | ||
| + | |||
| + | Les conteneurs Docker bien configurés n’autorisent normalement pas de commande comme **fdisk -l**. Cependant, si le conteneur est mal configuré et que l’argument **—privileged** est spécifié, il est possible d’obtenir les privilèges nécessaires pour obtenir un accès aux données présentes sur l’hôte : | ||
| + | |||
| + | < | ||
| + | root@99c2f98b5b62:/ | ||
| + | Disk /dev/loop0: 4 KiB, 4096 bytes, 8 sectors | ||
| + | Units: sectors of 1 * 512 = 512 bytes | ||
| + | Sector size (logical/ | ||
| + | I/O size (minimum/ | ||
| + | |||
| + | root@99c2f98b5b62:/ | ||
| + | / | ||
| + | / | ||
| + | |||
| + | root@99c2f98b5b62:/ | ||
| + | |||
| + | root@99c2f98b5b62:/ | ||
| + | |||
| + | root@99c2f98b5b62:/ | ||
| + | bin | ||
| + | boot etc lib | ||
| + | </ | ||
| + | |||
| + | Avec les commandes précédentes, | ||
| + | |||
| + | ====== References ====== | ||
| + | |||
| + | ATT&CK : | ||
| + | * [[https:// | ||
| + | URL : | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| ====== Retour fiches vulnérabilités ====== | ====== Retour fiches vulnérabilités ====== | ||
| * [[cyber: | * [[cyber: | ||
cyber/vulnerabilite/docker.1751029646.txt.gz · Dernière modification : 2025/06/27 15:07 de admin
