
Доказательство концепции, эксплуатирующее уязвимость PuTTy CVE-2024-31497.
Эта уязвимость использует смещенную генерацию nonce ECDSA в файле ecc-ssh.c. Nonce генерируется как $sha512(ID\ ||\ sha512(privKey)\ ||\ sha1(data))\ mod\ q$, при этом старшие 9 бит равны нулю. Для восстановления закрытого ключа необходимо 60 сигнатур, но при 58 вероятность успеха все еще составляет 50%.
Уязвимость обнаружена Боймером и Маркусом Бринкманном.
Для использования этого эксплойта необходимо установить sagemath и зависимости Python из requirements.txt.
Извлеките сигнатуры ECDSA из 60 проверенных коммитов GitHub, которые использовали PuTTy или TortoiseGit для подписи содержимого коммита.
Другая возможная атака — настроить подставной SSH-сервер, к которому подключаются жертвы (используя PuTTY или Pageant), и после нескольких подключений можно получить 60 сигнатур для восстановления закрытого ключа.
Файл сигнатур должен содержать хеш сообщения, пробел и значения r и s, объединенные.
Входной файл открытого ключа может быть в формате raw, PEM, DER или OpenSSH.
Этот PoC использует часть реализации malb из статьи On Bounded Distance Decoding with Predicate: Breaking the "Lattice Barrier" for the Hidden Number Problem