On-entry container attack - CVE-2016-9962

Public Date: January 12, 2017, 13:07
Mis à jour October 24, 2024, 11:56 - Chinese, Simplified Anglais Japanese Korean

Est-ce que cette infomation vous a été utile ?

Resolved État
Important Impact

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" ou ptrace est une fonctionnalité de débogage puissante disponible dans Linux. Tout processus ayant les permissions qu'il faut peut ptrace un autre processus par l'appel de noyau ptrace . 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 de docker exec .
  • fonctionnalités de noyau
    Dans Linux, les privilèges spéciaux donnés à l'utilisateur root 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
    The seccomp 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 et docker exec sont des opérations purement manuelles. OpenShift utilise nsenter 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é

Pour vérifier si votre version Docker a déjà été corrigée, télécharger et utiliser ce script .

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