On-entry container attack - CVE-2016-9962
Mis à jour
Est-ce que cette infomation vous a été utile ?
Une vulnérabilité d'entrée de conteneur a été trouvée dans docker et on lui a donné comme nom
CVE-2016-9962.
Il s'agit d'une défaillance qui permet une attaque spécifique utilisant
ptrace
et qui vide de manière inadéquate les descripteurs de fichiers pour gagner accès au contenu qui se trouve en dehors du conteneur. Cette attaque est un risque uniquement quand on exécute des conteneurs privilégiés et est mitigée par SELinux.
Ce problème a été divulgué publiquement le 10 janvier 2017.
Informations générales
Cette vulnérabilité apparaît quand un processus qui devrait être normalement exécuté dans un espace-nom est lancée et déplacée dans un espace-nom différent. Les espace-noms agissent normalement en tant que mécanismes de sécurité car les processus qui se trouvent dans des espace-noms différents ne peuvent pas se voir ni se manipuler les uns les autres. Le problème est que lorsqu'un processus est déplacé dans un espace-nom, il s'expose à des actions malicieuses de la part des processus déjà présents dans cet espace-nom. Les vulnérabilités d'entrées attaquent des processus qui font se joindre les conteneurs via
nsenter
ou
docker exec
. Une attaque réussie peut résulter en processus malicieux gagnant accès au système ou à d'autres privilèges.
Ainsi, si un processus malicieux a réussi à s'accaparer un conteneur et a pu obtenir l'accès
root
dans ce conteneur, le processus malicieux peut supprimer tout processus qu'il "aperçoit". Heureusement, l'espace-nom de container empêche le processus malicieux de pouvoir détecter ou supprimer tout processus hôte ou autre dans les autres conteneurs. Cependant, si un administrateur tente d'investiguer ce problème en utilisant
nsenter
pour déplacer un shell dans un conteneur problématique, le processus malicieux pourra voir et manipuler ce shell également (et le supprimer).
Fonctionnalités Linux vulnérables
Les fonctionnalités Linux légitimes suivantes peuvent être utilisées malencontreusement dans les attaques d'entrées. Utiliser les mécanismes de sécurité tels que
SELinux
et
seccomp
pour empêcher leur exploitation.
-
ptrace
"Process trace" ouptrace
est une fonctionnalité de débogage puissante disponible dans Linux. Tout processus ayant les permissions qu'il faut peutptrace
un autre processus par l'appel de noyauptrace
.ptrace
donne un accès de très bas niveau au processus, y compris à sa mémoire et ressources (comme les descripteurs de fichiers) et la possibilité d'intercepter les appels de noyau de processus. -
docker exec
docker exec
est un service fourni par le démon Docker qui permet à des processus supplémentaires d'être lancés dans un conteneur existant. Ce service est souvent utilisé pour inspecter ou faire des changements manuels au conteneur. Ainsi, pour lancer un bash shell dans un conteneur problématique pour pouvoir déboguer son comportement, vous pouvez utiliser :
docker exec -it container-name /bin/bash
-
nsenter
nsenter
est une fonctionnalité Linux utilisée pour déplacer ou lancer des processus dans des espace-noms spécifiques. Comme les conteneurs sont construits sur des espace-noms Linux,nsenter
peut être utilisé dans une version plus générique dedocker exec
. -
fonctionnalités de noyau
Dans Linux, les privilèges spéciaux donnés à l'utilisateurroot
ont été divisé en deux possibilités, avec l'une d'entre elle dotée de privilèges administratifs supplémentaires. Par exemple,CAP_SYS_TIME
n'octroie que la possibilité de définir le verrou du système.CAP_SYS_ADMIN
, d'un autre côté, octroie un ensemble de privilèges utiles pour l'administration d'une machine. Chaque niveau de privilège peut être octroyé ou retiré suivant le processus. -
seccomp
Theseccomp
Fonctionnalité Linux qui permet un accès à des appels de noyaux sur une base individuelle.
Red Hat Product Security a évalué l'impact de sécurité à un niveau Moyen .
Produits concernés
Les versions de produits Red Hat suivants sont concernées :
- Red Hat Enterprise Linux 7
- Red Hat Openshift Container Platform
- RHEL Atomic Host
Impact
La vulnérabilité CVE-2016-9962 se produit car il y a un mécanisme de sécurité manquant dans
docker exec
.
Jusqu'à docker 1.12.6, les processus que
docker exec
exécutaient pouvaient être
ptrace
dans le conteneur et ils pouvaient conserver leurs descripteurs de fichiers brièvement, qui étaient liés au contenu en dehors du conteneur. Cela pouvait être exploité par un processus à l'intérieur du processus ayant les fonctionnalités de
ptrace
. Si un processus malicieux agissait assez rapidement, il pouvait
ptrace
les processus entrants et gagner accès au contenu en dehors du conteneur. Cela a été réglé dans docker 1.12.6 en empêchant le "ptrace-ing" de ces processus (via les attributs de processus de
DUMPABLE
) et en vidant les descripteurs de fichiers des processus entrants avant d'être déplacés.
Même sans le rétro-portage, la plupart des installations ne sont pas sans risque :
-
Le runtime de Docker supprime un grand nombre de fonctionnalités du noyau par défaut, y compris
CAP_SYS_PTRACE
. Cela signifie que seuls les conteneurs pour lesquels cette fonctionnalité a été explicitement ajoutée (ou qui exécutent avec le commutateur--privileged
) posent un risque. De plus, seuls les processus privilégiés se trouvant à l'intérieur de ces conteneurs posent un risque. Les processus d'utilisateurs non privilégiés à l'intérieur de ces conteneurs n'ont pas suffisamment de privilèges pour causer des soucis. Ainsi, si vous suivez les pratiques de conteneur recommandées de « ne pas exécuter les conteneurs privilégiés » et de « ne pas exécuter les processus root à l'intérieur des conteneurs », vous êtes en sécurité. - Sur les systèmes Red Hat ayant SELinux activé, les dangers de conteneurs même s'ils sont privilégiés, sont mitigés. SELinux empêche les processus de conteneur d'accéder au contenu d'un hôte même si ces processus de conteneurs réussissent à accéder aux descripteurs de fichiers existants.
-
Dans la plupart des installations,
nsenter
etdocker exec
sont des opérations purement manuelles. OpenShift utilisensenter
pour faciliter le port-forwarding, mais sans intervention manuelle, vanilla docker ne déplacera jamais un processus dans un conteneur ou entre des conteneurs.
Diagnostiquer votre vulnérabilité
Action
On conseille à tous les clients Red Hat utilisant actuellement les versions de Docker affectées de la mettre à jour dès que les correctifs sont disponibles. Les informations sur les paquets concernés, ainsi que les mesures de mitigation recommandées sont notées ci-dessous.
Mises à jour des produits concernés
Produit | Paquet | Alerte/Mise à jour |
---|---|---|
Red Hat Enterprise Linux 7 | docker-latest, docker, runc | en attente |
Red Hat Openshift Container Host | docker-latest, docker | correctif RHEL7 en attente |
RHEL Atomic Host | docker-latest, docker, runc | correctif RHEL7 en attente et respin |
Mitigation
ptrace
et d'autres appels de noyau à risque peuvent être interdits dans votre conteneur. Les profils seccomp personnalisés peuvent être créés pour interdire ce comportement (pris en charge par vanilla docker, OpenShift, et Kubernetes). Cela pourra tout à fait éviter des attaques basées sur CVE-2016-9962.
Comments