CVE-2026-64045 in Linuxinformazioni

Riassunto

di VulDB • 19/07/2026

Nel kernel Linux, è stata risolta la seguente vulnerabilità:

ovpn: tcp - utilizza il puntatore al peer memorizzato nella cache in ovpn_tcp_close()

ovpn_tcp_close() carica l'ovpn_socket tramite rcu_dereference_sk_user_data() sotto rcu_read_lock(), acquisisce un riferimento su sock->peer, memorizza il puntatore del peer in una variabile locale e rilascia il lock di lettura. Successivamente passa sock->peer (anziché la copia locale cache) a ovpn_peer_del(), dereferenziando nuovamente l'ovpn_socket dopo che la sezione di lettura RCU è terminata.

A differenza di ovpn_tcp_sendmsg(), che utilizza lo stesso pattern "caricamento sotto RCU, utilizzo dopo il rilascio del lock" ma è protetta da lock_sock() mantenuto per tutta la funzione, ovpn_tcp_close() viene eseguita senza il socket lock: inet_release() invoca sk_prot->close() senza acquisire preventivamente lock_sock().

ovpn_socket_release() può quindi completare in concorrenza la sequenza kref_put -> detach -> synchronize_rcu -> kfree(sock) nella finestra temporale successiva al rilascio di rcu_read_lock() da parte di ovpn_tcp_close(), ma prima della dereferenziazione di sock->peer. La funzione synchronize_rcu() presente in ovpn_socket_release() protegge i lettori che utilizzano il puntatore dereferenziato all'interno della sezione di lettura RCU, non quelli che estradono il puntatore verso una variabile locale e lo utilizzano successivamente.

Un programma riproduttore segue il pattern del commit 94560267d6c4 ("ovpn: tcp - don't deref NULL sk_socket member after tcp_close()"): innesca la rimozione di un peer (scadenza keepalive o OVPN_CMD_DEL_PEER netlink) nello stesso momento in cui l'utente chiude il file descriptor TCP. Quel commit ha risolto il lato detach della stessa finestra temporale di race condition; questo fix risolve il lato close su una vittima diversa.

Rafforzare il blocco iniziale per leggere sock->peer esattamente una volta nella variabile locale cache, e instradare tutti gli utilizzi successivi (il controllo hold, la chiamata a ovpn_peer_del() e l'invocazione di prot->close()) attraverso tale variabile locale. sock->peer viene scritto solo una volta in ovpn_socket_new() sotto lock_sock(), prima che rcu_assign_sk_user_data() pubblichi l'ovpn_socket, e non viene mai riassegnato successivamente; tuttavia il precedente pattern multi-read rendeva questa invariant implicita anziché esplicita. La stessa struttura di multi-read esiste anche in ovpn_tcp_recvmsg(), ovpn_tcp_sendmsg(), ovpn_tcp_data_ready() e ovpn_tcp_write_space(); questi verranno ripuliti tramite un helper dedicato in una serie net-next successiva.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Responsabile

Linux

Prenotare

19/07/2026

Divulgazione

19/07/2026

Moderazione

accettato

CPE

pronto

EPSS

0.00000

KEV

no

Attività

basso

Fonti

Interested in the pricing of exploits?

See the underground prices here!