
Prova di concetto che sfrutta la CVE-2024-31497 di PuTTy.
Questa vulnerabilità sfrutta la generazione di nonce ECDSA biased nel file ecc-ssh.c. Il nonce viene generato con $sha512(ID\ ||\ sha512(privKey)\ ||\ sha1(data))\ mod\ q$ lasciando i primi 9 bit a zero. Per recuperare la chiave privata servono 60 firme, ma con 58 abbiamo ancora una probabilità di successo del 50%.
Vulnerabilità scoperta da Bäumer e Marcus Brinkmann.
Per utilizzare questo exploit devi avere sagemath e le dipendenze Python in requirements.txt installate.
Estrarre le firme ECDSA da 60 commit GitHub verificati che hanno utilizzato PuTTY o TortoiseGit per firmare il contenuto del commit.
Un altro possibile attacco è quello di configurare un server SSH rogue a cui le vittime si connettono (usando PuTTY o Pageant) e dopo diverse connessioni puoi recuperare le 60 firme per ottenere la chiave privata.
Il file delle firme deve contenere l'hash del messaggio, uno spazio e i valori di r e s concatenati.
Il file della chiave pubblica può essere in formato raw, PEM, DER o OpenSSH.
Questa poc utilizza parte dell'implementazione di malb del paper On Bounded Distance Decoding with Predicate: Breaking the "Lattice Barrier" for the Hidden Number Problem