Il 14 ottobre 2026 il progetto curl ha pubblicato la versione 8.23.0, la 277ª release, che corregge 24 vulnerabilità di sicurezza. Una di queste, CVE-2026-92392, è un use-after-free negli upload HTTP/2 classificato di gravità alta e presente dalla versione 8.12.0 alla 8.22.0. La correzione è nella 8.23.0.

Cosa è stato corretto nella 8.23.0
Nel post di presentazione della release, Daniel Stenberg spiega che le vulnerabilità corrette sono ventiquattro, tante da non elencarle una per una: per i dettagli rimanda alla pagina di sicurezza di curl. Con questa release i problemi di sicurezza corretti dal progetto salgono a 239.
Come racconta Stenberg in un secondo articolo dedicato alla falla, il ciclo di rilascio è stato accorciato di due settimane, da otto a sei, e questo ha permesso di includere molte altre correzioni di vulnerabilità e bug.
CVE-2026-92392: il bug negli upload HTTP/2
Stenberg la definisce una delle peggiori vulnerabilità di curl da molto tempo. Nella tabella delle vulnerabilità della 8.22.0 sul sito di curl è l’unica marcata con gravità alta (H) e compare con il titolo «HTTP/2 upload Use-After-Free».
Secondo il progetto, lo scenario richiede un upload su HTTP/2 verso un server malevolo. libcurl negozia HTTP/2 di default quando l’URL è HTTPS e il server accetta. Secondo Stenberg la sequenza è questa:
- a upload avviato, il server mette in pausa l’invio azzerando la finestra HTTP/2, restituisce parte della risposta e poi resetta lo stream: il trasferimento si chiude, la connessione no;
- curl lascia così un puntatore pendente verso l’easy handle del trasferimento;
- l’applicazione libera l’easy handle e poi pulisce il multi handle: libcurl usa il puntatore pendente e scrive dati scaricati dal server nella memoria che l’handle occupava;
- nel processo parte una richiesta che rivela dettagli interni del client, compresi indirizzi locali, informazione utile per aggirare l’ASLR;
- un puntatore a funzione alterato dai dati scaricati porta all’esecuzione di codice remoto.
Quanto è davvero sfruttabile
Il progetto l’ha classificata come alta e non critica perché le condizioni per un attacco riuscito sono molte e, secondo Stenberg, estremamente difficili da ottenere in pratica:
- la vittima deve tentare un upload verso il server malevolo, quindi il certificato del server deve restare valido;
- l’upload deve avere una dimensione di circa 135 KB;
- l’attaccante deve conoscere l’architettura di curl per generare il codice giusto;
- serve una precisa sequenza di allocazioni, che cambia tra distribuzioni Linux, versioni di libc, bundle di certificati TLS e applicazioni che usano libcurl;
- contano anche il comportamento di nghttp2 e di OpenSSL con TLS 1.3, comprese le allocazioni legate ai session ticket;
- l’area in cui finisce il payload è piccola, circa 23 byte.
Secondo il progetto, l’esito più probabile di un tentativo è un semplice crash e la probabilità di un attacco riuscito è scarsa.
| Identificativo | Titolo | Gravità | Versioni coinvolte |
|---|---|---|---|
| CVE-2026-92392 | HTTP/2 upload Use-After-Free | Alta | da 8.12.0 a 8.22.0 |
Chi l’ha trovata e come cambia il lavoro del progetto
La falla è stata scoperta e segnalata da Luna Tong di Anthropic con il nuovo OSS Scanner. La segnalazione è arrivata il 15 settembre e il team di sicurezza di curl l’ha confermata nel giro di poche ore.
Per rendere più difficili errori simili, curl sta riducendo il numero di puntatori interni agli handle che devono restare corretti e conserva invece identificatori di trasferimento, cercati quando servono. Stenberg ammette che è un po’ più lento, ma più robusto di fronte a errori logici. Il progetto aggiunge anche più test e usa più strumenti di analisi. Stenberg precisa che non c’è garanzia di non introdurre in futuro un altro use-after-free, e ribadisce che curl non verrà riscritto in un altro linguaggio.
Cosa cambia ancora nella 8.23.0
La release porta anche modifiche non legate alla sicurezza:
- il supporto a SMB(S) è stato rimosso, sia da curl sia da libcurl;
- il simbolo CURL_GLOBAL_WIN32, usato con curl_global_init, è deprecato in favore di CURL_GLOBAL_WINSOCK;
- l’opzione
--no-clobberinserisce ora il numero nel nome del file come «-[numero]» prima dell’estensione, e prova fino a 9999 numeri prima di arrendersi.
Il tag curl-8_23_0 è stato pubblicato il 14 ottobre su GitHub, firmato da Daniel Stenberg.