W PuTTY, kliencie dla protokołu SSH, popularnym na platformie Windows, wykryto niebezpieczną lukę (CVE-2024-31497), która umożliwia odtworzenie prywatnego klucza użytkownika wygenerowanego przy użyciu algorytmu ECDSA z krzywą eliptyczną NIST P-521 (ecdsa-sha2-nistp521). Aby dobrać prywatny klucz, wystarczy przeanalizować około 60 podpisów cyfrowych utworzonych problematycznym kluczem.
Vulnerability has been present since PuTTY version 0.68 and has also affected products that include vulnerable versions of PuTTY, such as FileZilla (3.24.1 – 3.66.5), WinSCP (5.9.5 – 6.3.2), TortoiseGit (2.4.0.2 – 2.15.0), and TortoiseSVN (1.10.0 – 1.14.6). The issue has been resolved in updates PuTTY 0.81, FileZilla 3.67.0, WinSCP 6.3.3, and TortoiseGit 2.15.0.1. After installing the update, users are advised to generate new keys and remove old public keys from the authorized_keys files.
Luka jest spowodowana niedbalstwem deweloperów, którzy do generowania 521-bitowego klucza używali wektora inicjalizacji (nonce) bazującego na 512-bitowej losowej sekwencji, prawdopodobnie uznając, że entropia na poziomie 512 bitów jest wystarczająca i pozostałe 9 bitów nie ma znaczenia. W rezultacie we wszystkich prywatnych kluczach stworzonych w PuTTY z użyciem algorytmu ecdsa-sha2-nistp521, pierwsze 9 bitów wektora inicjalizacji zawsze przyjmowało wartości zerowe.
Dla ECDSA i DSA jakość generatora liczb pseudolosowych oraz pełne pokrycie losowymi danymi parametru używanego przy obliczaniu modułu mają kluczowe znaczenie, ponieważ określenie nawet kilku bitów z informacjami o wektorze inicjalizacji wystarczy do przeprowadzenia ataku mającego na celu sekwencyjne odzyskanie całego klucza prywatnego. Do udanego odzyskania klucza wystarczy posiadanie klucza publicznego oraz analiza kilku dziesiątek podpisów cyfrowych, wygenerowanych z użyciem problematycznego klucza dla danych znanych atakującemu. Atak sprowadza się do rozwiązania problemu HNP (Hidden Number Problem).
Niektóre niezbędne podpisy cyfrowe można uzyskać, na przykład, łącząc użytkownika z serwerem SSH atakującego lub z serwerem Git korzystającym z SSH jako transportu. Niezbędne podpisy do przeprowadzenia ataku można również poznać, jeśli klucz był używany do zatwierdzania dowolnych danych, na przykład, commitów git podczas używania agenta SSH Pageant do przekierowywania ruchu na hosta dewelopera. Uzyskanie niezbędnych danych do odzyskania klucza w trakcie ataku MITM jest wykluczone, ponieważ podpisy w SSH nie są przesyłane w postaci jawnej.
Zauważono, że podobne wykorzystanie niepełnych wektorów inicjalizacji było stosowane w PuTTY i dla innych rodzajów krzywych eliptycznych, ale dla algorytmów innych niż ECDSA P-521, ujawnienie informacji nie jest wystarczające do przeprowadzenia skutecznego ataku mającego na celu odzyskanie klucza. Klucze ECDSA o innym rozmiarze i klucze Ed25519 nie są narażone na atak.
Źródło: opennet.ru
