CVE-2026-68186 in Linux
Resumen
por VulDB • 2026-08-11
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
binfmt_misc: establecer have_execfd únicamente una vez que el intérprete está abierto
load_misc_binary() establece bprm->have_execfd tan pronto como detecta la bandera 'O' (o 'C'). Esto ocurre mucho antes de abrir el intérprete. Si esa operación de apertura falla, la flag permanece establecida en bprm. Dado que binfmt_misc se encuentra al principio de la lista de formatos, un fallo en la apertura del intérprete que devuelve -ENOEXEC hace que la búsqueda continúe con un formato posterior. Esto significa que ejecuta el archivo binario coincidente directamente sin haber preparado previamente (staged) un intérprete. Por lo tanto, bprm->executable es NULL mientras have_execfd indica falsamente que hay un descriptor de archivo presente.
En consecuencia, begin_new_exec() desreferencia el executable ausente:
would_dump(bprm, bprm->executable);
lo cual provoca una desreferenciación a NULL (NULL deref). De no haber sido así, la transferencia posterior en la misma función habría fallado igualmente. FD_ADD(0, bprm->executable) rechaza un archivo NULL devolviendo -ENOMEM. Ambos puntos están más allá del punto de no retorno, por lo que la ejecución (exec) no puede deshacerse bajo ninguna circunstancia.
Esto puede ser alcanzado por usuarios sin privilegios ya que binfmt_misc se puede montar en espacios de nombres de usuario (user namespaces). Por tanto, un usuario puede registrar una entrada 'O' cuyo intérprete reside en un montaje FUSE, hacer que el servidor FUSE falle la apertura con -ENOEXEC y ejecutar un archivo ELF nativo que coincida con dicha entrada.
have_execfd solo tiene significado junto al executable que describe, el cual no se establece hasta que el intérprete ha sido abierto y preparado (staged). Por lo tanto, establezcámoslo allí, junto a execfd_creds, que ya está establecido en ese momento. Un fallo de apertura ahora deja esta flag despejada, por lo que el formato alternativo deriva las credenciales del binario y no emite AT_EXECFD, tal como ocurriría para cualquier ejecución nativa (exec). La reescritura de argv que realiza load_misc_binary() antes de la apertura aún no se deshace. Esto significa que el binario ve la ruta del intérprete en argv[0] y su propia ruta en argv[1], pero esto data de antes de este cambio y solo llegó a ser observable una vez que la ejecución dejó de fallar (faulting).
If you want to get best quality of vulnerability data, you may have to visit VulDB.