Pular para o conteúdo principal
BlogSegurançaLinode Security Digest 30 de janeiro - 6 de fevereiro de 2022

Linode Security Digest 30 de janeiro - 6 de fevereiro de 2022

Linode Security Digest

Esta semana, discutiremos três vulnerabilidades de alta severidade que poderiam permitir aos atacantes aumentar os privilégios se eles tivessem acesso local ao sistema.

Linux Kernel eBPF - Vulnerabilidade de Validação de Entrada Imprópria

CVE-2022-23222 descreve uma vulnerabilidade decorrente do manuseio do kernel dos programas eBPF. Um atacante que pode executar BPF pode travar o sistema ou executar código arbitrário no contexto do kernel.

Causa Raiz - O verificador BPF não restringe adequadamente vários tipos de ponteiro *_OU_NULL, o que permite que estes tipos façam aritmética de ponteiro. Isto pode ser alavancado para executar código arbitrário ou travar o sistema. 

Nota importante: BPF sem privilégios é desativada por padrão na maioria das distros. O bug foi introduzido na versão 5.8.0 do kernel e corrigido na versão 5.14.17 do kernel. A disponibilidade de exploits públicos é outra razão pela qual o CVE-2022-23222 representa um risco significativo.

Manter-se atualizado com o mais recente kernel oferecido por sua distribuição Linux é uma maneira fácil de se proteger desta vulnerabilidade. Se seu Linode inicia um kernel fornecido por nós, você pode verificar se o Perfil de Configuração do seu Linode está configurado para iniciar o último kernel e então reiniciar seu Linode. 

Se você não puder atualizar imediatamente para um kernel corrigido, você também pode mitigar esta vulnerabilidade, assegurando que o sistema não-privilegiado_bpf_disabled seja ajustado para 1. O exemplo a seguir aplicará a mitigação temporária até que seu Linode seja reiniciado. Certifique-se de escrever esta configuração em um arquivo de configuração sysctl e inicialize seu Linode com segurança para persistir na mitigação.

# sysctl -w kernel.unprivileged_bpf_disabled=1

Fonte: Tr3e wang do Laboratório de Segurança SecCoder

Escape de contêineres usando Transbordamento de pilhas no Kernel Linux

CVE-2022-0185 é um bug de transbordamento de pilha que permite que um atacante com acesso a um usuário não-privilegiado aumente seus privilégios para enraizar. Para fazer isto, o atacante deve ter uma capacidade específica do Linux, CAP_SYS_ADMIN. É importante notar que quando Docker (ou outros CRIs) são usados em um cluster Kubernetes, o filtro seccomp fica desabilitado por padrão, de modo que esta vulnerabilidade pode ser explorada nestes casos.

Causa Raiz - O erro é causado por um subfluxo inteiro presente em fs/fs_context.c:legacy_parse_param, resultando em um erro de cálculo válido de comprimento máximo. Isto leva a um subfluxo inteiro no componente "Contexto do Sistema de Arquivo". 

O subfluxo ocorre quando uma operação de subtração reduz um número inteiro não assinado a um valor abaixo de zero. Como os números inteiros não assinados não podem representar números negativos, o cálculo resultante envolve o valor máximo do número inteiro. Quando este subfluxo ocorre dentro da função legacy_parse_param, uma verificação de tamanho falha, e o atacante pode escrever além dos limites da memória alocada de 4kb no espaço do kernel. Usando esta "escrita sem limites", o atacante pode alterar valores na memória do kernel e, por exemplo, adicionar acesso a si mesmo a qualquer outro processo em execução no mesmo nó.

O comando "capsh -print" pode ser usado no contexto do usuário atual para listar as capacidades habilitadas. A exploração depende da capacidade CAP_SYS_ADMIN; entretanto, a permissão só precisa ser concedida no namespace atual. Um usuário sem privilégios pode usar o unshare (CLONE_NEWNS | CLONE_NEWUSER) para entrar em um namespace com a permissão CAP_SYS_ADMIN e então proceder com a exploração para enraizar o sistema. Entretanto, o uso do seccomp impedirá o atacante de entrar no espaço de nomes com essa capacidade.

A vulnerabilidade foi introduzida no kernel 5.1 e remendada em 5.16.2. O código de exploração já está surgindo online. Aqui está a redação original para mais detalhes técnicos sobre as descobertas. 

Manter-se atualizado com o último kernel oferecido por sua distribuição Linux é uma maneira fácil de se proteger desta vulnerabilidade. Se seu Linode inicia um kernel fornecido por nós, você também pode verificar se o Perfil de Configuração do seu Linode está configurado para iniciar o último kernel e então reiniciar seu Linode. Se você não for capaz de atualizar imediatamente um kernel corrigido, você pode aplicar estas mitigações:

  • Minimizar o uso de recipientes privilegiados que tenham acesso à capacidade CAP_SYS_ADMIN. 
  • Para contêineres não privilegiados, assegure-se de que haja um filtro seccomp que bloqueie a chamada não compartilhada, reduzindo o risco.
  • Mitigar a exploração de contêineres sem privilégios, desativando a capacidade do usuário de usar os espaços de nomes de usuários em um nível de host. O exemplo a seguir aplicará a mitigação temporária até que seu Linode reinicialize. Certifique-se de escrever esta configuração em um arquivo de configuração sysctl e inicialize seu Linode com segurança para persistir na mitigação.
# sysctl -w kernel.unprivileged_userns_clone=0

PwnKit - Vulnerabilidade à Escalada de Privilégios Local em Polkit

O Polkit é um componente para controlar privilégios de todo o sistema em sistemas operacionais do tipo Unix. Ele fornece uma metodologia sistemática para processos não-privilegiados para se comunicar com processos privilegiados. Além disso, alguém pode também usar o polkit para executar comandos com privilégios elevados usando o comando pkexec (geralmente com a raiz). 

CVE-2021-4034 é uma vulnerabilidade de corrupção de memória no pkexec do polkit, um programa SUID-root instalado por padrão na maioria das principais distribuições Linux. A exploração bem sucedida permite que qualquer usuário sem privilégios de raiz na configuração padrão ganhe facilmente.

Causa Raiz - O programa pkexec não valida adequadamente o número de argumentos passados a ele, permitindo que alguém execute código arbitrário como um usuário privilegiado. 

Todas as versões do Polkit a partir de 2009 são vulneráveis e exploráveis mesmo que o daemon polkit em si não esteja funcionando.

Manter-se atualizado com o mais recente kernel oferecido por sua distribuição Linux é uma maneira fácil de se proteger desta vulnerabilidade. Se seu Linode inicia um kernel fornecido por nós, você pode verificar se o Perfil de Configuração do seu Linode está configurado para iniciar o último kernel e então reiniciar seu Linode. Se você não for capaz de atualizar imediatamente para um kernel corrigido, você pode mitigar temporariamente o problema removendo o SUID-bit do pkexec:

# chmod 0755 /usr/bin/pkexec

Comentários

Deixe uma resposta

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