Runc regression - docker-1.13.1-108 - CVE-2016-8867, CVE-2020-14298, et CVE-2020-14300

Public Date: June 23, 2020, 7:00 pm
Updated -
Resolved Status
Important Impact

Récapitulatif

Red Hat a publié une version de docker pour Red Hat Enterprise Linux 7 Extras qui a apporté un certain nombre de régressions à des failles de sécurité précédemment corrigées, et une nouvelle vulnérabilité. Red Hat a publié cette version au début du mois de janvier 2020 et l'a ensuite corrigée avec une publication au début du mois de février 2020. Red Hat Product Security a catégorisé ces défauts comme ayant un niveau de sévérité Important. Les utilisateurs de cette version vulnérable de docker sont conviés à se mettre à jour. 

Les versions de produits Red Hat suivants sont affectées :

  • Red Hat Enterprise Linux 7 Extras
  • Red Hat Enterprise Linux Atomic Host (versions 7.7.3.1 & 7.7.4)

Les produits et services Red Hat suivants sont potentiellement concernés. Ces produits ont des dépendances d'installation sur docker, et pendant cette courte période, la version vulnérable peut avoir été installée depuis le canal Red Hat Enterprise 7 Extras :

  • Red Hat Ceph Storage 2
  • Red Hat Ceph Storage 3
  • Red Hat OpenStack Platform 10
  • Red Hat OpenStack Platform 13
  • Red Hat OpenShift Container Platform 3.11
  • Red Hat Quay
  • Microsoft Azure OpenShift v3

Pour déterminer si votre système est actuellement concerné par ces failles de sécurité, voir la section Diagnostic ci-dessous. De plus, un playbook Ansible pour la remédiation automatique est fourni ci-dessous.

* Red Hat OpenStack Platform 10 fournissait des capacités avec docker en guise d'aperçu technologique. 

Résumé technique

Une mise à jour des paquets docker du dépôt Red Hat Enterprise Linux 7 Extras publiée le 8 janvier 2020, via l'erratum RHBA-2020:0053, comprenait une version vulnérable de runc à laquelle il manquait plusieurs correctifs ajoutés via les errata précédents, créant une régression de plusieurs corrections de bogues et de sécurité.

Cette mise à jour a amené trois problèmes de sécurité. Deux de ces failles sont des régressions de failles de sécurité précédemment corrigées (CVE-2020-14298 et CVE-2020-14300). La troisième faille de sécurité est nouvelle et n'affectait pas les précédents paquets docker de Red Hat Enterprise Linux 7 Extras (CVE-2016-8867).

Ces trois questions ont été classées comme ayant un impact de sévérité Important.

Détails techniques et mitigation

CVE-2020-14298

Ce CVE a été affecté à la régression pour la correction du CVE-2019-5736, qui était auparavant traitée dans les paquets docker Red Hat Enterprise Linux 7 Extras via RHSA-2019:0304. Ce problème permet à un conteneur malveillant ou compromis de compromettre à son tour l'hôte du conteneur et d'autres conteneurs fonctionnant sur le même hôte.

L'impact de ce problème est atténué par l'utilisation de SELinux en mode d'exécution. La stratégie SELinux empêche un processus du conteneur d'écraser des fichiers sur le système hôte qui n'appartiennent pas au conteneur, ainsi que des fichiers appartenant à d'autres conteneurs. Une nouvelle escalade des privilèges sur l'hôte nécessiterait l'exploitation d'une autre faille du noyau qui permet de contourner ou de désactiver SELinux. De plus, le mécanisme d’exploitation connu pour cette question nécessite d'écraser le binaire docker-runc. Le placement du binaire sur un système de fichiers en lecture seule empêche l'écrasement et arrête l'exploitation. Red Hat Enterprise Linux Atomic Host 7 utilise un système de fichiers en lecture seule pour les binaires système et permet donc d'atténuer ce problème.

CVE-2020-14300

Ce CVE a été affecté à la régression pour la correction du CVE-2016-9962, qui était auparavant traitée dans les paquets docker Red Hat Enterprise Linux 7 Extras via RHSA-2017:0116. Ce problème permet à un conteneur malveillant ou compromis de compromettre à son tour l'hôte du conteneur et d'autres conteneurs fonctionnant sur le même hôte.

L'impact de ce problème est atténué par l'utilisation de SELinux en mode d'exécution. La stratégie SELinux empêche un processus du conteneur d'écraser des fichiers sur le système hôte qui n'appartiennent pas au conteneur, ainsi que des fichiers appartenant à d'autres conteneurs. Une nouvelle escalade des privilèges sur l'hôte nécessiterait l'exploitation d'une autre faille du noyau qui permet de contourner ou de désactiver SELinux.

CVE-2016-8867
Un mauvais paramétrage des capacités ambiantes a fait que des processus non-root et non privilégiés à l'intérieur d'un conteneur se sont exécutés avec des capacités inattendues, leur permettant de faire passer leurs privilèges à l'intérieur de ce conteneur au niveau root.  Lorsque ce problème a été signalé pour la première fois en 2016, il n'a affecté aucune version des paquets docker livrés avec Red Hat Enterprise Linux 7 Extras à cette époque. 

En raison de la régression, les paquets docker-1.13.1-108.git4ef4b30.el7 sont devenus vulnérables à ces escalades de privilèges à l'intérieur du conteneur.  Cette version spécifique est la seule à contenir la régression, et la seule version affectée par ce problème.

Ce problème peut être atténué en limitant l'ensemble des capacités disponibles pour les processus à l'intérieur des conteneurs en utilisant les options --cap-add et --cap-drop. Cependant, comme ces restrictions s'appliquent à la fois aux processus non-root et root, l'ensemble des capacités qui peuvent être abandonnées sans casser la fonctionnalité prévue doit être déterminé pour chaque conteneur et ne peut pas empêcher l'escalade des privilèges. C'est pourquoi Red Hat recommande aux utilisateurs d'installer des paquets de docker fixes au lieu d'utiliser cette mesure de mitigation.

Contexte

Le 8 janvier 2020, Red Hat a publié RHBA-2020:0053 contenant le docker-1.13.1-108.git4ef4b30.el7. Peu après, il a été découvert que docker-1.13.1-108.git4ef4b30.el7 contenait diverses régressions, et au cours des recherches, il a été constaté que la partie runc était rattachée à la branche master à la place de la branche Red Hat spécifique. Ce problème a entraîné l'indisponibilité de correctifs majeurs (corrections de bogues, améliorations et corrections de sécurité) dans le paquet expédié.

Le 4 février 2020, Red Hat a publié RHBA-2020:0427 contenant docker-1.13.1-109.gitcccb291.el7_7, qui incluait tous les patchs manquants précédemment car attaché à la bonne branche runc. Depuis cette version publiée, aucune autre régression n'a été introduite ou réintroduite.

Le 23 juin 2020, Red Hat a publié le RHSA-2020:2653 contenant le docker-1.13.1-162.git64e9980.el7_8. Cette mise à jour n'apporte aucune nouvelle correction de sécurité par rapport à la dernière version docker-1.13.1-161.git64e9980.el7_8 (de RHSA-2020:1234) déjà publiée. Il ne contient pas non plus de nouvelles corrections concernant les CVE-2020-14298, CVE-2020-14300 ou CVE-2016-8867 par rapport à docker-1.13.1-109.gitcccb291.el7_7, qui a corrigé les trois problèmes décrits dans cet article. Cet erratum est publié pour assurer une bonne visibilité de la régression introduite dans les paquets docker-1.13.1-108.git4ef4b30.el7 dans l’intérêt des clients, car ces paquets n'étaient à l'origine abordés que par un avis de correction de bogue (RHBA) plutôt que par un avis de sécurité (RHSA). Cet erratum assure également une bonne visibilité du problème aux outils de scanning de sécurité.

Impact sur les produits

Les versions 7.7.3.1 et 7.7.4 de Red Hat Enterprise Linux Atomic Host et les Extras de Red Hat Enterprise Linux 7 sont les seuls produits Red Hat qui ont livré une version vulnérable du Docker. Cependant, plusieurs autres produits et services reposent sur des paquets docker de Red Hat Enterprise Linux 7 Extras et sont potentiellement concernés. Les produits qui dépendent de Red Hat Enterprise Linux 7 Extras doivent avoir le paquet docker mis à jour pour remédier à ces vulnérabilités. Pour déterminer si votre système est actuellement concerné par ces failles de sécurité, voir la section Diagnostic ci-dessous.

OpenShift Container Platform OCP 3.11

Les CVE-2020-14298 et CVE-2020-14300 bénéficient d’un effet de mitigation sur l'OCP 3.11 par défaut car SELinux est réglé sur « enabled » et le mode « enforcing » fait partie des étapes d'installation.
Les installations de l'OCP 3.11 avec une version vulnérable de docker sont affectées par le CVE-2016-8867, mais les ramifications de la vulnérabilité sont réduites du fait que l'escalade des privilèges est limitée à l'intérieur de chaque conteneur.

Les utilisateurs qui ont installé ou mis à jour un cluster 3.11 entre le 8 janvier et le 4 février 2020 sont davantage susceptibles d'avoir une version vulnérable du docker installée et sont priés de vérifier dès que possible.

Red Hat Ceph Storage versions 2 et 3

La version 3 de Red Hat Ceph Storage utilise le paquet docker du dépôt Red Hat Enterprise Linux 7 Extras. Le paquet docker est utilisé dans Ceph Storage pour créer, déployer et exécuter des applications en utilisant des conteneurs tels que Grafana et Prometheus lors de l'installation du tableau de bord Red Hat Ceph Storage Dashboard.
 
La version 2 de Red Hat Ceph Storage utilise également docker en provenance du dépôt Red Hat Enterprise Linux 7 Extras tout en déployant Red Hat Ceph Storage 2 comme image de conteneur.

Le mode « enforcing » de SELinux est activé par défaut dans Red Hat Ceph Storage 2 et 3, ce qui représente une mesure de mitigation pour les CVE-2020-14298 et CVE-2020-14300. Cependant, les conteneurs des deux versions de Ceph Storage qui ont été déployés avec la version vulnérable de docker sont affectés par CVE-2016-8867.

Red Hay Quay

Le processus d'installation de Red Hat Quay comprend l'activation du dépôt Red Hat Enterprise Linux 7 Extras et l'installation de docker comme runtime de conteneur pour l'exécution des images de conteneur du produit.  Par défaut, SELinux sera activé, ce qui atténuera l'impact des CVE-2020-14298 et CVE-2020-14300. La troisième vulnérabilité, CVE-2016-8867, sera présente dans les conteneurs en cours d'exécution sur ce système, y compris les conteneurs Red Hat Quay.

Red Hat OpenStack Platform versions 10 et 13

Red Hat OpenStack version 10 et Red Hat OpenStack version 13 activent tous deux le dépôt Red Hat Enterprise Linux 7 Extras et installent tous deux docker à partir de cet emplacement. L'utilisation de docker et des conteneurs dans la version 10 de Red Hat OpenStack est un aperçu technologique. L'utilisation de docker et des conteneurs dans la version 13 de Red Hat OpenStack est plus étendue, tous les services fonctionnant comme des conteneurs (qui dépendent de docker).

Si une faille d’échappement d'un conteneur devait être exploitée, l'impact serait important car ces services gèrent l'ensemble de l'infrastructure Red Hat OpenStack. Heureusement, la configuration par défaut de Red Hat OpenStack fonctionne avec SELinux en mode  « enforcing », ce qui réduit les possibilités d’échappement de conteneurs. De plus, les images utilisées pour les services overcloud sont fiables, ce qui réduit le risque de détournement malveillant.

Impact des services

Red Hat a confirmé que les services suivants n'utilisent pas la version vulnérable de docker, et ne sont donc pas affectés par ces vulnérabilités :

    •    Red Hat OpenShift Dedicated v3
    •    Red Hat OpenShift Dedicated v4
    •    Red Hat OpenShift Online
    •    Red Hat Managed Integration
    •    Quay.IO
    •    cloud.redhat.com
    •    Microsoft Azure OpenShift v4

Microsoft Azure OpenShift v3

Il est confirmé que les clients utilisant les clusters Microsoft Azure OpenShift v3 avec les versions 16 et 17 ne sont pas affectés par les mises à jour de routine. Deux clusters plus anciens fonctionnant avec la version 15 sont partiellement affectés ; selon les détails de la plate-forme de conteneurs OpenShift 3.11 ci-dessus :

    - CVE-2020-14298 et CVE-2020-14300 bénéficient des mesures de mitigation de SELinux
    - Le CVE-2016-8867 est présent, mais l'impact de la vulnérabilité est réduit à l'escalade des privilèges à l'intérieur de chaque conteneur.

Red Hat travaille avec Microsoft pour s'assurer que tous les clients concernés soient contactés.

Mises à jour des produits concernés

Nous conseillons à tous les clients de Red Hat exécutant des versions de produits Red Hat affectés de procéder aux mises à jour dès que les correctifs sont disponibles. Les clients sont invités à appliquer immédiatement les mises à jour disponibles et à activer les mesures de mitigation de l’impact qu'ils jugent appropriées. Les clients qui utilisent les produits Red Hat avec nos partenaires fournisseurs de cloud certifiés doivent contacter le fournisseur de cloud pour plus de détails.

ProduitPackageAlerte / Mise à jour
Red Hat Enterprise Linux 7 ExtrasdockerRHSA-2020:2653

Diagnostic

Utiliser le script de détection ci-dessous pour déterminer si votre système est actuellement concerné par cette faille de sécurité. Pour vérifier la légitimité du script, vous pouvez télécharger la signature GPG détachée également.

Déterminer si votre système est vulnérable

Version 1.0

Le script de détection des vulnérabilités est destiné aux versions de Red Hat Enterprise Linux actuellement prises en charge. Le script de détection peut également être utilisé sur les produits en couches au dessus de Red Hat Enterprise Linux où vous avez accès pour exécuter le script.

Vous pouvez également utiliser une simple commande shell pour vérifier la version installée du paquet docker :

$ rpm -q docker

Si la version signalée est docker-1.13.1-108.git4ef4b30.el7, vous êtes potentiellement vulnérable à ce problème.

Playbook Ansible

De plus, un playbook Ansible, "CVE-2020-14297-14300-update_fixit--2020-06-23-1248_0.yml", est fourni ci-dessous. Ce playbook mettra à jour les paquets de docker concernés. Pour utiliser le playbook, indiquez les hôtes que vous souhaitez mettre à jour dans var. extra HOSTS :

ansible-playbook -e HOSTS=container_host,dev01 CVE-2020-14297-14300-update_fixit--2020-06-23-1248_0.yml

Pour vérifier la légitimité du playbook, vous pouvez télécharger la signature GPG détachée.

Automatiser la mesure de mitigation

Version 1.0

FAQ

Q: Dois-je réamorcer (reboot) ou redémarrer quelque chose après avoir installé des paquets docker mis à jour ?
R: Le démon docker sera redémarré pendant la mise à jour « yum update » arrêtant tous les conteneurs en cours d'exécution. Tout conteneur fonctionnant avant l'exécution de  « yum update » devra être redémarré. Pour mettre à jour docker dans OpenShift Container Platform 3.11, suivez le guide ci-dessous :

https://docs.openshift.com/container-platform/3.11/upgrading/os_upgrades.html

Q: Si j'utilise déjà les paquets docker version docker-1.13.1-109.gitcccb291.el7_7 ou docker-1.13.1-161.git64e9980.el7_8, dois-je installer immédiatement docker-1.13.1-162.git64e9980.el7_8 pour résoudre ces problèmes ?
R: Aucune action immédiate n'est requise. Les trois problèmes CVE-2016-8867, CVE-2020-14298 et CVE-2020-14300 ont déjà été traités dans docker-1.13.1-109.gitcccb291.el7_7. La mise à jour incluse dans RHSA-2020:2653 est publiée pour assurer une bonne visibilité de ces questions auprès des utilisateurs et des outils. Pour plus de détails, veuillez vous reporter aux informations générales ci-dessus.

Q: Est-ce que Red Hat OpenShift Container Platform OCP 4.x est affecté ?
R: Red Hat OpenShift Container Platform 4.x n'est pas affecté par cette régression car il utilise le moteur de conteneur CRI-O au lieu du docker.  Bien qu'il soit possible d'exécuter Red Hat Enterprise Linux 7 sur les nodes worker, ceux-ci seront installés avec CRI-O qui n'est pas affecté par cette vulnérabilité.

Q: Est-ce que Red Hat OpenShift Container Storage (OCS) est affecté ?
R: OCS 4.x utilise OCP 4.x comme base et OCS 3.x utilise OCP 3.x comme base. L'OCP couvre donc le risque d’affectation d'OCS.

Q: Est-ce que Red Hat Enterprise Linux 8 est affecté ?
R: Red Hat Enterprise Linux 8 n'est pas concerné par cette régression. Cette version vulnérable du paquet docker n’y a jamais été incluse.

Q: Est-ce que les packages docker en provenance d’autres vendeurs sont affectés par CVE-2020-14298 et CVE-2020-14300 ?
R: Ces CVE ont été affectés à des régressions de sécurité spécifiques aux paquets dockers, ainsi fournis par Red Hat via Red Hat Enterprise Linux 7 Extras. Par conséquent, ces CVE ne sont pas applicables aux compilations (builds) de docker fournies par d'autres vendeurs, et notamment les compilations en amont fournies par Docker Inc. ou incluses avec d'autres distributions Linux. Ces CVE peuvent être applicables aux projets basés sur le code source de Red Hat Enterprise Linux, comme CentOS.

Références

Pour des informations plus détaillées sur les deux vulnérabilités de sécurité précédentes qui ont été régressées par ce problème, voir

runc - Malicious container escape - CVE-2019-5736
On-entry container attack - CVE-2016-9962