Docker release_agent cgroups escape
Pour plus de détails, consultez le billet de blog original. Ceci n'est qu'un résumé :
PoC original :
Le proof of concept (PoC) démontre une méthode pour exploiter les cgroups en créant un fichier release_agent
et en déclenchant son invocation pour exécuter des commandes arbitraires sur l'hôte du conteneur. Voici une ventilation des étapes impliquées :
Préparer l'Environnement :
Un répertoire
/tmp/cgrp
est créé pour servir de point de montage pour le cgroup.Le contrôleur de cgroup RDMA est monté sur ce répertoire. En cas d'absence du contrôleur RDMA, il est suggéré d'utiliser le contrôleur de cgroup
memory
comme alternative.
Configurer le sous-cgroupe enfant :
Un sous-cgroupe enfant nommé "x" est créé dans le répertoire de cgroup monté.
Les notifications sont activées pour le sous-cgroupe "x" en écrivant 1 dans son fichier notify_on_release.
Configurer l'Agent de Libération :
Le chemin du conteneur sur l'hôte est obtenu à partir du fichier /etc/mtab.
Le fichier release_agent du cgroup est ensuite configuré pour exécuter un script nommé /cmd situé dans le chemin de l'hôte acquis.
Créer et Configurer le Script /cmd :
Le script /cmd est créé à l'intérieur du conteneur et est configuré pour exécuter ps aux, redirigeant la sortie vers un fichier nommé /output dans le conteneur. Le chemin complet de /output sur l'hôte est spécifié.
Déclencher l'attaque :
Un processus est lancé dans le cgroup enfant "x" et est immédiatement arrêté.
Cela déclenche le
release_agent
(le script /cmd), qui exécute ps aux sur l'hôte et écrit la sortie dans /output à l'intérieur du conteneur.
Last updated