Um exploit para GRO Frag — uma vulnerabilidade local de elevação de privilégios no núcleo do Linux, relacionada ao processamento de GRO e skb zero-copy no stack de rede. A data exata da descoberta inicial nos materiais públicos não está indicada. Com base em rastros abertos, é possível registrar duas datas: a correção foi discutida na lista de discussão netdev 20 de maio de 2026, onde esta vulnerabilidade já foi descrita como apta a sobrescrever o cache de páginas, e um PoC público foi postado no GitHub Gist 22 de maio de 2026.
Como uma medida temporária antes da instalação do núcleo corrigido, pode-se limitar o vetor de ataque via sysctl: kernel.io_uring_disabled=1. Esse modo proíbe a criação de novas instâncias de io_uring por processos não privilegiados, a menos que estejam na lista permitida io_uring_group; com o valor de grupo -1, o acesso é concedido apenas a processos com CAP_SYS_ADMIN. Esta é uma mitigação, não uma correção completa da vulnerabilidade.
O problema reside na função skb_gro_receive(): ao agregar pacotes GRO, o núcleo poderia mover fragmentos de skb zero-copy para outro skb sem verificar corretamente o estado de zero-copy e o sinal SKBFL_MANAGED_FRAG_REFS. Como resultado, as páginas de memória, das quais o skb original não mantinha referências separadas, poderiam ser liberadas incorretamente, levando a um uso após a liberação. O patch indica claramente que essa situação pode levar a UAF, e que a variante encontrada era apta a sobrescrever o cache de páginas.
O PoC publicado descreve a vulnerabilidade como LPE através de GRO managed-frag UAF usando io_uring SEND_ZC e a interface de rede virtual veth. No comentário do código está indicado que os núcleos afetados são Linux 6.0+, a exploração é possível por um usuário não privilegiado, mas requer acesso a io_uring; a correção mencionada é o commit 4db79a322db8 com a alteração "net: gro: não mesclar skbs zcopy".
Em termos de consequências, GRO Frag se encaixa na mesma classe perigosa de erros que Copy Fail e Dirty Frag: um atacante com acesso local não privilegiado consegue alterar dados no cache de páginas, ou seja, na memória, sem modificação obrigatória do arquivo no disco. Esses erros são especialmente indesejáveis, pois afetam a fronteira entre o arquivo "somente leitura" e o conteúdo real que o núcleo e os processos veem em acessos posteriores. Elastic já descreveu anteriormente esta classe é um caminho prático para obter root através da corrupção do cache de página.
No momento da publicação, um identificador CVE separado para o GRO Frag, ao que parece, ainda não foi designado. Como medidas temporárias, os administradores devem considerar atualizar o núcleo para uma versão com correção, bem como adotar medidas gerais de mitigação de riscos para tais LPE: limitar namespaces de usuários não privilegiados onde for admissível, controlar o uso do io_uring e monitorar cadeias suspeitas relacionadas à escalada local de privilégios. Para ataques relacionados a Copy Fail/DirtyFrag, a Elastic também recomenda combinar patching com a detecção de primitivas de exploração de baixo nível da vulnerabilidade.
Primitivas de exploração de baixo nível não são o "hack completo", mas sim técnicas técnicas básicas que constituem um exploit.
No contexto do GRO Frag, isso pode significar não detectar o fato já consumado de que "o usuário se tornou root", mas sim tentar notar ações suspeitas individuais que o exploit utiliza ao longo do caminho para a elevação de privilégios.
Fonte: linux.org.ru
