En PuTTY, un cliente para el protocolo SSH popular en la plataforma Windows, se ha descubierto una vulnerabilidad crítica (CVE-2024-31497) que permite reconstruir la clave privada del usuario generada utilizando el algoritmo ECDSA con la curva elíptica NIST P-521 (ecdsa-sha2-nistp521). Para obtener la clave privada, es suficiente analizar aproximadamente 60 firmas digitales formadas con la clave problemática.
La vulnerabilidad se presenta desde la versión PuTTY 0.68 y también afecta a productos que incluyen versiones vulnerables de PuTTY, como FileZilla (3.24.1 — 3.66.5), WinSCP (5.9.5 — 6.3.2), TortoiseGit (2.4.0.2 — 2.15.0) y TortoiseSVN (1.10.0 — 1.14.6). El problema se ha solucionado en las actualizaciones de PuTTY 0.81, FileZilla 3.67.0, WinSCP 6.3.3 y TortoiseGit 2.15.0.1. Después de instalar la actualización, se recomienda a los usuarios generar nuevas claves y eliminar las antiguas claves públicas de los archivos authorized_keys.
La vulnerabilidad es resultado de la negligencia de los desarrolladores, quienes utilizaron un vector de inicialización (nonce) basado en una secuencia aleatoria de 512 bits para generar una clave de 521 bits, probablemente pensando que la entropía de 512 bits sería suficiente y que los restantes 9 bits no importaban. Como consecuencia, en todas las claves privadas creadas en PuTTY usando el algoritmo ecdsa-sha2-nistp521, los primeros 9 bits del vector de inicialización siempre tenían valores nulos.
Para ECDSA y DSA, la calidad del generador de números pseudoaleatorios y la cobertura total con datos aleatorios del parámetro utilizado para calcular el módulo es fundamental, ya que definir incluso unos pocos bits de información sobre el vector de inicialización es suficiente para llevar a cabo un ataque de recuperación secuencial de toda la clave privada. Para recuperar la clave con éxito, es suficiente tener la clave pública y analizar unas pocas decenas de firmas digitales generadas con la clave problemática para los datos conocidos por el atacante. El ataque se reduce a resolver el problema HNP (Hidden Number Problem).
Las firmas digitales necesarias se pueden obtener, por ejemplo, al conectar al usuario a un servidor SSH del atacante o a un servidor Git que use SSH como transporte. También se pueden conocer las firmas necesarias para el ataque si la clave se utilizó para firmar datos arbitrarios, como commits de git al aplicar el agente SSH Pageant para redirigir el tráfico al host del desarrollador. La obtención de los datos necesarios para recuperar la clave durante un ataque MITM está excluida, ya que las firmas en SSH no se transmiten en texto claro.
Se ha observado que un uso similar de vectores de inicialización incompletos se aplicó en PuTTY y para otros tipos de curvas elípticas, pero para algoritmos diferentes a ECDSA P-521, las filtraciones de información no son suficientes para llevar a cabo un ataque exitoso para recuperar la clave. Las claves ECDSA de otro tamaño y las claves Ed25519 no son susceptibles a ataques.
Fuente: opennet.ru
