Foi descoberta uma vulnerabilidade no código do sistema de arquivos XFS (CVE-2021-4155) que permite a um usuário local e não privilegiado ler dados de blocos não utilizados diretamente do dispositivo de bloco. Todas as versões significativas do kernel Linux superiores a 5.16 que contêm o driver XFS estão sujeitas a esse problema. A correção foi incluída na versão 5.16, assim como nas atualizações dos kernels 5.15.14, 5.10.91, 5.4.171, 4.19.225, etc. O status da formação de atualizações que corrigem o problema nas distribuições pode ser acompanhado nestas páginas: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch.
A vulnerabilidade é causada pelo comportamento incorreto de dois específicos ioctl do XFS (XFS_IOC_ALLOCSP) e ioctl (XFS_IOC_FREESP), que são funcionalmente equivalentes à chamada de sistema fallocate() do núcleo. Ao aumentar o tamanho de um arquivo que não está alinhado ao tamanho do bloco, os ioctls XFS_IOC_ALLOCSP/XFS_IOC_FREESP não zeram os bytes restantes até a próxima borda de bloco. Assim, em XFS com tamanho de bloco padrão de 4096 bytes, um invasor pode ler até 4095 bytes de dados gravados anteriormente a partir de cada bloco. Essas áreas podem conter dados de arquivos excluídos, arquivos desfragmentados, assim como arquivos com blocos deduplicados.
Você pode verificar se o seu sistema possui o problema usando um simples protótipo de exploit. Se, após executar a sequência de comandos proposta, for possível ler um texto de Shakespeare, então o driver do sistema de arquivos está vulnerável. O montador inicial da partição XFS para demonstração requer privilégios de superusuário.
Como os ioctls (XFS_IOC_ALLOCSP) e (XFS_IOC_FREESP) são praticamente idênticos em funcionalidade ao fallocate() padrão e a única diferença entre eles é a vazamento de dados, a sua presença assemelha-se a uma backdoor. Apesar da política geral de não alterar interfaces existentes no núcleo, a pedido de Linus, foi tomada a decisão de remover completamente esses ioctls na próxima versão.
Fonte: opennet.ru
