Nel patch gssapi.patch, utilizzato in molte distribuzioni Linux, che aggiunge il supporto per lo scambio di chiavi basato su GSSAPI in OpenSSH, è stata identificata una vulnerabilità (CVE-2026-3497) che porta a dereferenziazione di puntatore, corruzione di memoria e bypass del meccanismo di separazione dei privilegi (Privsep). La vulnerabilità può essere sfruttata da remoto prima dell’autenticazione. Il ricercatore che ha rilevato il problema ha dimostrato come provocare il crash del processo inviando un pacchetto di rete modificato a un server SSH. Non si esclude che, oltre a causare un'interruzione del servizio, ci siano possibilità di sfruttamento della vulnerabilità più pericolose.
È interessante notare che in passato gli sviluppatori di OpenSSH rifiutarono di includere nel main branch la modifica per supportare GSSAPI a causa di dubbi sulla sua sicurezza. Tuttavia, molte distribuzioni Linux hanno incluso questa patch nei loro pacchetti con OpenSSH. Esistono diverse versioni della patch GSSAPI, ma nella maggior parte di esse è presente un errore che porta a una vulnerabilità. La correzione è attualmente disponibile solo sotto forma di patch, che consiste nella sostituzione della chiamata alla funzione sshpkt_disconnect() con ssh_packet_disconnect() nel file kexgsss.c.
Attualmente, la vulnerabilità è confermata in Debian e Ubuntu. Negli altri sistemi operativi, l'applicazione della patch problematica e la sua vulnerabilità sono in fase di verifica (SUSE/openSUSE, RHEL, Gentoo, Arch, Fedora). La vulnerabilità si manifesta solo quando l'opzione "GSSAPIKeyExchange yes" è abilitata nelle impostazioni. Anche le opzioni del compilatore con cui il pacchetto è stato compilato influiscono sulla possibilità di sfruttamento.
La causa della vulnerabilità è un errore nella funzione sshpkt_disconnect(), che non terminava il processo dopo la ricezione del messaggio di disconnessione, consentendo all'attaccante, nella fase di negoziazione delle chiavi, di inviare un messaggio non previsto dalla logica operativa. server tipo di messaggio GSSAPI. Dopo la ricezione di un messaggio GSSAPI imprevisto, un server viene messo in coda e non interrompe l'esecuzione del programma, ma non inizializza le variabili che definiscono i parametri della connessione. In seguito, nel ciclo di elaborazione degli eventi, viene eseguito un codice che legge una struttura recv_tok non inizializzata dallo stack (dati rimasti nello stack dalla chiamata precedente della funzione), la invia a un processo privilegiato tramite IPC e poi la passa alla funzione gss_release_buffer(), che può chiamare la funzione free() e liberare la memoria per un puntatore non valido che punta a una zona di memoria casuale.
Fonte: opennet.ru
