Se ha descubierto una quinta vulnerabilidad crítica en el núcleo de Linux (1, 2, 3) en las últimas dos semanas, que permite a un usuario elevar sus privilegios en el sistema. Se han publicado dos exploits funcionales: sshkeysign_pwn permite a un usuario sin privilegios leer el contenido de las claves SSH privadas del host en /etc/ssh/ssh_host_*_key, y chage_pwn permite leer el contenido del archivo /etc/shadow con los hashes de las contraseñas de los usuarios.
La divulgación de la vulnerabilidad no estaba programada, pero uno de los investigadores de seguridad pudo identificar el problema basado en el parche propuesto para el núcleo, lo que permite leer archivos accesibles solo al usuario root, como /etc/shadow. En la modificación añadida al núcleo se ajustó la lógica de uso de la función get_dumpable() en ptrace para determinar el nivel de acceso en la función ptrace_may_access().
La vulnerabilidad es causada por una condición de carrera que permite el acceso no privilegiado a un descriptor de archivo pidfd después de acceder a un archivo del proceso con sudo root. En el momento entre la apertura del archivo y la eliminación de privilegios en el programa con sudo (por ejemplo, mediante la función setreuid), se produce una situación en la que la aplicación que ejecutó el programa con sudo root puede acceder al archivo abierto en el programa con sudo a través del descriptor pidfd, incluso si los permisos de acceso al archivo no lo permiten.
La ventana para explotar surge porque la función '__ptrace_may_access()' omite la verificación del acceso al archivo, si el campo task->mm se establece en NULL después de ejecutar exit_mm(), pero antes de la llamada a exit_files(). En ese momento, la llamada al sistema pidfd_getfd asume que el identificador de usuario (uid) del proceso que llama corresponde al identificador que tiene acceso al archivo. Cabe destacar que el problema ya fue mencionado en 2020, pero ha permanecido sin resolver.
En el exploit que obtiene el contenido de /etc/shadow, el ataque se reduce a un ciclo repetido mediante el uso de fork+execl de la aplicación /usr/bin/chage con la bandera suid root, que lee el contenido de /etc/shadow. Después de que el proceso se bifurca, se realiza una llamada al sistema pidfd_open y se lleva a cabo un escaneo cíclico de los descriptores pidfd disponibles a través de la llamada al sistema pidfd_getfd y su verificación a través de /proc/self/fd. En el exploit sshkeysign_pwn, se llevan a cabo manipulaciones similares con el programa ssh-keysign con suid root.
Aún no se ha asignado un identificador CVE al problema, no se han publicado actualizaciones del núcleo y paquetes en las distribuciones. En los núcleos 7.0.7, 6.18.30 y 6.12.88, publicados hace unas horas, la vulnerabilidad no ha sido corregida. En el momento de redactar esta noticia, solo se puede usar un parche. Se están discutiendo posibles soluciones para bloquear la vulnerabilidad, como establecer sysctl kernel.yama.ptrace_scope=3 o eliminar la bandera suid root de los archivos ejecutables en el sistema (al menos de las utilidades ssh-keysign y chage, utilizadas en los exploits).
Adición: La vulnerabilidad ha sido asignada con el identificador CVE-2026-46333. Se han formado actualizaciones del núcleo de Linux 7.0.8, 6.18.31, 6.12.89, 6.6.139, 6.1.173, 5.15.207 y 5.10.256 que corrigen la vulnerabilidad. El estado de la corrección de las vulnerabilidades en las distribuciones se puede evaluar en las siguientes páginas: Debian, Ubuntu, SUSE/openSUSE, RHEL, Gentoo, Arch, Fedora.
Fuente: opennet.ru
