⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Non-événements de sécurité Docker


Cette page liste les vulnérabilités de sécurité que Docker a atténuées, de sorte que les processus exécutés dans des conteneurs Docker n'ont jamais été vulnérables au bogue—même avant qu'il ne soit corrigé. Cela suppose que les conteneurs sont exécutés sans ajouter de capacités supplémentaires ou ne sont pas exécutés comme --privileged.

La liste ci-dessous n'est même pas remotement complète. Il s'agit plutôt d'un échantillon des quelques bogues que nous avons réellement remarqués pour avoir attiré l'examen de sécurité et des vulnérabilités divulguées publiquement. Selon toute vraisemblance, les bogues qui n'ont pas été signalés dépassent largement en nombre ceux qui l'ont été. Heureusement, puisque l'approche de Docker sécurise par défaut grâce à apparmor, seccomp, et la suppression de capacités, il atténue probablement les bogues inconnus aussi bien que les bogues connus.

Bogues atténués :

  • CVE-2013-1956, 1957, 1958, 1959, 1979, CVE-2014-4014, 5206, 5207, 7970, 7975, CVE-2015-2925, 8543, CVE-2016-3134, 3135, etc. : L'introduction d'espaces de noms utilisateur non privilégiés a conduit à une énorme augmentation de la surface d'attaque disponible aux utilisateurs non privilégiés en donnant à ces utilisateurs un accès légitime à des appels système précédemment réservés au root comme mount(). Toutes ces CVE sont des exemples de vulnérabilités de sécurité dues à l'introduction d'espaces de noms utilisateur. Docker peut utiliser des espaces de noms utilisateur pour configurer des conteneurs, mais empêche ensuite le processus à l'intérieur du conteneur de créer ses propres espaces de noms imbriqués grâce au profil seccomp par défaut, rendant ces vulnérabilités non exploitables.
  • CVE-2014-0181, CVE-2015-3339 : Ce sont des bogues qui nécessitent la présence d'un binaire setuid. Docker désactive les binaires setuid à l'intérieur des conteneurs via le flag de processus NO_NEW_PRIVS et d'autres mécanismes.
  • CVE-2014-4699 : Un bogue dans ptrace() pourrait permettre l'escalade de privilèges. Docker désactive ptrace() à l'intérieur du conteneur en utilisant apparmor, seccomp et en supprimant CAP_PTRACE. Trois fois les couches de protection !
  • CVE-2014-9529 : Une série d'appels keyctl() conçus pourrait causer un DoS du noyau / corruption de mémoire. Docker désactive keyctl() à l'intérieur des conteneurs en utilisant seccomp.
  • CVE-2015-3214, 4036 : Ce sont des bogues dans les pilotes de virtualisation communs qui pourraient permettre à un utilisateur du système d'exploitation invité d' exécuter du code sur le système d'exploitation hôte. Les exploiter nécessite un accès aux dispositifs de virtualisation dans l'invité. Docker cache l'accès direct à ces dispositifs lorsqu'il est exécuté sans --privileged. Il est intéressant de noter que ce sont des cas où les conteneurs sont "plus sécurisés" qu'une VM, allant à l'encontre de la sagesse commune que les VM sont "plus sécurisées" que les conteneurs.
  • CVE-2016-0728 : L'utilisation après libération causée par des appels keyctl() conçus pourrait conduire à l'escalade de privilèges. Docker désactive keyctl() à l'intérieur des conteneurs en utilisant le profil seccomp par défaut.
  • CVE-2016-2383 : Un bogue dans eBPF -- le DSL spécial intra-noyau utilisé pour exprimer des choses comme les filtres seccomp -- permettait des lectures arbitraires de la mémoire du noyau. L'appel système bpf() est bloqué à l'intérieur des conteneurs Docker en utilisant (ironiquement) seccomp.
  • CVE-2016-3134, 4997, 4998 : Un bogue dans setsockopt avec IPT_SO_SET_REPLACE, ARPT_SO_SET_REPLACE, et ARPT_SO_SET_REPLACE causant une corruption de mémoire / escalade de privilèges locaux. Ces arguments sont bloqués par CAP_NET_ADMIN, que Docker n'autorise pas par défaut.

Bogues non atténués :

  • CVE-2015-3290, 5157 : Bogues dans la gestion des interruptions non masquables du noyau permettant l'escalade de privilèges. Peut être exploité dans les conteneurs Docker car l'appel système modify_ldt() n'est actuellement pas bloqué en utilisant seccomp.
  • CVE-2016-5195 : Une condition de course a été trouvée dans la façon dont le sous-système mémoire du noyau Linux gérait la rupture de copie sur écriture (COW) des mappages mémoire privés en lecture seule, ce qui permettait aux utilisateurs locaux non privilégiés d'obtenir un accès en écriture à la mémoire en lecture seule. Aussi connu sous le nom de "dirty COW." Atténuations partielles : sur certains systèmes d'exploitation, cette vulnérabilité est atténuée par la combinaison du filtrage seccomp de ptrace et le fait que /proc/self/mem est en lecture seule.