Una vulnerabilidad en Flatpak permitía evitar el modo de aislamiento
Simon McVittie dio a conocer hace poco que identificó una vulnerabilidad (CVE-2021-21261) que permite evitar el aislamiento del espacio aislado y ejecutar código arbitrario en el entorno del sistema host en la utilidad de despliegue y administración de paquetes «Flatpak».
La vulnerabilidad está presente en el servicio D-Bus flatpak-portal (flatpak-portal también conocido por su nombre de servicio D-Bus org.freedesktop.portal.Flatpak), que proporciona el lanzamiento de «portales» que se utilizan para organizar el acceso a los recursos fuera del contenedor.
Sobre el fallo
Y es que la vulnerabilidad mencionada como tal no lo es, ya que se debe a que el funcionamiento del servicio «flatpak-portal» permite que las aplicaciones de espacio aislado inicien su propio proceso secundario en un nuevo entorno de espacio aislado, al que se aplican las mismas configuraciones de aislamiento o más fuertes (por ejemplo, para manejar contenido que no es de confianza).
La vulnerabilidad es aprovechada, ya que pasa variables de entorno específicas del proceso que llama al servicio a controladores que no están aislados del sistema principal (por ejemplo, ejecutando el comando «flatpak run«). Una aplicación maliciosa puede exponer variables de entorno que afectan la ejecución de flatpak y ejecutar cualquier código en el lado del host.
El servicio flatpak-session-help (org.freedesktop.Flatpakal que accede flatpak-spawn –host) está destinado a brindar a las aplicaciones marcadas especialmente la capacidad de ejecutar código arbitrario en el sistema host, por lo que no es una vulnerabilidad que también confíe en las variables de entorno que se le proporcionan.
Otorgar acceso al servicio org.freedesktop.Flatpak indica que una aplicación es confiable y puede ejecutar legítimamente código arbitrario fuera de la zona de pruebas. Por ejemplo, el entorno de desarrollo integrado de GNOME Builder se marca como de confianza de esta forma.
El servicio D-Bus del portal Flatpak permite que las aplicaciones en un sandbox de Flatpak lancen sus propios subprocesos en una nueva instancia de sandbox, ya sea con la misma configuración de seguridad que la persona que llama o con una seguridad más restrictiva ajustes.
Uno ejemplo de esto, es que se menciona que en navegadores web empaquetados con Flatpak como Chromium, para iniciar subprocesos que procesarán contenido web que no es de confianza y dar a esos subprocesos una caja de arena más restrictiva que el propio navegador.
En las versiones vulnerables, el servicio del portal Flatpak pasa las variables de entorno especificadas por la persona que llama a los procesos que no están en el espacio aislado en el sistema host y, en particular, al comando flatpak run que se utiliza para lanzar la nueva instancia del espacio aislado.
Una aplicación Flatpak maliciosa o comprometida podría establecer variables de entorno en las que confía el comando flatpak run y usarlas para ejecutar código arbitrario que no se encuentra en una sandbox.
Cabe recordar que muchos desarrolladores de flatpak desactivan el modo de aislamiento o dejan acceso completo al directorio de inicio.
Por ejemplo, los paquetes GIMP, VSCodium, PyCharm, Octave, Inkscape, Audacity y VLC vienen con un modo de aislamiento limitado. Si los paquetes con acceso al directorio de inicio se ven comprometidos, a pesar de la presencia de la etiqueta «sandboxed» en la descripción del paquete, un atacante necesita modificar el archivo ~/.bashrc para ejecutar su código.
Un tema aparte es el control sobre los cambios en los paquetes y la confianza en los creadores de paquetes, que a menudo no están asociados con el proyecto principal o las distribuciones.
Solución
Se menciona que el problema se solucionó en las versiones 1.10.0 y 1.8.5 de Flatpak, pero que más tarde apareció un cambio regresivo en la revisión que provocó problemas de compilación en los sistemas con el respaldo de bubblewrap configurado con la bandera setuid.
Posterior a ello la regresión mencionada se corrigió en la versión 1.10.1 (mientras que la actualización para la rama 1.8.x aún no está disponible).
Finalmente si estás interesado en conocer más al respecto sobre el reporte de la vulnerabilidad, puedes consultar los detalles en el siguiente enlace.