Lançamento do sistema de pacotes autossuficientes Flatpak 1.12.0

Foi publicada uma nova versão estável da ferramenta Flatpak 1.12, que oferece um sistema para criar pacotes autossuficientes, não vinculados a distribuições específicas do Linux e executados em um container especial que isola o aplicativo do restante do sistema. O suporte para execução de pacotes Flatpak está disponível 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 no aplicativo de gerenciamento de software GNOME.

Principais novidades na versão Flatpak 1.12:

  • Melhorou a gestão de ambientes sandbox aninhados usados no pacote flatpak com o cliente para o serviço de entrega de jogos Steam. Em sandboxes aninhados, é permitido criar hierarquias de diretórios distintas /usr e /app, que são utilizadas no Steam para executar jogos em um container separado com sua própria seção /usr, isolada do ambiente do cliente Steam.
  • Em todas as instâncias de pacotes com o mesmo identificador de aplicativo (app-ID), foi assegurada a compartilhamento dos diretórios /tmp e $XDG_RUNTIME_DIR. Opcionalmente, usando a flag "—allow=per-app-dev-shm", é possível habilitar o uso de um diretório compartilhado /dev/shm.
  • Melhorado o suporte a aplicativos com interface de usuário de texto (TUI), como gdb.
  • Na ferramenta build-update-repo, foi adicionada uma implementação mais rápida do comando "ostree prune", otimizada para trabalhar com repositórios em modo de arquivamento.
  • Foi corrigida a vulnerabilidade CVE-2021-41133 na implementação do mecanismo de portais, relacionada à falta de bloqueios para novas chamadas de sistema nos regulamentos seccomp que envolvem o montante de partições. A vulnerabilidade permitia que o aplicativo criasse um sandbox aninhado para contornar os mecanismos de verificação dos "portais", que são usados para gerenciar o acesso a recursos fora do container.

    Assim, um atacante poderia, ao executar chamadas de sistema relacionadas ao montagem, contornar o mecanismo de isolamento sandbox e obter acesso completo ao conteúdo do ambiente host. A exploração da vulnerabilidade é possível apenas em pacotes que fornecem acesso direto aos sockets AF_UNIX, que são, por exemplo, utilizados no Wayland, Pipewire e pipewire-pulse. Na versão 1.12.0, a vulnerabilidade não foi totalmente corrigida, portanto, uma atualização 1.12.1 foi lançada imediatamente.

Lembramos que o Flatpak oferece aos desenvolvedores de aplicativos a oportunidade de simplificar a distribuição de seus programas que não estão nos repositórios padrão das distribuições, preparando um único contêiner universal sem a necessidade de criar compilações separadas para cada distribuição. Para os usuários preocupados com a segurança, o Flatpak permite executar um aplicativo duvidoso em um contêiner, concedendo acesso apenas às funcionalidades de rede e arquivos do usuário relacionados ao aplicativo. Para os usuários interessados em novidades, o Flatpak permite instalar as versões mais recentes de teste e estáveis dos aplicativos sem a necessidade de fazer alterações no sistema. Por exemplo, pacotes Flatpak são empacotados para LibreOffice, Midori, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Skype, Telegram Desktop, Android Studio, etc.

Para reduzir o tamanho do pacote, ele inclui apenas as dependências específicas do aplicativo, enquanto as bibliotecas de sistema e gráficas básicas (GTK, Qt, bibliotecas GNOME e KDE, etc.) estão organizadas em forma de ambientes de execução padrão plugáveis. A principal diferença entre Flatpak e Snap é que o Snap utiliza componentes do ambiente do sistema principal e isolamento baseado na filtragem de chamadas do sistema, enquanto o Flatpak cria um contêiner separado do sistema e opera grandes conjuntos de runtime, fornecendo como dependências não pacotes, mas ambientes de sistema padrão (por exemplo, todas as bibliotecas necessárias para o funcionamento de aplicativos GNOME ou KDE).

Além do ambiente de sistema típico (runtime), que é instalado através de um repositório especial, são fornecidas dependências adicionais (bundle) necessárias para o funcionamento do aplicativo. Juntas, o runtime e o bundle formam o conteúdo do contêiner, sendo que o runtime é instalado separadamente e associado a vários contêineres, evitando a duplicação de arquivos de sistema comuns aos contêineres. Vários runtimes diferentes (GNOME, KDE) ou várias versões de um mesmo runtime (GNOME 3.40, GNOME 3.42) podem ser instalados em um único sistema. O contêiner com o aplicativo como dependência utiliza o vínculo apenas a um runtime específico, desconsiderando os pacotes individuais que compõem o runtime. Todos os elementos ausentes são empacotados diretamente junto com o aplicativo. Ao formar o contêiner, o conteúdo do runtime é montado como a partição /usr, enquanto o bundle é montado no diretório /app.

O conteúdo do runtime e dos contêineres de aplicativos é formado utilizando a tecnologia OSTree, onde a imagem é atualizada de forma atômica a partir de um repositório semelhante ao Git, permitindo a aplicação de métodos de controle de versão aos componentes da distribuição (por exemplo, é possível reverter rapidamente o sistema para um estado anterior). Pacotes RPM são traduzidos para o repositório OSTree através de uma camada especial chamada 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 em nível de componentes individuais, mas de forma integral, alterando seu estado de forma atômica. Ferramentas são fornecidas para a aplicação incremental de atualizações, evitando a necessidade de substituição completa da imagem a cada atualização.

O ambiente isolado formado é completamente independente do sistema de distribuição utilizado e, sob as devidas configurações do pacote, não tem acesso aos arquivos e processos do usuário ou do sistema principal, não podendo acessar diretamente o hardware, exceto pela saída via DRI, e pelas chamadas ao subsistema de rede. A saída gráfica e a organização da entrada são implementadas por meio do protocolo Wayland ou através do redirecionamento do socket X11. A interação com o ambiente externo é baseada em um sistema de troca de mensagens DBus e em uma API especial chamada Portals.

Para isolamento, é utilizada uma camada de Bubblewrap e tecnologias tradicionais de virtualização de contêineres do Linux, baseadas no uso de cgroups, namespaces, Seccomp e SELinux. Para a saída de som, é utilizado o PulseAudio. Nesse caso, o isolamento pode ser desativado, o que é explorado por desenvolvedores de muitos pacotes populares para obter acesso total ao sistema de arquivos e a todos os dispositivos. Por exemplo, pacotes GIMP, VSCodium, PyCharm, Octave, Inkscape, Audacity e VLC são fornecidos com um modo de isolamento restrito que deixa acesso total ao diretório pessoal.

Em caso de comprometimento de pacotes com acesso ao diretório pessoal, apesar de haver a etiqueta "sandboxed" na descrição do pacote, um invasor pode executar seu código simplesmente alterando o arquivo ~/ .bashrc. Uma questão separada é o controle sobre as mudanças nos pacotes e a confiança nos empacotadores, que muitas vezes não estão ligados ao projeto ou distribuições principais.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster