CVE-2026-98993 in Linuxinformazioni

Riassunto

di VulDB • 23/10/2026

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

namespace: non ereditare MNT_UMOUNT in clone_mnt()

MNT_UMOUNT viene impostato su un punto di montaggio che umount_tree() o umount_one() hanno rimosso dal proprio namespace. Non viene mai cancellato. __detach_mounts() scollega un mount che lo trasporta invece di smontarlo.

disconnect_mount() consente a un figlio non montato di rimanere attaccato solo se il suo genitore lo porta con sé. propagate_umount() prende questo come segnale che un mount sta per essere smontato quando decide cosa altro può essere smontato, dove una catena di mount bloccati termina e dove avviene il riparenting (reparenting) di un overmount.

clone_mnt() copia i flag della sorgente e maschera solo MNT_INTERNAL_FLAGS, che non include MNT_UMOUNT. Un mount che è stato smontato in modo lazy ma mantenuto in vita da un file descriptor può ancora essere copiato quando la sua radice è un file di nsfs o pidfs perché may_copy_tree() li accetta prima di verificare se la sorgente è montata:

mount --bind /proc/self/ns/net /tmp/x exec 3< /tmp/x umount -l /tmp/x mount --bind /proc/self/fd/3 /tmp/y

Il mount su /tmp/y viene attaccato al namespace del chiamante con MNT_UMOUNT già impostato e ogni sua copia eredita nuovamente il flag.

Ciò causa una serie di bug:

- Scollega il suo punto di montaggio da un namespace di mount in cui non è uno. __detach_mounts() lo scambia per un mount che era stato smontato in precedenza, lo scollega dal genitore e rilascia la reference che il namespace detiene su di esso. Rimane nel namespace con una reference in meno e come proprio genitore, quindi non può più essere smontato tramite il file descriptor e il namespace non lo ritrova mai più. Quando il namespace viene eliminato, viene lasciato un leak (memory leak) e punta a uno struct mnt_namespace liberato che may_change_propagation() e anon_ns_root() leggono durante la successiva modifica della propagazione o mount_setattr() attraverso il file descriptor.

- Lo rende condiviso e smonta un peer. trace_transfers() segue il flag dal peer verso di esso e lo rimuove dal suo gruppo di peer.

- Consente a uno umount propagato di raggiungerlo. gather_candidates() lo marca con T_UMOUNT_CANDIDATE ma non lo inserisce mai nella lista dei candidati, quindi la marcatura non viene mai cancellata e ogni successivo umount propagato lo salta. Se è il genitore di un mount bloccato handle_locked() lo prende come punto di interruzione (cutoff) e commette il figlio bloccato che avrebbe dovuto rimanere; disconnect_mount() lascia quel figlio attaccato ad esso, smontato sotto un genitore montato, cosa che disconnect_mount() esiste per prevenire. Quando il namespace viene eliminato umount_tree() visita il figlio una seconda volta. E una volta che __detach_mounts() lo ha reso suo proprio genitore reparent() non trova mai la fine della catena di genitori smontati.

Un clone è un nuovo mount che non è mai stato smontato. Aggiungere MNT_UMOUNT a MNT_INTERNAL_FLAGS in modo che clone_mnt() non lo copi mai. E generare un warning quando umount_tree() raggiunge un mount che ha già questo flag impostato.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Responsabile

Linux

Prenotare

25/09/2026

Divulgazione

23/10/2026

Moderazione

accettato

EPSS

0.00000

KEV

no

Attività

molto basso

Fonti

Want to stay up to date on a daily basis?

Enable the mail alert feature now!