Vulnerabilidades de raíz local en el kit de herramientas de administración de paquetes Snap

Qualys ha identificado dos vulnerabilidades (CVE-2021-44731, CVE-2021-44730) en la utilidad snap-confine, suministrada con el indicador raíz SUID y llamada por el proceso snapd para crear un entorno ejecutable para aplicaciones entregadas en paquetes independientes. en formato instantáneo. Las vulnerabilidades permiten a un usuario local sin privilegios ejecutar código con privilegios de root en el sistema. Los problemas se resuelven en la actualización del paquete snapd de hoy para Ubuntu 21.10, 20.04 y 18.04.

La primera vulnerabilidad (CVE-2021-44730) permite un ataque mediante la 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 archivos ejecutables de los programas auxiliares 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 le permite crear un vínculo físico para configurar el complemento en su directorio y colocar sus propias versiones del complemento. update-ns y snap-utilities en este directorio descarte-ns. Después de ejecutarse a través de un enlace físico, snap-confine con derechos de root iniciará los archivos snap-update-ns y snap-discard-ns desde el directorio actual, sustituidos por el atacante.

La segunda vulnerabilidad es causada por una condición de carrera y puede explotarse en la configuración predeterminada de Ubuntu Desktop. Para que el exploit funcione correctamente en Ubuntu Server, debe seleccionar uno de los paquetes de la sección "Instantáneas de servidor destacadas" al realizar la instalación. La condición de carrera es evidente 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 utiliza uno existente para vincular directorios de montaje para un paquete instantáneo en él.

Dado que el nombre del directorio temporal es predecible, un atacante puede reemplazar su contenido con un enlace simbólico después de verificar el propietario, pero antes de realizar la llamada 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 una llamada a mount() seguirá el enlace simbólico y montará el directorio en el ajustar 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, organizar el montaje de su directorio /etc en el espacio de nombres de el paquete snap para organizar la carga de su biblioteca con derechos de root reemplazando /etc/ld.so.preload.

Cabe señalar que crear un exploit resultó ser una tarea no trivial, ya que la utilidad snap-confine está escrita en Go utilizando técnicas de programación seguras, tiene protección basada en perfiles de AppArmor, filtra llamadas al sistema según el mecanismo seccomp y utiliza el espacio de nombres de montaje para el aislamiento. Sin embargo, los investigadores pudieron preparar un exploit funcional para obtener derechos 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.

Fuente: opennet.ru

Añadir un comentario