Lançamento do sistema de pacotes autossuficientes Flatpak 1.12.0

Foi publicada uma nova ramificação estável do kit de ferramentas Flatpak 1.12, que fornece um sistema para construir pacotes independentes que não estão vinculados a distribuições Linux específicas e são executados em um contêiner especial que isola o aplicativo do resto do sistema. O suporte para execução de pacotes Flatpak é fornecido para Arch Linux, CentOS, Debian, Fedora, Gentoo, Mageia, Linux Mint, Alt Linux e Ubuntu. Os pacotes Flatpak estão incluídos no repositório Fedora e são suportados pelo gerenciador de aplicativos nativo do GNOME.

Principais inovações no ramo Flatpak 1.12:

  • Gerenciamento aprimorado de ambientes sandbox aninhados usados ​​no pacote flatpak com o cliente do serviço de entrega de jogos Steam. Em sandboxes aninhadas, é permitida a criação de hierarquias separadas dos diretórios /usr e /app, que são usadas no Steam para iniciar jogos em um contêiner separado com sua própria partição /usr, isolada do ambiente com o cliente Steam.
  • Todas as instâncias de pacote com o mesmo identificador de aplicativo (app-ID) compartilham os diretórios /tmp e $XDG_RUNTIME_DIR. Opcionalmente, usando o sinalizador “--allow=per-app-dev-shm”, você pode habilitar o uso do diretório compartilhado /dev/shm.
  • Suporte aprimorado para aplicativos Text User Interface (TUI), como gdb.
  • Uma implementação mais rápida do comando “ostree prune” foi adicionada ao utilitário build-update-repo, otimizado para trabalhar com repositórios no modo de arquivo.
  • Foi corrigida a vulnerabilidade CVE-2021-41133 na implementação do mecanismo do portal, associada à falta de bloqueio de novas chamadas de sistema relacionadas à montagem de partições nas regras seccomp. A vulnerabilidade permitiu que o aplicativo criasse uma sandbox aninhada para contornar os mecanismos de verificação do “portal” usados ​​para organizar o acesso a recursos fora do contêiner.

    Como resultado, um invasor, ao realizar chamadas de sistema relacionadas à montagem, poderia ignorar o mecanismo de isolamento da sandbox e obter acesso total ao conteúdo do ambiente host. A vulnerabilidade só pode ser explorada em pacotes que fornecem aplicativos com acesso direto aos soquetes AF_UNIX, como aqueles usados ​​por Wayland, Pipewire e pipewire-pulse. Na versão 1.12.0, a vulnerabilidade não foi completamente eliminada, então a atualização 1.12.1 foi lançada logo em seguida.

Lembramos que o Flatpak permite que os desenvolvedores de aplicativos simplifiquem a distribuição de seus programas que não estão incluídos nos repositórios de distribuição padrão, preparando um contêiner universal sem criar assemblies separados para cada distribuição. Para usuários preocupados com a segurança, o Flatpak permite executar um aplicativo questionável em um contêiner, fornecendo acesso apenas às funções de rede e aos arquivos do usuário associados ao aplicativo. Para usuários interessados ​​em novos produtos, o Flatpak permite instalar os testes mais recentes e versões estáveis ​​de aplicativos sem a necessidade de fazer alterações no sistema. Por exemplo, os pacotes Flatpak são criados para LibreOffice, Midori, GIMP, Inkscape, Kdenlive, Steam, 0 AD, Visual Studio Code, VLC, Slack, Skype, Telegram Desktop, Android Studio, etc.

Para reduzir o tamanho do pacote, ele inclui apenas dependências específicas do aplicativo, e as bibliotecas básicas de sistema e gráficos (bibliotecas GTK, Qt, GNOME e KDE, etc.) são projetadas como ambientes de tempo de execução padrão de plug-in. A principal diferença entre Flatpak e Snap é que o Snap usa os componentes do ambiente principal do sistema e o isolamento baseado na filtragem de chamadas do sistema, enquanto o Flatpak cria um contêiner separado do sistema e opera com grandes conjuntos de tempo de execução, fornecendo não pacotes como dependências, mas padrão alguns ambientes de sistema (por exemplo, todas as bibliotecas necessárias para a operação de programas GNOME ou KDE).

Além do ambiente de sistema padrão (runtime), instalado através de um repositório especial, são fornecidas dependências adicionais (bundle) necessárias para o funcionamento da aplicação. No total, runtime e bundle formam o preenchimento do container, apesar do runtime ser instalado separadamente e vinculado a vários containers ao mesmo tempo, o que permite evitar a duplicação de arquivos de sistema comuns aos containers. Um sistema pode ter vários tempos de execução diferentes instalados (GNOME, KDE) ou várias versões do mesmo tempo de execução (GNOME 3.40, GNOME 3.42). Um contêiner com um aplicativo como dependência usa uma ligação apenas para um tempo de execução específico, sem levar em consideração os pacotes individuais que compõem o tempo de execução. Todos os elementos ausentes são empacotados diretamente com o aplicativo. Quando um contêiner é formado, o conteúdo do tempo de execução é montado como a partição /usr e o pacote configurável é montado no diretório /app.

O tempo de execução e os contêineres do aplicativo são construídos usando a tecnologia OSTree, na qual a imagem é atualizada atomicamente a partir de um repositório semelhante ao Git, o que permite que métodos de controle de versão sejam aplicados aos componentes da distribuição (por exemplo, você pode reverter rapidamente o sistema para um estado anterior). Os pacotes RPM são traduzidos para o repositório OSTree usando uma camada especial rpm-ostree. A instalação e atualização separadas de pacotes dentro do ambiente de trabalho não são suportadas; o sistema é atualizado não no nível de componentes individuais, mas como um todo, alterando atomicamente seu estado. Fornece ferramentas para aplicar atualizações de forma incremental, eliminando a necessidade de substituir completamente a imagem a cada atualização.

O ambiente isolado gerado é totalmente independente da distribuição utilizada e, com as devidas configurações do pacote, não possui acesso aos arquivos e processos do usuário ou do sistema principal, não podendo acessar diretamente o equipamento, com exceção da saída via DRI, e chamadas para o subsistema de rede. A saída gráfica e a organização da entrada são implementadas usando o protocolo Wayland ou via encaminhamento de soquete X11. A interação com o ambiente externo é baseada no sistema de mensagens DBus e em uma API especial de Portais.

Para isolamento, são utilizadas a camada Bubblewrap e tecnologias tradicionais de virtualização de containers Linux, baseadas no uso de cgroups, namespaces, Seccomp e SELinux. PulseAudio é usado para emitir som. Nesse caso, o isolamento pode ser desabilitado, que é usado pelos desenvolvedores de muitos pacotes populares para obter acesso total ao sistema de arquivos e a todos os dispositivos do sistema. Por exemplo, GIMP, VSCodium, PyCharm, Octave, Inkscape, Audacity e VLC vêm com um modo de isolamento limitado que deixa acesso total ao diretório inicial.

Se pacotes com acesso ao diretório inicial forem comprometidos, apesar da presença do rótulo “sandboxed” na descrição do pacote, o invasor só precisa alterar o arquivo ~/.bashrc para executar seu código. Uma questão separada é o controle das alterações nos pacotes e a confiança nos construtores de pacotes, que muitas vezes não estão associados ao projeto principal ou às distribuições.

Fonte: opennet.ru

Adicionar um comentário