1 - Dirty Cow
Depuis mercredi dernier, la vulnérabilité CVE-2016-5195 est publique. L'exploitation de celle-ci conduit à une élévation de privilège et donc de disposer de droits privilégiés (root) sur un système. Afin d'être exploitée, un attaquant doit disposer d'un accès à un compte utilisateur (non-privilégié) sur un système Linux. Cet accès peut soit être légitime, soit être obtenu grâce à une autre vulnérabilité exploitée préalablement. L'aspect distant ou local de l'accès au compte utilisateur n'a pas d'incidence sur son exploitation.
Du fait de l'utilisation massive de Linux, de très nombreux systèmes sont potentiellement vulnérables, tels que la majorité des serveurs web sur internet, les ordiphones fonctionnant sur le système d'exploitation Android ou encore de nombreux équipements réseau.
À titre d'exemple, les systèmes de gestion de contenu (Content Management Systems) sont régulièrement vulnérables à des failles permettant d'exécuter du code à distance. Cela permet d'obtenir l'accès à un compte non privilégié, utilisable pour exploiter la vulnérabilité CVE-2016-5195.
Le découvreur a également publié plusieurs preuves de concept exploitant la vulnérabilité. La facilité et la fiabilité d'exécution de ces codes imposent une attention particulière sur la CVE-2016-5195.
Détails de la vulnérabilité
Cette vulnérabilité est présente dans le noyau Linux depuis la version 2.6.22 dont la sortie date de 2007. Linus Torvalds indique qu'une correction de ce bogue a été tentée il y a 11 ans, mais avait été abandonné pour des raisons de compatibilité avec du matériel Intel. À l'époque, cette attaque était considérée plus théorique que pratique.[1]
Le chercheur qui l'a rendue publique, Phil Oester, a nommé cette vulnérabilité Dirty Cow[2]. Dirty Cow est déclenchée par une situation de compétition (ou 'race condition') dans le mécanisme de copie à l'occasion d'une écriture en mémoire ('Copy on Write' ou 'cow'). Dans un souci d'optimisation des ressources, une projection en mémoire (memory mapping) peut être créée afin qu'elles soient accessibles à plusieurs processus. Lorsque l'un de ces processus souhaite écrire pour modifier les données, cette page est copiée et la nouvelle page est considérée comme sale (ou 'dirty'). Cela indique qu'elle a changé et que le système devra écrire cette page sur le disque. Ce mécanisme permet de limiter les entrées/sorties sur le disque, car ces opérations sont les plus coûteuses. Il existe plusieurs preuves de concept qui fonctionnent globalement de la manière suivante :- un exécutable appartenant au super-utilisateur est ouvert alors que l'utilisateur ne dispose que des droits en lecture ;
- une projection en mémoire de cet exécutable est réalisée grâce à la fonction mmap()[3] ;
- deux autres fils d'exécution doivent ensuite être lancés. Le premier appelle madvise()[4] en boucle avec l'argument MADV_DONTNEED ce qui permet d'indiquer au système que la page ne sera plus utilisée. Dans le deuxième fil, un fichier en lecture/écriture pouvant examiner son état interne (par exemple /proc/self/mem ou ptrace) est ouvert.
Recommandations
Certaines distributions comme Ubuntu[6], Red Hat[7] ou encore Suse[8] proposent des correctifs, mais ce n'est pas le cas de toutes. De nombreux autres éditeurs dont les solutions reposent également sur un noyau Linux proposeront des correctifs. Le CERT-FR recommande de veiller à l'application de ces correctifs de sécurité dès qu'ils sont disponibles. Enfin, de nombreux autres systèmes vulnérables ne disposeront pas de correctifs, il convient d'identifier ces systèmes, les risques associés et de mettre en oeuvre des contre-mesures.
Documentation
- 1
- Message Linus Torvalds
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=19be0eaffa3ac7d8eb6784ad9bdbc7d67ed8e619
- 2
- Dirty Cow
http://dirtycow.ninja/
- 3
- Mmap()
http://man7.org/linux/man-pages/man2/mmap.2.html
- 4
- Madvise()
http://man7.org/linux/man-pages/man2/madvise.2.html
- 5
- article ars technica
http://arstechnica.com/security/2016/10/most-serious-linux-privilege-escalation-bug-ever-is-under-active-exploit/
- 6
- Avis CERTFR-2016-AVI-353
http://www.cert.ssi.gouv.fr/site/CERTFR-2016-AVI-353
- 7
- Avis CERTFR-2016-AVI-356
http://www.cert.ssi.gouv.fr/site/CERTFR-2016-AVI-356
- 8
- Avis CERTFR-2016-AVI-357
http://www.cert.ssi.gouv.fr/site/CERTFR-2016-AVI-357
- $$
- Référence CVE CVE-2016-5195
https://www.cve.org/CVERecord?id=CVE-2016-5195