Descoberta e escopo da falha
Uma vulnerabilidade no subsistema FUSE do kernel Linux pode permitir que um atacante local ganhe privilégios de root transbordando o cache de páginas com entradas de diretório controladas pelo atacante. A falha é rastreada como CVE-2026-31694 e afeta o caminho de código usado quando o kernel armazena em cache os resultados de readdir do FUSE. O FUSE permite que um sistema de arquivos do espaço do usuário converse com o kernel através de /dev/fuse, e o kernel pode armazenar entradas de diretório em cache para leituras futuras mais rápidas.
A análise da Bynario mostra que o bug está em fuse_add_dirent_to_cache(), onde o kernel calcula o tamanho de uma entrada de diretório a partir do comprimento do nome de arquivo controlado pelo servidor e, em seguida, copia a entrada em uma única página de cache sem verificar primeiro se a própria entrada é maior que uma página única. Isso importa porque um servidor FUSE malicioso pode retornar uma entrada de diretório cujo tamanho serializado é 4120 bytes em um sistema de página de 4 KiB, o que é 24 bytes a mais do que uma página única.
Quando o kernel redefine o offset para zero e copia o registro de qualquer maneira, os bytes extras vazam para a próxima página de memória. A parte perigosa não é apenas a corrupção de memória, mas onde os dados corrompidos aterrissam. Na validação relatada, o transbordamento foi usado para corromper bytes em cache de um binário SUID, como /usr/bin/su, substituindo o início do código executável por um payload curto que chama setuid(0) e setgid(0) antes de continuar normalmente.
Mecanismo de exploração
Uma vez que essas chamadas de sistema de mudança de identidade tenham sucesso dentro de um programa de propriedade de root, o atacante pode contornar as verificações de autenticação usuais e gerar um shell de root. O ataque é local, então o atacante precisa da capacidade de montar ou executar um sistema de arquivos FUSE, que pode estar disponível através de namespaces de usuário não privilegiados ou fusermount3.
De acordo com a Bynario, o problema é explorável em kernels mais novos com buffers readdir grandes e afeta apenas sistemas que usam páginas de memória de 4 KiB. Sistemas com tamanhos de página maiores não são afetados por este tamanho de transbordamento específico. A correção é simples: rejeitar qualquer entrada de diretório que não caiba em uma única página antes de armazená-la em cache.
Medidas de mitigação recomendadas
Administradores também podem reduzir a exposição limitando o uso do FUSE, removendo o bit setuid do fusermount3 quando não necessário e restringindo namespaces não privilegiados onde apropriado. A correção do kernel deve ser aplicada assim que disponível para evitar a exploração em ambientes de produção.
Para equipes de segurança, a visibilidade sobre quais sistemas estão executando versões vulneráveis do kernel é crucial. O monitoramento de atividades de montagem FUSE incomuns e tentativas de acesso a binários SUID pode ajudar a identificar tentativas de exploração em tempo real. A aplicação de patches deve ser priorizada em servidores que utilizam sistemas de arquivos FUSE, especialmente em ambientes de nuvem onde o isolamento de namespaces pode ser configurado de forma permissiva.
Implicações para governança de segurança
Este caso destaca a importância de manter o inventário de sistemas atualizado e a necessidade de testes de segurança contínuos em ambientes Linux. A exploração de vulnerabilidades de kernel pode comprometer a integridade de todo o sistema, tornando a gestão de patches uma prioridade crítica para CISOs e equipes de operações de TI.