regreSSHion : Failles critiques dans OpenSSH (CVE-2024-6387)

La vulnérabilité CVE-2024-6387, surnommée regreSSHion, a récemment été découverte par l’équipe de recherche de menaces de Qualys. Cette faille fait resurgir une vulnérabilité corrigée en 2006.

Qu’est-ce que la CVE-2024-6387 ?

Cette nouvelle vulnérabilité touche le serveur OpenSSH (sshd). Elle se manifeste lorsque le client échoue à s’authentifier dans le délai fixé par LoginGraceTime. Par défaut, ce délai est de 120 secondes dans les versions récentes et de 600 secondes dans les versions plus anciennes. Si ce délai est dépassé, le gestionnaire de signaux SIGALARM de ssh est déclenché. Le problème vient du fait que ce gestionnaire appelle des fonctions non sécurisées comme syslog().


Une vulnérabilité qui n’est pas entièrement nouvelle

RegreSSHion réactive une vieille faille de sécurité datant de 2006 avec OpenSSH 4.4. Lors d’un commit, une directive cruciale (#ifdef DO_LOG_SAFE_IN_SIGHAND) a été supprimée par erreur de la fonction sigdie()désormais renommée sshsigdie().

Cette suppression rend la fonction vulnérable à nouveau. Elle utilise des fonctions comme syslog(), qui dépendent de malloc() et free(), non sécurisées dans le contexte des signaux asynchrones. Cela peut entraîner une corruption de la mémoire et potentiellement une exécution de code arbitraire.

Voici un résumé de la situation :

  • OpenSSH < 4.4p1 : Vulnérable à moins d’être patché pour la CVE-2006-5051 ou CVE-2008-4109.
  • 4.4p1 ≤ OpenSSH < 8.5p1 : Non vulnérable grâce à la directive #ifdef DO_LOG_SAFE_IN_SIGHAND.
  • 8.5p1 ≤ OpenSSH < 9.8p1 : De nouveau vulnérable à cause de la suppression de cette directive.

Méthodes d’exploitation

Les attaquants peuvent exploiter cette vulnérabilité en manipulant les allocations de mémoire pour corrompre les structures du tas (heap). En particulier, la fonction malloc() peut être interrompue par le signal SIGALRM au moment précis où elle divise un grand bloc de mémoire libre en deux plus petits blocs. Si cette interruption se produit après que le premier bloc est retourné mais avant que la taille du second bloc ne soit initialisée, les attaquants peuvent manipuler la taille de ce second bloc pour qu’il chevauche d’autres blocs de mémoire, ce qui conduit à une corruption de la mémoire.

Les attaquants peuvent alors viser à corrompre une structure FILE allouée par fopen() dans le gestionnaire SIGALRM. En écrivant un seul octet (_vtable_offset) de cette structure, ils peuvent contrôler un pointeur de fonction et exécuter du code arbitraire pendant l’appel à __fread_unlocked().


Solutions pour se protéger

Mise à jour d’OpenSSH

La meilleure solution est de mettre à jour OpenSSH à la version 9.8p1, qui corrige le problème et renforce la sécurité globale.

Mesure temporaire de contournement

Si la mise à jour n’est pas possible, Qualys conseille de modifier la valeur de LoginGraceTime à 0 dans le fichier de configuration. Cette mesure empêche l’exécution de code arbitraire à distance mais rend la machine vulnérable à un déni de service à distance.


Sources

Catégories : Blog
Lénaïck Sori.

Écrit par :Lénaïck Sori. Toutes les publications de l'auteur

Découvrez un univers captivant où la cybersécurité, la photographie et les nouvelles technologies se rencontrent pour vous inspirer et vous informer.

🍪 Cookies

Notre site web utilise des cookies. Si vous continuez à utiliser ce site, nous supposerons que vous en êtes satisfait.