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