Une vulnérabilité sous Docker permettrait de s’affranchir du conteneur et obtenir les droits d'administrateur

Date de publication :

Une vulnérabilité considérée comme importante a été publiée le lundi 11 février par Aleksa Sarai, ingénieure chez SUSE Linux Gmbh, attribuant cette découverte à deux chercheurs : Adam Iwaniul et Borys Poplawski. Celle-ci concerne la composante runC de Docker. Un attaquant pourrait l’exploiter afin d’obtenir les droits d’administrateur sur la machine hôte. Cette attaque serait complexe à mettre en œuvre mais nécessite un niveau d’authentification faible. L’impact estimé sur la confidentialité, l’intégrité et la disponibilité est élevé. Au vu de la popularité de Docker, cette vulnérabilité est susceptible d’impacter les infrastructures cloud telles qu’Amazon, Google Cloud, etc.

Docker est une plateforme logicielle de code ouvert permettant de créer, de déployer et de gérer des conteneurs d’applications virtualisées sur différents systèmes d’exploitation. Les services ou fonctions de l’application ainsi que ses bibliothèques, fichiers de configuration, dépendances et autres composants sont regroupés au sein d’un conteneur. Ces conteneurs sont exécutés en partageant les services du système d’exploitation.

runC est la composante qui permet d’instancier le conteneur Linux. Celle-ci va influencer directement le fonctionnement de libcontainer, la partie du code permettant de faciliter les interactions avec le noyau Linux, sans passer par le moteur de Docker.

SELinux (Security Enhanced Linux) est un module Linux (LSM) qui permet de définir des politiques de contrôle d’accès liées aux éléments du système Linux.

Détails techniques

CVE-2019-5736 [CVSS v3 8.6] La vulnérabilité permettrait d'obtenir des accès en tant qu'administrateur sur la machine hôte de Docker. En effet, lorsqu’un processus est lancé avec les droits administrateurs (UID 0) dans le conteneur, celui-ci pourra exploiter un bug dans runC, ce qui lui permettra ainsi d'obtenir des accès en tant qu'administrateur sur la machine hôte. De ce fait, l’attaquant aura accès à toutes les ressources de la machine hôte, incluant les autres conteneurs instanciés. L'erreur informatique en question permettrait de remplacer le binaire runC du système hôte permettant ainsi l’accès administrateur. Il semblerait que les OS RedHat Enterprise Linux et CentOS soient protégés par une politique de sécurité par défaut de SELinux. La source la plus probable d'attaque serait vraisemblablement les conteneurs malveillants non vérifiés, présents dans certains dépôts publics.

Des correctifs ont été publiés par Docker sur GitHub, par l'équipe en charge de maintenir runC. Les utilisateurs de runC sont donc invités à mettre à jour leurs versions de Docker/Kubernetes pour corriger cette vulnérabilité. Concernant les distributions ayant activé SELinux, celles-ci sont normalement déjà protégées.

Informations

La faille est activement exploitée :

Un correctif existe :

Une mesure de contournement existe :

Risques

Risques

  • Exécution de code à distance
  • Elévation de privilèges

Criticité

  • Score CVSS : En cours d'évaluation.

Existence d’un code d’exploitation de la vulnérabilité

  • Aucun code d’exploitation ne sera publié avant le 18 février 2019 (J+7 de la publication de la vulnérabilité) conformément aux règles de publication de vulnérabilité d’Openwall.

Composants & versions vulnérables

  • Toutes les versions de Docker Engine Community antérieures à 18.09.2 et 18.06.2
  • Toutes les versions de Docker Engine Enterprise antérieures à 18.09.2, 18.03.1-ee-6 et 17.96.2-ee-19

CVE

  • CVE-2019-5736

Solutions ou recommandations

Mise en place de correctif de sécurité

  • Concernant Google Container Engine (GKE), Google a publié un bulletin de sécurité détaillant les versions impactées. En résumé, dans le cas où l’utilisateur utilise l’image par défaut GKE, celle-ci est protégée. En revanche, les images Ubuntu et CoreOS sont vulnérables et nécessitent des contre-mesures ou d’être corrigées.

    Concernant Amazon Elastic Container Service for Kubernetes (EKS),  tous les utilisateurs doivent apporter des contre-mesures ou mettre à jour leurs images pour se protéger. Un bulletin de sécurité a été publié à ce sujet.

    Aucune confirmation n’a été apportée mais il semblerait que les versions Windows et Mac soient également touchées. Docker a apporté un correctif dans sa version 18.09.2 et il est recommandé de les installer.

    Dans le cas où il serait impossible de mettre à jour Docker, l’équipe Rancher a publié un correctif pour les plus anciennes versions sur leur GitHub.

Solution de contournement

  • Il est préconisé de mettre en œuvre la politique de sécurité SELinux afin que les règles de sécurité liées à une alerte entraîne le refus d'accès à certaines applications non autorisées. L'activation de SELinux permet d'appliquer cette politique tandis que l'autre mode permissif est utilisé pour lever des alertes sans pour autant bloquer automatiquement les accès ;
  • Il est également recommandé  d'empêcher l’utilisation de l’UID 0 dans les conteneurs.