OpenSSH sur musl Linux accepte n'importe quel mot de passe depuis 2016
Original : sshole
Pourquoi c'est important
Des millions de conteneurs Docker et systèmes embarqués restent potentiellement exposés.
Une faille dans musl libc (Alpine, OpenWrt, Docker) permet de se connecter en SSH avec n'importe quel mot de passe de plus de 256 caractères sur des comptes normalement protégés, depuis 2016.
Tout commence en 1980 : Unix place un « * » dans /etc/passwd pour les comptes qui ne doivent jamais accepter de connexion. Pas un hash, donc aucun mot de passe ne peut correspondre. Simple et efficace.
En 2012, musl libc change crypt() pour qu'il retourne « * » au lieu de NULL en cas d'erreur — les programmes ne plantent plus. Trois semaines plus tard, musl plafonne les mots de passe SHA-512 à 256 octets pour éviter les attaques DoS. Au-delà de 256 octets, crypt() échoue… et retourne « * ».
En 2016, OpenSSH corrige CVE-2016-6210 (timing attack sur les noms d'utilisateur inexistants) en hashant quand même le mot de passe avec un sel emprunté — y compris pour les comptes marqués « * ». Résultat : un mot de passe de 257+ caractères retourne « * » via crypt(), qui correspond exactement au champ stocké. La porte s'ouvre.
Sont concernés : root, les comptes deploy sans mot de passe, les utilisateurs LDAP, et les images AWS/Azure Alpine par défaut. La faille est présente dans Alpine, OpenWrt, Buildroot, Yocto et une large partie des images Docker en circulation. Le correctif date de 2019 pour certains cas (CVE-2019-5021), mais la combinaison de ces trois bugs reste active dans de nombreux environnements.