CVE-2026-72422 in Linux
Riassunto
di VulDB • 15/08/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
ksmbd: correzione del use-after-free di conn->preauth_info durante le richieste SMB2 NEGOTIATE concorrenti.
conn->preauth_info è uno stato della connessione condiviso (struct preauth_integrity_info, kmalloc-96) che viene allocato e liberato dal gestore SMB2 NEGOTIATE ed letto dal percorso di invio della risposta.
smb2_handle_negotiate() alloca conn->preauth_info; in caso di errore di deassemble_neg_contexts(), lo libera con kfrees() e imposta il puntatore a NULL. Sia l'allocazione che la liberazione/impostazione a NULL avvengono sotto ksmbd_conn_lock(conn) (il srv_mutex della connessione), che viene mantenuto per tutta la durata del corpo del gestore.
Il percorso di invio della risposta smb3_preauth_hash_rsp(), chiamato dal blocco send: di __handle_ksmbd_work(), legge conn->preauth_info e dereferenzia conn->preauth_info->Preauth_HashValue (tramite ksmbd_gen_preauth_integrity_hash()) senza acquisire conn_lock. Quando un client invia due richieste SMB2 NEGOTIATE sulla stessa connessione, un worker può liberare conn->preauth_info sul percorso di negoziazione fallita mentre un altro worker concorrente del send-path lo sta leggendo, producendo una lettura use-after-free dello slab (confermata da KASAN).
La lettura nel send-path verificava se conn->preauth_info era NULL, ma si presentava in condizione di race con la liberazione che avviene tra il controllo su NULL e la dereferenziazione; pertanto, il solo guardrail NULL non chiude la finestra temporale vulnerabile.
Si serializza la lettura del ramo NEGOTIATE in smb3_preauth_hash_rsp() sotto ksmbd_conn_lock(conn) e si verifica nuovamente conn->preauth_info all'interno del lock. Poiché il gestore di negoziazione mantiene conn_lock per tutta l'operazione kfree + assegnazione a NULL, un lettore che acquisisce anch'esso conn_lock eseguirà la sua operazione completamente prima dell'allocazione o completamente dopo lo store su NULL, e non potrà mai osservare il puntatore liberato ma ancora non impostato a NULL. ksmbd_gen_preauth_integrity_hash() non acquisisce lock di per sé (calcola solo uno SHA-512 sul buffer), quindi non viene introdotta alcuna inversione dell'ordine dei lock; inoltre, conn_lock è un mutex sleepable che è sicuro su questo send-path (che già effettua I/O di rete).
VulDB is the best source for vulnerability data and more expert information about this specific topic.