Vulnerabilidades do tipo Dirty Frag que modificam o cache de páginas para obter acesso root em todas as distribuições Linux.

Duas vulnerabilidades foram descobertas no kernel do Linux. Essas vulnerabilidades são semelhantes em natureza à vulnerabilidade Copy Fail divulgada há alguns dias, mas afetam subsistemas diferentes: xfrm-ESP e RxRPC. Essa série de vulnerabilidades recebeu o codinome Dirty Frag (também conhecida como Copy Fail 2). Essas vulnerabilidades permitem que um usuário sem privilégios obtenha privilégios de root sobrescrevendo dados de processos no cache de páginas. Um exploit está disponível e funciona em todas as distribuições Linux atuais. A vulnerabilidade foi divulgada antes da publicação das correções, mas uma solução alternativa está disponível.

O Dirty Frag abrange duas vulnerabilidades distintas: a primeira no módulo xfrm-ESP, usado para acelerar operações de criptografia IPsec utilizando o protocolo ESP (Encapsulating Security Payload), e a segunda no driver RxRPC, que implementa a família de sockets AF_RXRPC e o protocolo RPC de mesmo nome, executado sobre UDP. Cada vulnerabilidade, considerada separadamente, permite privilégios de root. A vulnerabilidade no xfrm-ESP está presente no kernel do Linux desde janeiro de 2017, e a vulnerabilidade no RxRPC desde junho de 2023. Ambos os problemas são causados ​​por otimizações que permitem escritas diretas no cache de páginas.

Para explorar a vulnerabilidade xfrm-ESP, o usuário precisa ter permissão para criar namespaces e, para explorar a vulnerabilidade RxRPC, o módulo do kernel rxrpc.ko precisa estar carregado. Por exemplo, no Ubuntu, as regras do AppArmor impedem que usuários sem privilégios criem namespaces, mas o módulo rxrpc.ko é carregado por padrão. Algumas distribuições não possuem o módulo rxrpc.ko, mas não bloqueiam a criação de namespaces. O pesquisador que descobriu o problema desenvolveu um exploit combinado capaz de atacar o sistema por meio de ambas as vulnerabilidades, possibilitando a exploração do problema em todas as principais distribuições. Foi confirmado que a vulnerabilidade funciona no Ubuntu 24.04.4 com kernel 6.17.0-23, RHEL 10.1 com kernel 6.12.0-124.49.1, openSUSE Tumbleweed com kernel 7.0.2-1, CentOS Stream 10 com kernel 6.12.0-224, AlmaLinux 10 com kernel 6.12.0-124.52.3 e Fedora 44 com kernel 6.19.14-300.

Assim como na vulnerabilidade Copy Fail, os problemas no xfrm-ESP e no RxRPC são causados ​​pela descriptografia de dados in-place usando a função splice(), que transfere dados entre descritores de arquivo e pipes sem copiar, passando referências a elementos no cache de páginas. Os deslocamentos de escrita foram calculados sem as devidas verificações para levar em conta o uso de referências diretas a elementos no cache de páginas, permitindo que solicitações especialmente criadas sobrescrevessem 4 bytes em um determinado deslocamento e modificassem o conteúdo de qualquer arquivo no cache de páginas.

Todas as operações de leitura de arquivos recuperam primeiro o conteúdo do cache de páginas. Se os dados no cache de páginas forem modificados, as operações de leitura de arquivos retornarão os dados substituídos, e não as informações reais armazenadas na unidade. A exploração da vulnerabilidade se resume a modificar o cache de páginas de um arquivo executável com a flag de root "suid". Por exemplo, para obter privilégios de root, seria possível ler o arquivo executável /usr/bin/su para colocá-lo no cache de páginas e, em seguida, substituir o código do arquivo carregado no cache de páginas por outro código. A execução subsequente do utilitário "su" resultará no carregamento da cópia modificada do cache de páginas na memória, e não do arquivo executável original da unidade.

A divulgação da vulnerabilidade e o lançamento coordenado das correções estavam agendados para 12 de maio, mas devido a um vazamento, as informações sobre a vulnerabilidade tiveram que ser publicadas antes do lançamento das correções. No final de abril, correções para rxrpc, ipsec e xfrm foram postadas na lista de discussão pública do netdev sem mencionar que estavam relacionadas à vulnerabilidade. Em 5 de maio, o mantenedor do subsistema IPsec aceitou uma alteração no repositório Git do netdev com uma correção proposta no módulo xfrm-esp. A descrição da alteração era praticamente idêntica à descrição do problema que levou à vulnerabilidade Copy Fail no módulo algif_aead. Um pesquisador de segurança se interessou por essa correção, conseguiu criar um exploit funcional e o publicou, sem saber que havia um embargo imposto à divulgação de informações sobre o problema até 12 de maio.

Ainda não foram publicadas atualizações com correções para o kernel Linux e pacotes do kernel nas distribuições, mas patches que resolvem os problemas estão disponíveis — xfrm-esp e rxrpc. Identificadores CVE não foram atribuídos, o que dificulta o rastreamento de atualizações de pacotes nas distribuições. Como solução alternativa, você pode bloquear o carregamento dos módulos do kernel esp4, esp6 e rxrpc: sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; true"

Fonte: opennet.ru