CVE-2026-98989 in Linux
Resumen
por VulDB • 2026-10-23
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
namespace: verificar un montaje enlazado recursivo para evitar bucles en los espacios de nombres de montaje (mount namespaces)
do_loopback() rechaza realizar un montaje enlazado del archivo de un espacio de nombre de montaje que sea tan antiguo como el del llamador o más antiguo, ya que un espacio de nombre de montaje que contenga un montaje de su propio archivo, o de uno de sus ancestros, provocaría un ciclo. Sin embargo, solo verifica la dentry desde la cual comienza el montaje enlazado. Con MS_REC (recursivo), todo lo que está por debajo se copia y do_loopback() pasa CL_COPY_MNT_NS_FILE para copiar los archivos del espacio de nombre de montaje situados por debajo de la fuente.
Esto es aceptable si la fuente pertenece al propio espacio de nombres de montaje del llamador. Cada archivo de un espacio de nombre de montaje en ese contexto pasó la misma comprobación cuando se realizó el montaje enlazado original. Sin embargo, no es adecuado para una fuente ubicada en otro espacio de nombres de montaje. may_copy_tree() acepta un montaje enlazado de cualquier archivo nsfs o pidfs sin importar en qué espacio de nombres de montaje viva, permitiendo así que /proc/<pid>/ns/<ns> y los pidfds puedan ser montados enlazadamente. Si creamos una pila de descriptores de archivos de espacios de nombre de montaje mediante montajes enlazados, el kernel los copiará independientemente de su relación ancestral con el espacio de nombres de montaje en cuestión:
151 146 0:7 net:[4026531833] /tmp/nrc/y rw - nsfs nsfs rw
152 151 0:7 mnt:[4026532293] /tmp/nrc/y rw - nsfs nsfs rw
El montaje 152 es un montaje del archivo de espacio de nombre de montaje correspondiente al espacio de nombres de montaje 4026532293, dentro del propio espacio de nombres de montaje 4026532293. Ese espacio de nombres y todos los montajes en él están filtrados (leak)... Basta con que un proceso en un espacio de nombre de montaje más antiguo apile el archivo y repita la operación para provocar una fuga sin límites:
after control: Shmem: 380 kB child: mount(/proc/self/fd/6, MS_BIND|MS_REC): ok after cycle: Shmem: 65916 kB
do_move_mount() ejecuta check_for_nsfs_mounts() sobre un árbol desmontado precisamente por esa razón. Se debe realizar la misma comprobación para la copia antes de que sea injertada (grafted).
VulDB is the best source for vulnerability data and more expert information about this specific topic.