
Prueba de concepto que explota PuTTy CVE-2024-31497.
Esta vulnerabilidad explota la generación sesgada de nonce ECDSA en el archivo ecc-ssh.c. El nonce se genera con $sha512(ID\ ||\ sha512(privKey)\ ||\ sha1(data))\ mod\ q$ dejando los 9 bits superiores a cero. Para recuperar la clave privada necesitamos 60 firmas, pero con 58 aún tenemos un 50% de probabilidad de éxito.
Vulnerabilidad descubierta por Bäumer y Marcus Brinkmann.
Para usar este exploit debes tener instalados sagemath y las dependencias de Python en requirements.txt.
Extrae las firmas ECDSA de 60 commits verificados de GitHub que usaron PuTTy o TortoiseGit para firmar el contenido del commit.
Otro posible ataque es configurar un servidor SSH fraudulento donde las víctimas se conecten (usando PuTTY o Pageant) y después de varias conexiones puedas recuperar las 60 firmas para obtener la clave privada.
El archivo de firmas debe contener el hash del mensaje, un espacio y los valores de r y s concatenados.
El archivo de entrada de la clave pública puede estar en formato raw, PEM, DER o OpenSSH.
Este PoC usa parte de la implementación de malb del artículo On Bounded Distance Decoding with Predicate: Breaking the "Lattice Barrier" for the Hidden Number Problem