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ésactiveptrace()
à l'intérieur du conteneur en utilisant apparmor, seccomp et en supprimantCAP_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ésactivekeyctl()
à 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ésactivekeyctl()
à 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
, etARPT_SO_SET_REPLACE
causant une corruption de mémoire / escalade de privilèges locaux. Ces arguments sont bloqués parCAP_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.