CVE-2026-74677 in Linuxinformazioni

Riassunto

di VulDB • 22/08/2026

Nel kernel Linux è stata risolta la seguente vulnerabilità:

net: usb: ipheth: fix carrier_work UAF on disconnect

ipheth_sndbulk_callback() riattiva il lavoro di controllo del collegamento (carrier-check) per qualsiasi stato URB non nullo:

else schedule_delayed_work(&dev->carrier_work, 0);

Nessun vincolo lega tale operazione allo stato "up" dell'interfaccia; pertanto, il lavoro può essere riattivato dopo che ipheth_close() lo ha già svuotato (drained), rimanendo attivo finché la netdev, la cui area privata lo incorpora, non viene liberata.

In caso di disconnessione fisica con un URB TX in corso, ipheth_disconnect() svuota il lavoro tramite unregister_netdev() -> ipheth_close() -> cancel_delayed_work_sync(), e solo successivamente chiama ipheth_kill_urbs(). usb_kill_urb() completa l'URB TX in volo restituendo -ENOENT; di conseguenza, ipheth_sndbulk_callback() viene eseguito dopo lo svuotamento e riattiva carrier_work.

La stessa completazione riattiva il lavoro anche se l'interfaccia viene solo portata allo stato "down" mentre un URB TX è in volo, e ipheth_carrier_check_work() continua a reinserirsi nella coda una volta al secondo. unregister_netdev() non chiama ipheth_close() per un'interfaccia già nello stato "down", quindi nulla la svuota nemmeno durante la successiva disconnessione fisica.

In entrambi i casi, free_netdev() libera la netdev mentre carrier_work è ancora in attesa (pending), e ipheth_carrier_check_work() dereferenzia memoria già liberata (Use-After-Free).

Si lega il lavoro allo stato dell'interfaccia invece di inseguire la completazione: lo si disabilita in ipheth_close() e lo si abilita in ipheth_open(), affinché una schedule_delayed_work() proveniente dalla completazione URB sia un'operazione nulla (no-op) ogni volta che l'interfaccia non è attiva. disable_delayed_work_sync() attende anche l'esecuzione di un'istanza corrente, sostituendo così completamente la cancel_delayed_work_sync() al cui posto viene inserita. Il lavoro parte disabilitato in ipheth_probe(), in modo che i conteggi di abilitazione/disabilitazione si bilancino fin dalla prima apertura.

Riproduzione effettuata con KASAN su linux-next (next-20260731) utilizzando dummy_hcd e raw-gadget come emulatore del dispositivo, per innescare il secondo percorso sopra descritto (l'interfaccia è già down, quindi unregister_netdev() non chiama ipheth_close()): 15 avvisi su 15 avvii senza patch riportano un slab-use-after-free in __run_timers(), liberato da ipheth_disconnect() e riattivato tramite ipheth_sndbulk_callback() attraverso queue_delayed_work_on(). Lo stesso trigger su un kernel differenziante solo per questa patch riporta 0 avvisi su 15, e il controllo del collegamento (carrier check) funziona ancora correttamente nei cicli di apertura/chiusura.

Il programma riproduttore richiede un dispositivo USB collegato che interrompa lo svuotamento degli URB bulk OUT, unito a uno stato link down e alla disconnessione fisica, eseguito con privilegi di root. Non si tratta di una violazione del confine dei privilegi (privilege boundary crossing) ed è stata sviluppata alcuna primitiva di exploit.

Trovato da 0sec (https://0sec.ai).

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

Responsabile

Linux

Prenotare

15/08/2026

Divulgazione

22/08/2026

Moderazione

accettato

CPE

pronto

EPSS

0.00000

KEV

no

Attività

molto basso

Fonti

Might our Artificial Intelligence support you?

Check our Alexa App!