4 puntos por GN⁺ 2024-04-16 | 4 comentarios | Compartir por WhatsApp

Vulnerabilidad en la generación de firmas con clave privada ECDSA de curva NIST P521 en la herramienta PuTTY

  • Todas las versiones de PuTTY desde la 0.68 hasta la 0.80 tienen una vulnerabilidad grave en el código que genera firmas con claves privadas ECDSA que usan la curva NIST P521
    • Ocurre cuando PuTTY o Pageant generan una firma desde la clave al autenticarse ante un servidor SSH
    • A esta vulnerabilidad se le asignó el CVE-2024-31497
    • Fue descubierta por Fabian Bäumer y Marcus Brinkmann de la Ruhr University Bochum

Impacto de la vulnerabilidad

  • El impacto de esta vulnerabilidad es la exposición de la clave privada
    • Si un atacante tiene decenas de mensajes firmados y la clave pública, cuenta con información suficiente para recuperar la clave privada
    • Con eso puede falsificar firmas como si fuera el usuario e iniciar sesión en todos los servidores que usan esa clave
  • Para obtener esas firmas, al atacante le basta con comprometer brevemente un servidor en el que se autentique usando la clave, o con tener acceso por un corto tiempo a una copia de Pageant que tenga la clave cargada
    • Sin embargo, esas firmas no quedan expuestas a un espía pasivo de la conexión SSH
  • Si tienes este tipo de clave, se recomienda descartarla de inmediato
    • Debes eliminar la clave pública anterior de todos los archivos authorized_keys de OpenSSH y de los archivos equivalentes en otros servidores SSH, para que las firmas de la clave comprometida ya no tengan valor
    • Después, genera un nuevo par de claves para reemplazarla

Tipos de clave afectados

  • El único tipo de clave afectado es ECDSA de 521 bits
    • En PuTTYgen para Windows, aparece ecdsa-sha2-nistp521 al inicio del cuadro "Key fingerprint"; en Pageant para Windows se describe como "NIST p521" al cargarse; y en el protocolo SSH o en el archivo de clave tiene un identificador que comienza con ecdsa-sha2-nistp521
    • Los ECDSA de otros tamaños y los demás algoritmos de clave no están afectados
    • En particular, Ed25519 no está afectado

Detalles del error

  • Todos los esquemas de firma DSA deben generar un valor aleatorio durante la firma
    • A este valor se le conoce como nonce (término criptográfico para un valor de un solo uso) o con la letra k
  • Es bien sabido que, si un atacante puede adivinar el valor k usado, o encontrar dos firmas generadas con el mismo k, puede recuperar de inmediato la clave privada
    • Por eso, generar firmas DSA en sistemas sin una fuente de aleatoriedad de alta calidad es riesgoso
  • Como PuTTY fue desarrollado en Windows, no tenía ningún generador criptográfico de números aleatorios
    • Por lo tanto, PuTTY ha estado generando k con un método determinista, sin usar números aleatorios en absoluto
    • La técnica central consiste en calcular un hash seguro cuya entrada incluye tanto el mensaje a firmar como la clave privada
  • Esta técnica hoy es dominante, y RFC 6979 documenta una forma concreta y muy conocida de hacerlo
    • Sin embargo, PuTTY ya hacía esencialmente lo mismo desde 2001, y como el RFC no se publicó sino hasta 2013, no seguía esa especificación

Causa de la vulnerabilidad

  • La técnica de PuTTY funciona creando un hash SHA-512 y luego reduciéndolo módulo q, que es el orden del grupo usado en el sistema DSA
  • En todos los casos excepto P521, el sesgo que surge de reducir un número de 512 bits módulo q es despreciable
  • Pero en P521, q es de 521 bits (es decir, mayor que 512 bits), así que reducir un número de 512 bits módulo q no tiene ningún efecto
    • Como resultado, se obtiene un valor k cuyos 9 bits superiores siempre son 0
  • Ese sesgo hace posible un ataque de recuperación de clave

Corrección de la vulnerabilidad

  • Para resolver esta vulnerabilidad, PuTTY abandonó por completo su sistema anterior de generación de k y cambió a la técnica de RFC 6979 para todos los tipos de clave DSA y ECDSA
    • Las claves EdDSA, como Ed25519, ya usaban otro sistema y no cambiaron
  • Sin embargo, eso no cambia el hecho de que ya se filtró información sobre las claves privadas P521 existentes cada vez que se generó una firma usando el generador k anterior

Opinión de GN⁺

  • Aunque es una vulnerabilidad descubierta relativamente hace poco, parece originarse en un problema del método usado desde 2001. Puede verse como un caso que muestra los riesgos de una implementación personalizada que desde el inicio no siguió el estándar.
  • Esta vulnerabilidad solo afecta a un tipo específico de clave, pero si alguna vez usaste ese tipo de clave, el problema puede ser grave, por lo que es importante descartarla de inmediato si está afectada.
  • En proyectos de código abierto, las partes relacionadas con criptografía deberían seguir estándares y también requerir verificación externa. En especial, la generación de aleatoriedad es muy importante, por lo que parece más seguro depender del sistema operativo o de bibliotecas validadas.
  • PuTTY es un emulador de terminal de código abierto ampliamente usado que soporta los protocolos SSH, Telnet y Rlogin, y se utiliza cómodamente gracias a su función de guardar información de conexión. Parece necesario responder activamente a futuros parches de seguridad.
  • En macOS o Linux, algunas alternativas a PuTTY son la app de terminal predeterminada o iTerm2. En Windows, se pueden considerar como alternativas Windows Terminal, PowerShell o Cmder.

4 comentarios

 
tominam2 2024-04-16

Ah..

 
kuroneko 2024-04-16

No creo haber usado nunca ese tipo de clave, pero igual ya actualicé.

 
dlehals2 2024-04-16

Vi esto y actualicé de inmediato a la 0.81 jaja

 
GN⁺ 2024-04-16
Opiniones de Hacker News

A continuación, un resumen de los comentarios de Hacker News:

  • Se descubrió una vulnerabilidad en el método de generación de claves ECDSA P-521 que usa PuTTY. Al usar un módulo de 521 bits, el valor k también debería ser aleatorio de 521 bits, pero PuTTY solo usaba 512 bits aleatorios, por lo que los 9 bits superiores se rellenaban con 0. Esto podría llevar a la filtración de la clave privada mediante álgebra lineal.
  • Se valora mucho la forma honesta y clara en que Simon Tatham, desarrollador de PuTTY, divulgó la vulnerabilidad. Comunicó los hechos tal cual, sin excusas ni minimizaciones.
  • Falta una explicación de contexto sobre cómo se descubrió la vulnerabilidad.
  • Las versiones recientes de Windows ya incluyen OpenSSH por defecto, así que ya no es necesario usar PuTTY. Aun así, muchas personas lo siguen usando por costumbre o inercia.
  • Probablemente no haya muchas personas que hayan elegido ese tipo de clave en particular en lugar de usar la configuración predeterminada.
  • Si se está usando una clave de host P521, podría ser necesario reemplazarla después de actualizar el cliente.
  • Podría valer la pena considerar migrar a EdDSA, que no requiere RNG ni operaciones modulares.
  • Algunas personas se dieron cuenta recién ahora de que el nombre PuTTY viene de la masilla (putty) que se usa para fijar los vidrios de las ventanas.
  • No se entiende por qué PuTTY aplicó una operación modular por q al resultado del hash SHA-512. Parece mejor usar solo la cantidad de bits necesaria, o hashear por separado el mensaje y la clave privada antes de combinarlos.
  • Se menciona que, si en lugar de un número aleatorio de 521 bits se usa uno cuyos 9 bits superiores son 0, la clave privada puede filtrarse después de 60 firmas, y hay curiosidad por entender qué principio lo hace posible.