Un chercheur a découvert qu’il suffisait de saisir un mot de passe de plus de 256 caractères pour ouvrir, via OpenSSH, des comptes pourtant verrouillés. Cette faille, présente sur des systèmes Linux qui utilisent la bibliothèque musl, vient d’être corrigée.

À notre connaissance, personne ne l’a remarquée pendant plus de dix ans.

Depuis 2016, sur certains serveurs Linux, un compte verrouillé pouvait être ouvert avec n’importe quel mot de passe, à condition qu’il compte entre 257 et 1 024 caractères.

Révélée début novembre par Ozgun Kultekin, chercheur chez Wakefield, la faille porte le doux nom de « *sshole ». Un jeu de mots qui mêle SSH à « hole » (le trou) pour former une grossièreté que nous ne traduirons pas. L’astérisque, qui masque la première lettre, se trouve en plus au cœur même de la faille.

Au-delà de l’humour de Kültekin, la faille fait beaucoup réagir sur Hacker News, parce qu’elle touche OpenSSH, l’outil que des administrateurs et des développeurs du monde entier utilisent pour se connecter à distance à leurs serveurs.

Pour la trouver, le chercheur explique avoir compilé OpenSSH de douze manières différentes, puis soumis chaque version à environ 17 600 tentatives de connexion inhabituelles, générées par des agents d’IA. Une seule configuration réagissait différemment des autres.

Taper 300 fois la lettre A suffisait pour entrer, parfois avec les pleins pouvoirs sur la machine. // Source : sshole.com
Taper 300 fois la lettre A suffisait pour entrer, parfois avec les pleins pouvoirs sur la machine. // Source : sshhole.com

Un astérisque qui servait à la fois de verrou et de message d’erreur

Reprenons le problème à son origine. Quand on se connecte avec un mot de passe, le serveur ne le compare pas tel quel. Il le fait passer dans une fonction mathématique qui le transforme en une longue suite de caractères, puis compare ce résultat à celui qu’il a enregistré.

Pour les comptes qui ne doivent jamais accepter de mot de passe, comme le compte administrateur root sur de nombreux systèmes, la convention Unix consiste depuis 1980 à enregistrer un simple astérisque (*), qu’aucun calcul ne peut produire.

Mais en 2012, une décision venue de musl, une bibliothèque logicielle de base utilisée notamment par la distribution Alpine Linux, a compliqué les choses. Depuis cette date, quand sa fonction de calcul échoue, elle renvoie elle aussi un astérisque, et elle échoue justement dès qu’un mot de passe dépasse 256 caractères.

En 2012, musl a modifié sa fonction de calcul, qui renvoie désormais un astérisque au lieu de « rien » quand elle échoue. // Source : sshhole.com
Dans crypt(), la fonction de calcul de musl, le changement de 2012 remplace le « NULL » renvoyé en cas d’échec par un astérisque. // Source : sshhole.com

Cela ne posait pas de difficulté, me direz-vous, tant qu’un compte verrouillé ne pouvait correspondre à aucun mot de passe, quel qu’il soit.

C’était sans compter sur l’année 2016, quand OpenSSH a corrigé un autre défaut. Quand on tentait de se connecter à un compte inexistant, le serveur répondait « non » immédiatement, alors qu’un vrai compte demandait quelques millisecondes de calcul, ce qui permettait à un attaquant de repérer les comptes existants en chronométrant les réponses.

Pour effacer cette différence, OpenSSH s’est alors mis à faire le calcul même quand il n’a rien à comparer, y compris pour les comptes verrouillés, en empruntant les paramètres d’un autre compte doté d’un vrai mot de passe. Personne n’avait alors mesuré ce que cela produirait au contact de musl.

Un mot de passe de 257 à 1 024 caractères (OpenSSH refuse les mots de passe plus longs depuis 2016) tapé sur un compte verrouillé passait dans ce calcul, qui échouait et renvoyait un astérisque. Le serveur comparait ensuite ce résultat à celui enregistré pour le compte, qui était lui aussi un astérisque. Les deux étant identiques, la connexion était acceptée.

Les systèmes Alpine en première ligne

Plusieurs conditions doivent être réunies pour que la faille représente un réel danger.

Le serveur doit reposer sur musl. C’est le cas d’Alpine, très utilisée dans les conteneurs Docker, mais aussi d’OpenWrt, de Buildroot ou de Yocto, que l’on retrouve dans de nombreux appareils embarqués. Il ne doit pas passer par PAM, le système de modules d’authentification de Linux, qu’Alpine n’active pas par défaut. La connexion par mot de passe doit aussi être autorisée, ce qu’OpenSSH fait d’origine. Il faut enfin un compte verrouillé par un astérisque et un autre doté d’un vrai mot de passe.

Depuis Alpine 3.16, sortie en 2022, c’est justement ainsi que root est verrouillé. Sur les images Alpine officielles d’AWS et d’Azure, le compte par défaut peut en plus devenir administrateur sans mot de passe.

Debian, Ubuntu, Fedora et les systèmes qui passent par PAM ne sont pas concernés, et le chercheur explique ne pas avoir connaissance d’une exploitation active.

Les administrateurs concernés doivent installer OpenSSH 10.6p2, publiée ce jeudi 5 novembre pour corriger le problème, ou, à défaut, désactiver la connexion par mot de passe.

une comparateur meilleur vpn numerama

Vous avez lu 0 articles sur Numerama ce mois-ci

Il y a une bonne raison de ne pas s'abonner à

Tout le monde n'a pas les moyens de payer pour l'information.
C'est pourquoi nous maintenons notre journalisme ouvert à tous.

Mais si vous le pouvez,
voici trois bonnes raisons de soutenir notre travail :

  • 1 Numerama+ contribue à offrir une expérience gratuite à tous les lecteurs de Numerama.
  • 2 Vous profiterez d'une lecture sans publicité, de nombreuses fonctions avancées de lecture et des contenus exclusifs.
  • 3 Aider Numerama dans sa mission : comprendre le présent pour anticiper l'avenir.

Si vous croyez en un web gratuit et à une information de qualité accessible au plus grand nombre, rejoignez Numerama+.

S'abonner à Numerama+
Toute l'actu tech en un clien d'oeil

Toute l'actu tech en un clin d'œil

Ajoutez Numerama à votre écran d'accueil et restez connectés au futur !


Anticipez le futur en vous inscrivant gratuitement à ToujoursPlus, la newsletter tech de référence.