systemd, un système init controversé, mais populaire
systemd est un système d’initialisation et un daemon qui a été spécifiquement conçu pour le noyau Linux comme une alternative au daemon init de System V (sysvinit). Il a pour but d’offrir un meilleur cadre pour la gestion des dépendances entre services, de permettre le chargement en parallèle des services au démarrage, et de réduire les appels aux scripts Shell.
Si aujourd’hui systemd est adopté par la plupart des distributions GNU/Linux, il a toutefois été vivement critiqué par certains membres de la communauté open source, qui estiment que le projet va à l’encontre de la philosophie Unix et que ses développeurs ont un comportement anti-Unix, du fait que systemd est incompatible avec tous les systèmes non Linux.
Rappelons d’ailleurs que systemd a été à l’origine de la division de la communauté Debian lorsque celle-ci a décidé de l’adopter comme système d’initialisation par défaut, malgré les menaces de certains contributeurs. Ces derniers ont donc quitté le projet Debian pour créer un fork baptisé Devuan (un Debian qui n’utilise pas systemd).
Des vulnérabilités dans systemd affectent la plupart des distributions Linux
Les principales distributions Linux sont vulnérables à trois bogues de systemd. Les bogues existent dans le service ‘journald’, chargé de collecter et de stocker les données de journalisation. Ils peuvent être exploités pour obtenir les privilèges root sur la machine cible ou pour divulguer des informations.
Découvertes par les chercheurs de la firme de sécurité Qualys, les failles sont deux vulnérabilités de corruption de la mémoire (débordement de tampon dans la pile – CVE-2018-16864 et allocation de mémoire sans limite – CVE-2018-16865) et une permettant la fuite d’information (lecture hors limites, CVE-2018-16866).
Les chercheurs ont développé un exploit pour CVE-2018-16865 et CVE-2018-16866 qui permet d’obtenir un shell racine local sur les machines x86 et x64. L’exploit a fonctionné plus rapidement sur la plateforme x86 et a atteint son objectif en dix minutes. Sur x64, l’exploit a pris 70 minutes. Qualys prévoit de publier prochainement le code d’exploit PoC (proof of concept) pour démontrer l’existence des failles, mais a néanmoins expliqué en détail comment il a pu tirer parti de ces failles. Les chercheurs ont également développé une preuve de concept pour CVE-2018-16864 qui permet de prendre le contrôle de eip, le pointeur d’instruction de i386.
La vulnérabilité de dépassement de tampon dans la pile (CVE-2018-16864) a été introduite en avril 2013 (systemd v203) et est devenue exploitable en février 2016 (systemd v230). Quant à la vulnérabilité d’allocation de mémoire sans limites (CVE-2018-16865), elle a été introduite en décembre 2011 (systemd v38) et est devenue exploitable en avril 2013 (systemd v201), tandis que la vulnérabilité de fuite de mémoire (CVE-2018-16866) a été introduite en juin 2015 (systemd v221) et corrigée par inadvertance en août 2018.
Du déjà-vu, mais pas encore de correctif pour les nouvelles vulnérabilités
Vu la popularité de systemd, la moindre vulnérabilité expose la plupart des distributions Linux. C’est ce qui s’était d’ailleurs produit en juin 2017 quand Chris Coulson, développeur de Canonical, a découvert une faille dans systemd. La vulnérabilité résidait dans le service systemd-resolved et pouvait être exploitée à l’aide d’une requête DNS malveillante pour permettre à un attaquant de bloquer un système ou exécuter un code à distance. Les versions affectées de systemd permettaient à un attaquant d’allouer une petite taille de tampon au traitement des paquets DNS. « Un serveur DNS malveillant peut l’exploiter en répondant avec une charge utile TCP spécialement conçue pour tromper Systemd-resolved en allouant un tampon trop petit et ensuite écrire des données arbitraires [en dehors de la zone de tampon allouée] », expliquait Chris Coulson.
Bien sûr, les fournisseurs de distributions Linux ont réagi rapidement après l’alerte en publiant des mises à jour pour protéger leurs utilisateurs, du moins pour ceux qui étaient affectés. Pour d’autres en effet, la configuration par défaut de leurs distributions ne permettait pas l’exploitation de la faille. Les utilisateurs étaient donc protégés à moins qu’ils aient manipulé les paramètres systemd. C’était le cas Debian 9 Stretch.
Pour les vulnérabilités qui viennent d’être révélées par Qualys, la plupart des distributions Linux sont encore vulnérables. « À notre connaissance, toutes les distributions Linux basées sur systemd sont vulnérables, mais SUSE Linux Enterprise 15, openSUSE Leap 15.0 et Fedora 28 et 29 ne sont pas exploitables, car leur espace utilisateur est compilé avec la protection -fstack-clash-protection de GCC », expliquent les chercheurs de Qualys.
Pour les distributions vulnérables et exploitables, aucun patch n’existe pour le moment. Sur Debian, seule la vulnérabilité de fuite d’informations (CVE-2018-16866) a été corrigée dans la version unstable de systemd 240-1. En ce qui concerne la gravité de ces problèmes, Red Hat classe comme étant « Important » l’impact de sécurité des vulnérabilités de corruption de mémoire, avec des indices de gravité de 7.4 (pour CVE-2018-16864) et 7.5 (pour CVE-2018-16865) sur 10 dans le système d’évaluation standardisé de la criticité des vulnérabilités CVSS v3. La troisième vulnérabilité est quant à elle classée comme ayant un impact « modéré » avec un indice de gravité de 4.3.