Une vulnérabilité critique découverte dans PuTTY
lun, 22/04/2024 - 15:32
En arrière-plan, PuTTY est un émulateur de terminal open source que les développeurs utilisent depuis Windows, pour accéder et gérer à distance des serveurs et d’autres périphériques en réseau via SSH. Une vulnérabilité critique vient d'être découverte dans PuTTY par Fabian Bäumer et Marcus Brinkmann, deux chercheurs de l’Université de la Ruhr à Bochum en Allemagne.
La vulnérabilité est estampillée CVE-2024-31497. Elle se situe dans le code qui génère des signatures à partir de clés privées ECDSA qui utilisent la courbe NIST P521. (PuTTY, ou Pageant, génère une signature à partir d'une clé lorsque vous l'utilisez pour vous authentifier auprès d'un serveur SSH.) L'exploitation de cette vulnérabilité compromet les clés privées. Un attaquant en possession de quelques dizaines de messages signés et de la clé publique dispose de suffisamment d'informations pour récupérer la clé privée, puis forger des signatures comme si elles provenaient de vous, lui permettant (par exemple) de se connecter à tous les serveurs sur lesquels vous utilisez cette clé. pour. Pour obtenir ces signatures, un attaquant n'a qu'à compromettre brièvement tout serveur sur lequel vous utilisez la clé pour vous authentifier, ou à accéder momentanément à une copie de Pageant contenant la clé.
Le projet PuTTY a expliqué cette vulnérabilité en détail :
"Tous les schémas de signature DSA nécessitent qu'une valeur aléatoire soit inventée lors de la signature, connue sous le nom de « nonce » (jargon cryptographique pour une valeur utilisée une seule fois), ou parfois par la lettre k . Il est bien connu que si un attaquant peut deviner la valeur de k que vous avez utilisée ou trouver deux signatures que vous avez générées avec le même k , il peut alors immédiatement récupérer votre clé privée.
Cela signifie qu'il est dangereux de générer des signatures DSA sur des systèmes sans source aléatoire de haute qualité. Beaucoup plus dangereux que de générer les clés de chiffrement pour une seule session : une fuite de la clé privée compromet bien plus d’une session SSH.
Pour cette raison, puisque PuTTY a été développé sur Windows avant de disposer d'un générateur de nombres aléatoires cryptographiques, PuTTY a toujours généré son k en utilisant une méthode déterministe, évitant ainsi le besoin de nombres aléatoires. L'astuce consiste à calculer un hachage sécurisé dont l'entrée inclut le message à signer ainsi que la clé privée . La sortie de hachage sécurisé ne peut pas être distinguée des données aléatoires (sinon la fonction de hachage ne fait pas son travail), et cette méthode de génération ne peut pas être répétée par un attaquant qui tente de découvrir la clé privée – s'il pouvait générer le même hachage. saisissez comme vous, ils auraient déjà la clé privée.
Cette technique est désormais courante et la RFC 6979 documente une manière spécifique et bien connue de la mettre en œuvre. Mais PuTTY n'a pas suivi cette spécification, car nous avons commencé à faire la même chose en 2001 et la RFC n'a été publiée qu'en 2013.
La technique de PuTTY fonctionnait en créant un hachage SHA-512, puis en le réduisant mod q , où q est l'ordre du groupe utilisé dans le système DSA. Pour un DSA entier (pour lequel la technique de PuTTY a été initialement développée), q est d'environ 160 bits ; pour le DSA à courbe elliptique (qui est venu plus tard), il a à peu près le même nombre de bits que le module de courbe, donc 256 ou 384 ou 521 bits pour les courbes NIST.
Dans tous ces cas, à l'exception de P521, le biais introduit par la réduction d'un nombre mod q de 512 bits est négligeable. Mais dans le cas de P521, où q a 521 bits (soit plus de 512), réduire un nombre de 512 bits mod q n'a aucun effet – vous obtenez une valeur de k dont les 9 premiers bits sont toujours nuls.
Ce biais est suffisant pour permettre une attaque de récupération de clé. C'est moins immédiat que si un attaquant connaît tout k, mais il s'avère que si k a une distribution biaisée de cette manière, il est possible d'agréger les informations de plusieurs signatures et éventuellement de récupérer la clé privée. Apparemment, le nombre de signatures requises est d'environ 60."
La vulnérabilité a été corrigée dans PUTTY 0.81 qu'il convient d'utiliser exclusivement désormais. Mais pour être en toute sécurité cela n'est pas suffisant. Vous devez également générer et utiliser de nouvelle spaires de clés, sans oublier de supprimer les ancviennes clés publiques des fichiers ~/.ssh/authorized_keys sur les servuers que vous administrez.
La vulnérabilité est présente aussi dans FileZilla, WinSCP et TortoiseGit. Vous devez passer aux versions PuTTY 0.81, FileZilla 3.67.0, WinSCP 6.3.3 et TortoiseGit 2.15.0.1