In PuTTY, il client per il protocollo SSH popolare sulla piattaforma Windows, è stata rilevata una vulnerabilità critica (CVE-2024-31497) che permette di ricreare la chiave privata dell'utente generata utilizzando l'algoritmo ECDSA con la curva ellittica NIST P-521 (ecdsa-sha2-nistp521). Per recuperare la chiave privata, è sufficiente analizzare circa 60 firme digitali generate con la chiave compromessa.
La vulnerabilità si manifesta a partire dalla versione PuTTY 0.68 e ha coinvolto anche i prodotti che integrano versioni vulnerabili di PuTTY, come FileZilla (3.24.1 - 3.66.5), WinSCP (5.9.5 - 6.3.2), TortoiseGit (2.4.0.2 - 2.15.0) e TortoiseSVN (1.10.0 - 1.14.6). Il problema è stato risolto negli aggiornamenti PuTTY 0.81, FileZilla 3.67.0, WinSCP 6.3.3 e TortoiseGit 2.15.0.1. Dopo aver installato l'aggiornamento, si consiglia agli utenti di generare nuove chiavi e rimuovere le vecchie chiavi pubbliche dai file authorized_keys.
La vulnerabilità è causata dalla negligenza degli sviluppatori, che per generare una chiave a 521 bit hanno utilizzato un vettore di inizializzazione (nonce) basato su una sequenza casuale a 512 bit, probabilmente ritenendo che 512 bit di entropia fossero sufficienti e che i restanti 9 bit non fossero significativi. Di conseguenza, in tutte le chiavi private create in PuTTY utilizzando l'algoritmo ecdsa-sha2-nistp521, i primi 9 bit del vettore di inizializzazione assumevano sempre valori nulli.
Per ECDSA e DSA, la qualità del generatore di numeri pseudocasuali e la completa copertura casuale dei dati per il parametro utilizzato nel calcolo del modulo sono fondamentali, poiché la determinazione anche di pochi bit con informazioni sul vettore di inizializzazione è sufficiente per eseguire un attacco di recupero sequenziale dell'intera chiave privata. Per il recupero riuscito della chiave è sufficiente avere la chiave pubblica e analizzare alcune decine di firme digitali generate utilizzando la chiave problematica per dati noti all'attaccante. L'attacco si riduce alla soluzione del problema HNP (Hidden Number Problem).
Le firme digitali necessarie possono essere ottenute, ad esempio, connettendo l'utente a un server SSH dell'attaccante o a un server Git che utilizza SSH come trasporto. Le firme necessarie per l'attacco possono essere anche apprese se la chiave è stata utilizzata per firmare dati arbitrari, come gli commit git utilizzando l'agente SSH Pageant per reindirizzare il traffico sull'host dello sviluppatore. L'ottenimento dei dati necessari per il recupero della chiave durante un attacco MITM è escluso, poiché le firme in SSH non vengono trasmesse in chiaro.
Si segnala che un uso simile di vettori di inizializzazione incompleti è stato applicato in PuTTY e per altri tipi di curve ellittiche, ma per algoritmi diversi da ECDSA P-521, le perdite di informazioni non sono sufficienti per attuare un attacco funzionante per il recupero della chiave. Le chiavi ECDSA di dimensioni diverse e le chiavi Ed25519 non sono vulnerabili ad attacchi.
Fonte: opennet.ru
