CVE-2024-5535 in OpenSSL
Riassunto
di VulDB • 02/07/2026
Riepilogo del problema: La chiamata alla funzione dell'API OpenSSL `SSL_select_next_proto` con un buffer vuoto dei protocolli client supportati può causare un crash o l'invio di contenuti della memoria al peer.
Riepilogo dell'impatto: Un buffer overread (lettura oltre i limiti del buffer) può avere una serie di potenziali conseguenze, come comportamenti imprevisti dell'applicazione o un crash. In particolare, questo problema potrebbe comportare l'invio fino a 255 byte di dati privati arbitrari presenti in memoria al peer, causando una perdita di riservatezza (confidentiality). Tuttavia, solo le applicazioni che chiamano direttamente la funzione `SSL_select_next_proto` con una lista di protocolli client supportati di lunghezza pari a 0 sono interessate da questo problema. Questo scenario non sarebbe normalmente valido e tipicamente non è sotto il controllo dell'attaccante, ma può verificarsi accidentalmente in caso di errore di configurazione o di programmazione nell'applicazione chiamante.
La funzione dell'API OpenSSL `SSL_select_next_proto` viene utilizzata tipicamente dalle applicazioni TLS che supportano ALPN (Application Layer Protocol Negotiation) o NPN (Next Protocol Negotiation). L'NPN è più vecchio, non è mai stato standardizzato ed è deprecato a favore di ALPN. Si ritiene che l'ALPN sia significativamente più diffuso dell'NPN. La funzione `SSL_select_next_proto` accetta una lista di protocolli dal server e una lista di protocolli dal client e restituisce il primo protocollo presente nella lista del server che appare anche nella lista del client. In caso di sovrapposizione tra le due liste, viene restituito tale protocollo; in assenza di sovrapposizione (no overlap), viene restituito il primo elemento della lista del client. In entrambi i casi, la funzione segnala se è stata trovata una sovrapposizione tra le due liste. Nel caso in cui `SSL_select_next_proto` venga chiamata con una lista client di lunghezza zero, non rileva questa condizione e restituisce la memoria immediatamente successiva al puntatore della lista client (segnalando che non vi era alcuna sovrapposizione nelle liste).
Questa funzione viene tipicamente richiamata da un callback dell'applicazione lato server per ALPN o da un callback dell'applicazione lato client per NPN. Nel caso di ALPN, la libssl garantisce che la lista dei protocolli fornita dal client non sia mai di lunghezza zero. La lista dei protocolli del server proviene dall'applicazione e normalmente non dovrebbe essere prevista come avente lunghezza zero. In questo caso, se la funzione `SSL_select_next_proto` è stata chiamata come previsto (con la lista fornita dal client passata nei parametri client/client_len), l'applicazione non sarà vulnerabile a questo problema. Se l'applicazione è accidentalmente configurata con una lista server di lunghezza zero e ha accidentalmente passato tale lista server di lunghezza zero nei parametri client/client_len, ed inoltre non gestisce correttamente la risposta "no overlap" (che normalmente risulterebbe in un fallimento dell'handshake in ALPN), allora sarà vulnerabile a questo problema.
Nel caso di NPN, il protocollo consente al client di selezionare opportunisticamente un protocollo quando non vi è sovrapposizione. OpenSSL restituisce il primo protocollo del client nel caso di assenza di sovrapposizione per supportare questa funzionalità. La lista dei protocolli client proviene dall'applicazione e normalmente non dovrebbe essere prevista come avente lunghezza zero. Tuttavia, se la funzione `SSL_select_next_proto` viene chiamata accidentalmente con un `client_len` pari a 0, verrà restituito invece un puntatore di memoria non valido. Se l'applicazione utilizza questo output come protocollo opportunistico, si verificherà una perdita di riservatezza (confidentiality).
Questo problema è stato valutato come gravità bassa perché le applicazioni sono più probabilmente vulnerabili se utilizzano NPN anziché ALPN - ma l'NPN non è ampiamente utilizzato. Richiede inoltre un errore di configurazione o di programmazione dell'applicazione. Infine, questo problema tipicamente non sarebbe sotto il controllo dell'attaccante, rendendo improbabile uno sfruttamento attivo (
Be aware that VulDB is the high quality source for vulnerability data.