Vulnerabilidades en snapd y Rust Coreutils que permiten obtener privilegios de root en Ubuntu

La empresa Qualys ha descubierto una vulnerabilidad (CVE-2026-3888) en la forma en que interactúan snap-confine y systemd-tmpfiles en Ubuntu, lo que permite a un usuario sin privilegios obtener acceso root al sistema. El problema se manifiesta en Ubuntu en la configuración predeterminada a partir de la versión 24.04. En Ubuntu 16.04-22.04, la vulnerabilidad puede ser explotada en configuraciones no estándar que imitan el comportamiento de versiones más recientes de la distribución. En Ubuntu, la solución está disponible en la actualización del paquete snapd lanzada ayer. En snapd, el problema se ha corregido en la actualización 2.75.

La vulnerabilidad surge de la interacción incorrecta entre las utilidades snap-confine y systemd-tmpfiles, que se ejecutan con privilegios elevados. La utilidad snap-confine crea un entorno de sandbox para la ejecución de aplicaciones snap, mientras que systemd-tmpfiles realiza la limpieza automática de archivos y directorios temporales. Por defecto, la utilidad systemd-tmpfiles está configurada para eliminar todos los archivos y directorios antiguos en /tmp, lo que puede ser utilizado por un atacante para sustituir el directorio /tmp/.snap en el momento posterior a su eliminación por systemd-tmpfiles, pero antes de ser recreado por snap-confine.

El ataque consiste en esperar a que se inicie el proceso de limpieza de archivos temporales, sustituir el directorio /tmp/.snap después de su eliminación y colocar una copia modificada de las bibliotecas en /tmp/.snap/usr/lib/x86_64-linux-gnu. El atacante puede necesitar varios días de espera hasta que se inicie systemd-tmpfiles, ya que en Ubuntu 24.04 el proceso de limpieza se ejecuta cada 10 días, y en versiones más recientes, cada 30 días. Después de sustituir el directorio, el atacante logra inicializar un nuevo entorno de sandbox con snap-confine.

Durante la formación del contenido del entorno de sandbox en el directorio temporal /tmp/.snap, el atacante espera el momento adecuado y renombra /tmp/.snap/usr/lib/x86_64-linux-gnu.exchange a /tmp/.snap/usr/lib/x86_64-linux-gnu, sustituyendo así las bibliotecas y asegurando su montaje bind con privilegios de root. De esta forma, el atacante obtiene control sobre las bibliotecas compartidas y el cargador ld.so que se ejecutan en el entorno de sandbox de snap, pudiendo lograr la ejecución de código arbitrario con privilegios de root a través del lanzamiento de cualquier programa suid que utilice enlazado dinámico.

Teniendo acceso root en un entorno sandbox aislado a través de AppArmor y un filtro de llamadas al sistema basado en seccomp, un atacante puede copiar /bin/bash en el directorio /var/snap/$SNAP/common/ y establecerle permisos "04755" (suid root). A pesar de que los permisos se cambian dentro del entorno sandbox, el archivo con los permisos modificados también está disponible en el sistema principal, por lo que para obtener acceso root completo, basta con ejecutar /var/snap//common/bash como un usuario no privilegiado desde el entorno del sistema nativo.

Se identificó además una vulnerabilidad en el conjunto de herramientas uutils coreutils (Rust Coreutils), análogo al paquete GNU Coreutils, escrito en Rust. La vulnerabilidad permite a un usuario no privilegiado obtener permisos de root en el sistema. El problema se descubrió durante la revisión de cambios en Ubuntu 25.10 y se solucionó de manera temporal antes del lanzamiento de Ubuntu 25.10 a través de la entrega de /usr/bin/gnurm en lugar de uutils rm. En el paquete uutils, el problema se corrigió en la versión uutils coreutils 0.3.0, sin mención en la lista de cambios sobre la corrección de la vulnerabilidad (se indicó que en rm, du, chmod y chgrp se implementó un método seguro para evitar rutas).

El problema es causado por una condición de carrera en la utilidad "rm", que permite a un usuario local sustituir el contenido de un directorio por un enlace simbólico durante la eliminación de un archivo controlado por el usuario con el proceso "rm" con permisos de root. Entre otras cosas, la vulnerabilidad puede ser explotada mediante la ejecución diaria de un script de cron /etc/cron.daily/apport, que se ejecuta con permisos de root y elimina recursivamente el contenido del directorio /var/crash, accesible para escritura por todos los usuarios del sistema.

Al eliminar directorios de forma recursiva, la utilidad rm primero verifica todos los directorios y luego los elimina secuencialmente en orden inverso, llamando a la función rmdir(). Si se logra sustituir el directorio padre por un enlace simbólico justo después de verificar ese directorio, pero antes de verificar los directorios hijos dentro de él, la operación resultará en la eliminación del directorio al que apunta el enlace simbólico. De este modo, se puede lograr no solo la eliminación de cualquier archivo en el sistema, sino también la elevación de privilegios mediante la eliminación del directorio /tmp/snap-private-tmp/$SNAP/tmp/.snap para sustituir el contenido del entorno sandbox del paquete snap (el método para obtener root es similar a la primera vulnerabilidad).

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster