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.txt · Dernière modification : 2025/07/04 15:22 de admin