Uma vulnerabilidade no subsistema io_uring que permite obter privilégios de root

Foi identificada uma vulnerabilidade na interface de entrada/saída assíncrona io_uring, fornecida pelo núcleo Linux (CVE-2024-0582), que permite que um usuário não privilegiado obtenha direitos de root no sistema. Para explorar a vulnerabilidade, é suficiente ter acesso local comum ao sistema, sem necessidade de manipulações com espaços de nomes. Atualmente, um exploit funcional está publicamente disponível e uma segunda técnica de exploração da vulnerabilidade está detalhada.

A vulnerabilidade é causada por um acesso a um bloco de memória que já foi liberado (use-after-free) no subsistema io_uring, ocorrendo durante o registro e liberação de um buffer de anel criado com a flag IORING_REGISTER_PBUF_RING. Em situações onde a operação mmap() é aplicada ao buffer, ele continua refletido no espaço do usuário após a execução da operação de liberação (IORING_UNREGISTER_PBUF_RING). Usando essa característica, um atacante pode ler e gravar dados nas páginas de memória retornadas pelo sistema de gerenciamento de memória do núcleo.

O problema surgiu a partir do lançamento do núcleo Linux 6.4 e foi corrigido nas versões 6.7 e 6.6.5, assim como no pacote com o núcleo 6.5.0-21, preparado para Ubuntu 22.04 e 23.10. É notável que no núcleo principal o problema foi corrigido em dezembro de 2023, o projeto Google Zero divulgou um aviso sobre a existência da vulnerabilidade em 8 de janeiro, e o pacote com o núcleo corrigido 6.5 para Ubuntu foi formado apenas em 22 de fevereiro de 2024. Em outras distribuições, pode-se acompanhar a correção e a vulnerabilidade nas páginas: Debian, Gentoo, RHEL, SUSE, Fedora, Arch.

O primeiro exploit manipula a criação de um grande número de páginas de memória controladas pelo atacante para determinar o layout da memória no núcleo e acessar páginas de memória físicas adjacentes, usando o conteúdo de estruturas de soquete de rede preenchidas de maneira específica como marcadores. Para executar o código no exploit, um "gadget" (sequência de instruções existentes no núcleo) é utilizado, resultando na execução da função call_usermodehelper_exec, destinada a iniciar processos no espaço do usuário a partir do núcleo.

O segundo exploit se baseia no fato de que, quando todos os blocos de slab no cache se esgotam (por exemplo, ao abrir um arquivo várias vezes), páginas de memória livres, às quais o atacante ainda tem acesso, são utilizadas pelo sistema de alocação de memória para criar um novo bloco de slab e todas as novas estruturas de arquivos começam a ser alocadas nesse bloco. Assim, algumas estruturas de arquivos acabarão em páginas de memória que o atacante pode ler e escrever. A exploração se resume em organizar a inserção do arquivo desejado no cache de arquivos e substituir, nas estruturas de arquivos associadas, o campo f_mode que determina os direitos de acesso, permitindo que um arquivo de sistema crítico, como /etc/passwd, se torne gravável.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster