Se ha publicado una nueva rama estable de la herramienta Flatpak 1.12, que proporciona un sistema para construir paquetes autónomos, no vinculados a distribuciones específicas de Linux y ejecutados en un contenedor especial que aísla la aplicación del resto del sistema. La ejecución de paquetes Flatpak es compatible con Arch Linux, CentOS, Debian, Fedora, Gentoo, Mageia, Linux Mint, Alt Linux y Ubuntu. Los paquetes Flatpak están incluidos en el repositorio de Fedora y son compatibles con el programa de gestión de aplicaciones GNOME.
Novedades clave en la rama Flatpak 1.12:
- Se ha mejorado la gestión de sandbox anidados utilizados dentro del paquete flatpak con el cliente del servicio de entrega de juegos Steam. En los sandbox anidados se permite la creación de jerarquías de directorios separados /usr y /app, que se utilizan en Steam para ejecutar juegos en un contenedor separado con su propia partición /usr, aislada del entorno con el cliente Steam.
- En todas las instancias de paquetes con el mismo identificador de aplicación (app-ID) se garantiza el uso compartido de los directorios /tmp y $XDG_RUNTIME_DIR. Opcionalmente, mediante la bandera “—allow=per-app-dev-shm” se puede habilitar el uso del directorio compartido /dev/shm.
- Se ha mejorado el soporte de aplicaciones con interfaz de usuario de texto (TUI), como gdb.
- A la utilidad build-update-repo se le ha añadido una implementación más rápida del comando “ostree prune”, optimizada para trabajar con repositorios que están en modo archivo.
- Se ha solucionado la vulnerabilidad CVE-2021-41133 en la implementación del mecanismo de portales, relacionada con la falta de bloqueo de nuevas llamadas al sistema en las reglas seccomp en relación con el montaje de particiones. La vulnerabilidad permitía a la aplicación crear un sandbox anidado para eludir los mecanismos de verificación de los “portales”, que se utilizan para organizar el acceso a recursos fuera del contenedor.
Como resultado, un atacante a través de la ejecución de llamadas al sistema relacionadas con el montaje podría eludir el mecanismo de aislamiento sandbox y obtener acceso completo al contenido del entorno host. La explotación de la vulnerabilidad es posible solo en paquetes que brindan a las aplicaciones acceso directo a sockets AF_UNIX, que, por ejemplo, se utilizan en Wayland, Pipewire y pipewire-pulse. En la versión 1.12.0, la vulnerabilidad no se solucionó por completo, por lo que se lanzó rápidamente una actualización 1.12.1.
Recordemos que Flatpak permite a los desarrolladores de aplicaciones simplificar la distribución de sus programas que no están en los repositorios estándar de las distribuciones, mediante la preparación de un único contenedor universal sin necesidad de crear compilaciones individuales para cada distribución. A los usuarios preocupados por la seguridad, Flatpak les permite ejecutar aplicaciones dudosas en un contenedor, brindando acceso solo a funciones de red y a los archivos del usuario relacionados con la aplicación. A los usuarios interesados en las novedades, Flatpak les permite instalar las versiones de prueba y estables más recientes de aplicaciones sin necesidad de realizar cambios en el sistema. Por ejemplo, los paquetes Flatpak se compilan para LibreOffice, Midori, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Skype, Telegram Desktop, Android Studio, etc.
Para reducir el tamaño del paquete, incluye solo las dependencias específicas de la aplicación, mientras que las bibliotecas gráficas y del sistema básicas (GTK, Qt, bibliotecas GNOME y KDE, etc.) se estructuran como entornos de ejecución modulares. La principal diferencia entre Flatpak y Snap es que Snap utiliza componentes del entorno del sistema principal y aislamiento basado en la filtración de llamadas al sistema, mientras que Flatpak crea un contenedor separado del sistema y opera con grandes conjuntos de runtime, proporcionando como dependencias no paquetes, sino entornos de sistema genéricos (por ejemplo, todas las bibliotecas necesarias para el funcionamiento de programas GNOME o KDE).
Además del entorno de sistema estándar (runtime), que se instala a través de un repositorio especial, se proporcionan dependencias adicionales (bundle) necesarias para el funcionamiento de la aplicación. En total, el runtime y el bundle conforman el contenido del contenedor, dado que el runtime se instala por separado y se vincula a varios contenedores a la vez, lo que evita la duplicación de archivos sistemáticos comunes a los contenedores. En un sistema pueden instalarse varios runtimes diferentes (GNOME, KDE) o varias versiones de un mismo runtime (GNOME 3.40, GNOME 3.42). El contenedor de la aplicación como dependencia utiliza la vinculación solo a un runtime específico, sin tener en cuenta los paquetes individuales que componen el runtime. Todos los elementos faltantes se empaquetan directamente junto con la aplicación. Al formar el contenedor, el contenido del runtime se monta como la sección /usr, y el bundle se monta en el directorio /app.
El contenido del runtime y de los contenedores de aplicaciones se forma utilizando la tecnología OSTree, en la cual la imagen se actualiza de manera atómica desde un repositorio similar a Git, lo que permite aplicar métodos de control de versiones a los componentes de la distribución (por ejemplo, se puede revertir rápidamente el sistema a un estado anterior). Los paquetes RPM se traducen al repositorio OSTree mediante una capa especial llamada rpm-ostree. No se admite la instalación y actualización de paquetes por separado dentro del entorno de trabajo, el sistema se actualiza no a nivel de componentes individuales, sino en su totalidad, cambiando su estado de manera atómica. Se proporcionan herramientas para la aplicación incremental de actualizaciones, eliminando la necesidad de reemplazar toda la imagen en cada actualización.
El entorno aislado que se forma es completamente independiente de la distribución utilizada y, con la configuración adecuada del paquete, no tiene acceso a los archivos y procesos del usuario o del sistema principal, ni puede acceder directamente al hardware, salvo la salida a través de DRI y los accesos a la subsistema de red. La salida gráfica y la organización de la entrada se realizan mediante el protocolo Wayland o a través del reenvío del socket X11. La interacción con el entorno externo se basa en el sistema de mensajería DBus y una API especial llamada Portals.
Para la aislamiento se utiliza una capa de Bubblewrap y tecnologías tradicionales de virtualización de contenedores en Linux, basadas en el uso de cgroups, espacios de nombres (namespaces), Seccomp y SELinux. Para la salida de audio se aplica PulseAudio. Sin embargo, la aislamiento puede ser desactivada, lo cual es aprovechado por los desarrolladores de muchos paquetes populares para obtener acceso completo al sistema de archivos y todos los dispositivos del sistema. Por ejemplo, los paquetes GIMP, VSCodium, PyCharm, Octave, Inkscape, Audacity y VLC se suministran con un modo de aislamiento limitado que deja acceso completo al directorio personal.
En caso de comprometer paquetes con acceso al directorio personal, a pesar de que la descripción del paquete incluya la etiqueta «sandboxed», para que el atacante ejecute su código, es suficiente con modificar el archivo ~ / .bashrc. Un tema aparte es el control sobre las modificaciones en los paquetes y la confianza en los compiladores de paquetes, que a menudo no están relacionados con el proyecto principal o las distribuciones.
Fuente: opennet.ru
