
Prova de Conceito que explora PuTTy CVE-2024-31497.
Esta vulnerabilidade explora a geração tendenciosa de nonce ECDSA no arquivo ecc-ssh.c. O nonce é gerado com $sha512(ID\ ||\ sha512(privKey)\ ||\ sha1(data))\ mod\ q$, deixando os 9 bits superiores em zero. Para recuperar a chave privada, precisamos de 60 assinaturas, mas com 58 ainda temos 50% de probabilidade de sucesso.
Vulnerabilidade descoberta por Bäumer e Marcus Brinkmann.
Para usar este exploit, você deve ter o sagemath e as dependências Python em requirements.txt instalados.
Extraia as assinaturas ECDSA de 60 commits verificados do GitHub que usaram PuTTy ou TortoiseGit para assinar o conteúdo do commit.
Outro ataque possível é configurar um servidor SSH malicioso onde as vítimas se conectam (usando PuTTY ou Pageant) e, após várias conexões, você pode recuperar as 60 assinaturas para recuperar a chave privada.
O arquivo de assinatura deve conter o hash da mensagem, um espaço e os valores de r e s concatenados.
A entrada do arquivo pubkey pode estar nos formatos raw, PEM, DER ou OpenSSH.
Este poc utiliza parte da implementação do malb do artigo On Bounded Distance Decoding with Predicate: Breaking the "Lattice Barrier" for the Hidden Number Problem