Pular para o conteúdo principal
BlogSegurançaLinode Security Digest 7 - 14 de março de 2022

Linode Security Digest 7 - 14 de março de 2022

Linode Security Digest

Esta semana, discutiremos as vulnerabilidades de alta diversidade no kernel do Linux.

Dirty Pipe - Escalada do Privilégio Local Linux

CVE-2022-0847 permite que um usuário não privilegiado do Linux possa sobrescrever qualquer arquivo arbitrário somente leitura. Um usuário poderia aproveitar esta vulnerabilidade injetando código nos processos raiz e aumentar seus privilégios para se tornar um usuário raiz. 

Semelhante à onipresente vulnerabilidade "Vaca Suja", um atacante pode executar a exploração do Dirty Pipe e escrever texto em um arquivo. O que torna o Dirty Pipe uma falha mais fácil de explorar é que um usuário pode escrever texto em qualquer arquivo arbitrário e, em alguns casos, pode facilmente aumentar os privilégios através de binários SUID

Causa Raiz - A vulnerabilidade do tubo sujo é causada por uma variável não-inicializada pipe_buffer.flags. Os tubos são ferramentas usadas para comunicação entre processos, uma extremidade empurra os dados para ela enquanto a outra extremidade pode puxar esses dados. Um compromisso feito por não-inicializar o buffer de tubos tem uma vulnerabilidade de alta severidade. Ao injetar PIPE_BUF_FLAG_CAN_MERGE em uma referência de cache de página, é possível sobrescrever dados no cache de página, simplesmente escrevendo novos dados no pipe preparado de uma maneira especial.

Há algumas advertências quanto a esta vulnerabilidade: 

  • O atacante deve ter lido as permissões para o arquivo
  • A compensação não deve estar em um limite de página 
  • A escrita não pode cruzar os limites de uma página 
  • O arquivo não pode ser redimensionado 

Atualmente, não há atenuações existentes para esta vulnerabilidade. Se você estiver em uma versão do kernel Linux maior que 5,8, o fornecedor recomenda a aplicação de patches para as seguintes versões: 5.16.11, 5.15.25 e 5.10.102.

Atualizado em 14 de março de 2022: O mais recente kernel Linode está disponível, que conserta o Dirty Pipe.

Fuga de contêineres via cgroups

Os grupos de controle, ou cgroups, são um recurso do kernel Linux que aloca e aloca o uso de recursos computacionais para processos. Em alguns casos, estes processos serão então organizados em grupos hierárquicos onde a alocação de recursos é alocada com base no grupo.

Os Cgroups são comumente usados em contêineres Linux porque há múltiplos processos em execução em um contêiner que precisam ser agrupados. 

CVE-2022-0492 é uma vulnerabilidade de fuga do contêiner no qual um usuário pode escapar do contêiner e girar para a máquina hospedeira. Isto afeta apenas a arquitetura cgroup v1

Root Cause - A vulnerabilidade envolve o arquivo release_agent, que é uma característica do cgroups v1. O arquivo release_agent permite aos administradores configurar um "agente de liberação" que é executado quando um processo no cgroup é terminado. O release_agent é visível apenas no diretório raiz do cgroup e afeta todos os seus cgroups filhos. Sempre que um processo morre, o kernel verifica se seu notifiy_on_release habilitado, e se o fez, então ele irá gerar o binário release_agent configurado. A fuga do container ocorre porque o Linux não verificou se o processo de configuração do arquivo release_agent tem privilégios administrativos (ex. A capacidade CAP_SYS_ADMIN ). 

Esta vulnerabilidade pode ser atenuada fazendo o seguinte:

  • Habilitação dos perfis de segurança AppArmor, SELinux, ou Seccomp 
  • Desabilitar espaços de nomes de usuários não privilegiados, se não for necessário
  • Operando o contêiner como um usuário sem privilégios

Os pesquisadores de segurança de Palo Alto criaram um teste para determinar se seu ambiente de contêineres é vulnerável ao CVE-2022-0492:

Há algumas advertências por trás desta vulnerabilidade. A fim de explorar com sucesso esta vulnerabilidade, você precisa preencher as seguintes condições para uma exploração bem sucedida: 

  • Um container precisa ser executado como um usuário privilegiado (raiz ou um usuário com a bandeira no_new_privs )
  • AppArmor, SELinux, ou Seccomp precisa ser desativado
  • O anfitrião precisa habilitar espaços de nomes de usuários não privilegiados
  • Um recipiente terá de estar em um grupo raiz v1 c 

Netfilter Local Privilege Escalation via heap-out-of-bounds escrever

O Netfilter é uma estrutura do kernel Linux que permite que várias operações relacionadas à rede ocorram. Ele permite a filtragem de pacotes, tradução de endereços de rede (e porta), registro de pacotes e enfileiramento de pacotes no espaço do usuário. Você também pode construir firewalls na Internet com base na filtragem de pacotes stateless e stateful. 

CVE-2022-25636, é uma vulnerabilidade na qual um usuário local pode realizar uma pilha de limites escrevendo na função nft_fwd_dup_dup_netdev_offload (nf_dup_netdev.c) e ganhar privilégios. Esta vulnerabilidade afeta atualmente as versões 5.4-rc1 até 5.6.10 do kernel. 

Root Cause - Na função nft_fwd_dup_dup_netdev_offload, ctx->num_actions++ é usado para compensar na matriz flow->rule->action.entries(nf_dup_netdev.c:67) ao configurar regras de fluxo dup ou fwd em uma cadeia com o hardware offload habilitado. O descasamento ocorre entre o número que o incremento é chamado e o número de entradas alocadas. O tamanho da matriz alocada é baseado no número de expressões nftables que têm expr.offload_flags&NFT_OFFLOAD_F_ACTION(nf_tables_offload.c:97), mas somente o tipo de expressão imediata tem isto (não dup ou fwd). Esta discrepância permite que alguém crie uma regra com expressões dup/fwd sem uma correspondente/precedente imediata, levando a uma matriz de entradas subdimensionada, e um número arbitrário de escritas fora dos limites da matriz. Alguém poderia escrever um script e realizar uma escrita OOB que pode ser transformada em um ROP do Kernel / escalonamento de privilégios locais.

É recomendado remendar seu kernel para a versão mais recente. 


Comentários

Deixe uma resposta

Seu endereço de e-mail não será publicado. Os campos obrigatórios estão marcados com *