Uma vulnerabilidade no VFS do kernel Linux que permite aumentar seus privilégios

Uma vulnerabilidade (CVE-2022-0185) foi identificada na API Filesystem Context fornecida pelo kernel Linux, que permite que um usuário local obtenha privilégios de root no sistema. O pesquisador que identificou o problema publicou uma demonstração de um exploit que permite executar código como root no Ubuntu 20.04 na configuração padrão. O código de exploração está planejado para ser publicado no GitHub dentro de uma semana após as distribuições lançarem uma atualização que corrige a vulnerabilidade.

A vulnerabilidade existe na função legado_parse_param() no VFS e é causada por uma falha na verificação adequada do tamanho máximo dos parâmetros fornecidos em sistemas de arquivos que não suportam a API Filesystem Context. Passar um parâmetro muito grande pode causar um overflow da variável inteira usada para calcular o tamanho dos dados a serem gravados - o código possui uma verificação de buffer overflow "if (len > PAGE_SIZE - 2 - size)", que não funciona se o valor do tamanho for maior que 4094. para estouro de inteiro através do limite inferior (underflow de inteiro, ao converter 4096 - 2 - 4095 para unsigned int, o resultado é 2147483648).

Este erro permite, ao acessar uma imagem de sistema de arquivos especialmente projetada, causar um buffer overflow e sobrescrever os dados do kernel seguindo a área de memória alocada. Para explorar a vulnerabilidade, você deve ter direitos CAP_SYS_ADMIN, ou seja, poderes de administrador. O problema é que um usuário sem privilégios pode obter tais permissões em um contêiner isolado se o sistema tiver suporte para namespaces de usuário habilitado. Por exemplo, os namespaces de usuário são habilitados por padrão no Ubuntu e Fedora, mas não habilitados no Debian e RHEL (a menos que sejam usadas plataformas de isolamento de contêiner).

O problema vem aparecendo desde o kernel Linux 5.1 e foi corrigido nas atualizações de ontem 5.16.2, 5.15.16, 5.10.93, 5.4.173. Atualizações de pacotes que corrigem a vulnerabilidade já foram lançadas para RHEL, Debian, Fedora e Ubuntu. A correção ainda não está disponível no Arch Linux, Gentoo, SUSE e openSUSE. Como solução alternativa de segurança para sistemas que não usam isolamento de contêiner, você pode definir o valor sysctl "user.max_user_namespaces" como 0: echo "user.max_user_namespaces=0" > /etc/sysctl.d/userns.conf # sysctl -p /etc/sysctl.d/userns.conf

Fonte: opennet.ru

Adicionar um comentário