Fueron encontradas dos vulnerabilidades en Snap y permitían poder ejecutar código como root
Qualys dio a conocer la noticia de que identifico dos vulnerabilidades (CVE-2021-44731 y CVE-2021-44730) en la utilidad snap-confine, enviada con el indicador root SUID y llamada por el proceso snapd para generar un entorno ejecutable para aplicaciones distribuidas en paquetes snap.
En la publicación de blog se menciona que las vulnerabilidades permiten que un usuario local sin privilegios logre la ejecución del código como root en el sistema.
La primera vulnerabilidad permite un ataque de manipulación de enlaces físicos, pero requiere deshabilitar la protección de enlaces físicos del sistema (estableciendo sysctl fs.protected_hardlinks en 0).
El problema se debe a una verificación incorrecta de la ubicación de los ejecutables de las utilidades snap-update-ns y snap-discard-ns que se ejecutan como root. La ruta a estos archivos se calculó en la función sc_open_snapd_tool() en función de su propia ruta desde /proc/self/exe, lo que permite crear un enlace fijo para confinar en su directorio y colocar sus opciones para snap-update-ns y snap-discard-ns en este directorio. Cuando se inicia desde un enlace físico, snap-confine as root ejecutará los archivos snap-update-ns y snap-discard-ns sustituidos por el atacante desde el directorio actual.
La explotación exitosa de esta vulnerabilidad permite que cualquier usuario sin privilegios obtenga privilegios de root en el host vulnerable. Los investigadores de seguridad de Qualys han podido verificar de forma independiente la vulnerabilidad, desarrollar un exploit y obtener privilegios completos de raíz en las instalaciones predeterminadas de Ubuntu.
Tan pronto como el equipo de investigación de Qualys confirmó la vulnerabilidad, nos involucramos en la divulgación responsable de la vulnerabilidad y nos coordinamos con las distribuciones de proveedores y de código abierto para anunciar esto.recien descubiertovulnerabilidad.
La segunda vulnerabilidad es causada por una condición de carrera y puede explotarse en la configuración predeterminada de escritorio de Ubuntu. Para que el exploit funcione con éxito en Ubuntu Server, debe seleccionar uno de los paquetes de la sección «Snaps de servidor destacadas» durante la instalación.
La condición de carrera se manifiesta en la función setup_private_mount() llamada durante la preparación del espacio de nombres del punto de montaje para el paquete instantáneo. Esta función crea un directorio temporal «/tmp/snap.$SNAP_NAME/tmp» o usa uno existente para vincular y montar directorios para el paquete instantáneo en él.
Dado que el nombre del directorio temporal es predecible, un atacante puede cambiar su contenido a un enlace simbólico después de verificar el propietario, pero antes de llamar al sistema de montaje. Por ejemplo, puede crear un enlace simbólico «/tmp/snap.lxd/tmp» en el directorio /tmp/snap.lxd que apunte a un directorio arbitrario y la llamada mount() seguirá el enlace simbólico y montará el directorio en el espacio de nombres.
De manera similar, puede montar su contenido en /var/lib y, reemplazando /var/lib/snapd/mount/snap.snap-store.user-fstab, organice el montaje de su directorio /etc en el espacio de nombres del paquete snap para cargar su librería desde el acceso raíz reemplazando /etc/ld.so.preload.
Se observa que crear un exploit resultó ser una tarea no trivial, ya que la utilidad snap-confine está escrita utilizando técnicas de programación seguras (snapd está escrito en Go, pero C se usa para snap-confine), tiene protección basada en los perfiles de AppArmor, filtra las llamadas del sistema según el mecanismo seccomp y utiliza un espacio de nombres de montaje para el aislamiento.
Sin embargo, los investigadores pudieron preparar un exploit funcional para obtener acceso de root en el sistema. El código de explotación se publicará unas semanas después de que los usuarios instalen las actualizaciones proporcionadas.
Finalmente, cabe mencionar que los problemas se solucionaron en la actualización del paquete snapd para las versiones de Ubuntu 21.10, 20.04 y 18.04.
Ademas de que para las demás distribuciones que hacen uso de Snap, se ha lanzado Snapd 2.54.3 que, además de los problemas anteriores, corrige otra vulnerabilidad (CVE-2021-4120), que permite, al instalar paquetes de complemento especialmente diseñados, sustituir las reglas arbitrarias de AppArmor y eludir las restricciones de acceso establecidas para el paquete.
Si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.