Restringir userfaultfd

Riesgo bajo Marcado por defecto en IbexWall Catálogo revisado: 2026-11-05

Un programa normal ya no puede usar el lado del kernel de esta interfaz, que atacantes han usado para cronometrar sus movimientos con precisión. Los programas que gestionan su propia memoria en espacio de usuario siguen funcionando.

Por qué importa

La llamada de sistema userfaultfd deja que un programa atienda fallos de página por su cuenta. Atacantes la han usado para pausar el kernel en un momento exacto, ensanchando una ventana de tiempo pequeña lo suficiente para ganar una carrera en un fallo como un use-after-free. Quitar la forma kernel de esta llamada a los usuarios normales dificulta muchas de esas explotaciones.

Cómo funciona

Fija vm.unprivileged_userfaultfd en 0. Según la documentación del kernel, los usuarios sin CAP_SYS_PTRACE solo pueden usar userfaultfd para fallos que ocurren en modo usuario, pasando la opción UFFD_USER_MODE_ONLY. El acceso por /dev/userfaultfd se puede conceder aparte.

Quién debería usarlo

Vale para casi cualquier escritorio y servidor. Revísalo si usas migración en caliente de máquinas virtuales, herramientas de checkpoint y restore, u otro software construido sobre userfaultfd.

Qué puedes notar

Casi nunca se nota. El software que necesita el userfaultfd completo como usuario normal puede fallar con un error de permisos hasta que reciba /dev/userfaultfd o se ejecute con más derechos.

Compruébalo en tu equipo

Lee el valor actual:

sysctl vm.unprivileged_userfaultfd

Aplícalo a mano

Establécelo ahora (hasta el próximo reinicio):

sudo sysctl -w vm.unprivileged_userfaultfd=0

Consérvalo tras los reinicios, en un archivo tuyo:

sudo tee /etc/sysctl.d/90-kernel-userfaultfd.conf <<'EOF'
vm.unprivileged_userfaultfd = 0
EOF
sudo sysctl --system

Deshazlo

Elimina el archivo y reinicia, o vuelve a poner el valor anterior con sysctl -w.

Ajustes relacionados

Fuentes

Linux Hardening Guide (madaidans)
2.2.1