Hace poco se dio a conocer la noticia de que fue detectada una vulnerabilidad en PuTTY (ya catalogada bajo CVE-2024-31497) una herramienta popular que proporciona implementaciones de los protocolos SSH, Telnet y Rlogin para sistemas Windows y Unix.
La vulnerabilidad CVE-2024-31497 detectada es considerada como critica, ya que permite recrear la clave privada del usuario utilizando el algoritmo ECDSA de curva elíptica NIST P-521 (ecdsa-sha2-nistp521) a partir de aproximadamente 60 firmas digitales generadas en PuTTY.
Cabe mencionar que la vulnerabilidad descubierta no es exclusiva del cliente PuTTY ya que también afecta a otros productos que incluyen versiones vulnerables de PuTTY, como FileZilla, WinSCP, TortoiseGit y TortoiseSVN. Esta vulnerabilidad se debe a un sesgo en la generación de nonces ECDSA, donde los primeros 9 bits de cada nonce ECDSA son cero, lo que facilita la recuperación de aproximadamente 60 firmas ECDSA válidas mediante técnicas avanzadas.
Se menciona que la causa de esta vulnerabilidad radica en el uso de una secuencia aleatoria de 512 bits para generar un vector de inicialización de 521 bits (nonce) por parte de los desarrolladores de PuTTY. Creyeron erróneamente que 512 bits de entropía serían suficientes y que los 9 bits restantes no eran críticos. Sin embargo, esto resultó en que los primeros 9 bits del vector de inicialización siempre fueran cero, lo que permitió la recreación de claves privadas.
El conjunto requerido de mensajes firmados puede ser legible públicamente porque están almacenados en un servicio público Git que admite el uso de SSH para la firma de confirmación, y Pageant realizó las firmas a través de un mecanismo de reenvío de agentes. En otras palabras, es posible que un usuario mal intencionado ya tenga suficiente información de firma para comprometer la clave privada de una víctima, incluso si no se utilizan más versiones vulnerables de PuTTY.
La importancia de la calidad del generador de números pseudoaleatorios y la cobertura completa del parámetro en el cálculo del módulo por datos aleatorios es crucial para los algoritmos ECDSA y DSA. La determinación de incluso unos pocos bits con información sobre el vector de inicialización puede llevar a un ataque exitoso para recuperar secuencialmente toda la clave privada. Este tipo de ataque se basa en resolver el Problema de Números Ocultos (HNP, por sus siglas en inglés).
Para tener éxito en recuperar una clave privada, un atacante solo necesita una clave pública y varias firmas digitales generadas utilizando el vector de inicialización problemático. Estas firmas pueden obtenerse si el usuario se conecta a un servidor SSH malicioso o a un servidor Git que utiliza SSH como transporte. También se pueden obtener si la clave se utiliza para verificar datos arbitrarios, como git commits con el agente Pageant SSH redirigiendo el tráfico al host del desarrollador.
Después de un compromiso clave, un adversario puede realizar ataques a la cadena de suministro del software mantenido en Git. Un segundo escenario independiente es que el adversario sea un operador de un servidor SSH en el que la víctima se autentica (para inicio de sesión remoto o copia de archivos), aunque la víctima no confíe plenamente en este servidor y la víctima utilice la misma clave privada para conexiones SSH a otros servicios operados por otras entidades.
Es importante destacar que el ataque MITM para obtener los datos necesarios para recuperar la clave no es viable, ya que las firmas en SSH no se transmiten en texto claro. En el caso de PuTTY, se observó un uso similar de vectores de inicialización incompletos para otros tipos de curvas elípticas, pero los algoritmos ECDSA de otros tamaños y las claves Ed25519 no son susceptibles a este tipo de ataque.
Finalmente, se menciona que la solución para esta vulnerabilidad se encuentra en las actualizaciones de PuTTY y de los demás productos afectados y por ende se recomienda a los usuarios que hayan utilizado versiones vulnerables que generen nuevas claves privadas y eliminen las claves públicas antiguas de sus archivos autorizados_keys después de aplicar la actualización.
Si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.