Encontraron una vulnerabilidad en Snap que permite ejecutar codigo con privilegios root
Hace pocos días Qualys dio a conocer la noticia de que ha identificado una vulnerabilidad grave (ya catalogada bajo CVE-2022-3328) en la utilidad snap-confine, que se envía con el indicador root SUID y el proceso snapd la llama para formar un entorno ejecutable para aplicaciones distribuidas en paquetes formato snap.
Se menciona que la vulnerabilidad permite que un usuario local sin privilegios logre la ejecución del código como root en la configuración predeterminada de Ubuntu.
Curiosamente, la vulnerabilidad en cuestión se introdujo en el proceso de corregir una vulnerabilidad similar de febrero en un snap-confine.
¿Qué impacto tiene CVE-2022-3328?
Qualys detalle en su informe que la vulnerabilidad en snap-confine es causada por una condición de carrera en la función must_mkdir_and_open_with_perms(), agregada para proteger contra la sustitución del directorio /tmp/snap.$SNAP_NAME por un enlace simbólico después de la verificación del propietario, pero antes de la llamada al sistema de montaje se llama para enlazar directorios de montaje en él para un paquete en formato span.
La seguridad agregada fue cambiar el nombre del directorio /tmp/snap.$SNAP_NAME a otro directorio en /tmp con un nombre aleatorio si existe y no es propiedad del usuario root.
Al explotar la operación de cambio de nombre del directorio /tmp/snap.$SNAP_NAME, los investigadores aprovecharon el hecho de que snap-confine también crea un directorio /tmp/snap.rootfs_x para el contenido del paquete snap. mkdtemp() que elige aleatoriamente la parte «x del nombre, pero un paquete llamado «rootfs_x» puede pasar por sc_instance_name_validate (es decir, la idea es tener $SNAP_NAME establecido en «rootfs_x» y luego la operación de cambio de nombre dará como resultado la sobrescritura el directorio /tmp/snap.rootfs_x con el root en snap).
Para lograr el uso simultáneo de /tmp/snap.rootfs_xx y el cambio de nombre de /tmp/snap.$SNAP_NAME, se iniciaron dos instancias de snap-confine.
Tan pronto como la primera instancia creaba /tmp/snap.rootfs_xx el proceso se bloqueaba y se iniciaba una segunda instancia con el nombre de paquete rootfs_x, lo que provocaba que el directorio temporal de la segunda instancia /tmp/snap.$SNAP_NAME se convirtiera en /tmp/snap .rootfs_x (directorio root) de la primera instancia.
Inmediatamente después de realizar el cambio de nombre, la segunda instancia falló y /tmp/snap.rootfs_x se reemplazó con manipulación de condiciones de carrera, como en la explotación de la vulnerabilidad de febrero. Después del cambio, el bloqueo de ejecución se eliminó de la primera instancia y los atacantes obtuvieron control total sobre el directorio raíz instantáneo.
El último paso fue crear un enlace simbólico /tmp/snap.rootfs_x/tmp que fue utilizado por la función sc_bootstrap_mount_namespace() para enlazar y montar el directorio real grabable /tmp a cualquier directorio en el sistema de archivos, ya que la llamada mount() sigue enlaces simbólicos antes del montaje. Dicho montaje está bloqueado por las restricciones de AppArmor, pero para eludir este bloqueo, el exploit utilizó dos vulnerabilidades auxiliares en multipathd.
La explotación exitosa de las tres vulnerabilidades permite que cualquier usuario sin privilegios obtenga privilegios de root en el dispositivo vulnerable. Los investigadores de seguridad de Qualys verificaron la vulnerabilidad, desarrollaron un exploit y obtuvieron privilegios completos de raíz en las instalaciones predeterminadas de Ubuntu.
Tan pronto como la Unidad de Investigación de Amenazas de Qualys confirmó la vulnerabilidad, nos involucramos en la divulgación responsable de la vulnerabilidad y nos coordinamos con los proveedores y las distribuciones de código abierto para anunciar esta vulnerabilidad recién descubierta.
Los investigadores pudieron preparar un exploit funcional que brinda acceso al root en Ubuntu Server 22.04, que, además de la vulnerabilidad de snap-confine, también involucra dos vulnerabilidades en el proceso multipathd (CVE-2022-41974, CVE-2022-41973) relacionado con la omisión de permisos al pasar comandos privilegiados y el manejo inseguro de enlaces simbólicos.
Cabe mencionar que el problema se solucionó en el lanzamiento de snapd 2.57.6, ademas de que se han lanzado actualizaciones de paquetes para todas las ramas compatibles de Ubuntu.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.