Falha crítica no kernel Linux permite escalação de privilégios via BPF
Aprofundamento CEVIU
Aprofundamento
A CVE-2026-31525 não é um bug isolado, é o mais recente elo de uma cadeia de falhas críticas no subsistema BPF do kernel Linux em 2026. Desde abril, pelo menos quatro vulnerabilidades relacionadas a memória e verificação de programas BPF foram divulgadas: CVE-2026-45951 (use-after-free em check_pseudo_btf_id), CVE-2026-43333 (desreferência nula no mesmo subsistema), CVE-2026-31401 (estouro de buffer no HID-BPF) e CVE-2026-45839 (leitura fora dos limites em CO-RE). Todas compartilham um padrão: o verificador BPF assume comportamento determinístico em tempo de análise, mas o interpretador ou JIT executa de forma divergente em tempo de execução, o que abre brechas para corrupção de memória local. A CVE-2026-31525 explora exatamente essa lacuna com overflow de sinal em abs(S32_MIN), enganando o rastreamento de intervalos numéricos do verificador. Isso não é falha de codificação descuidada, mas falha de modelagem lógica do próprio sistema de segurança do BPF.
O fato de exigir JIT desabilitado como condição de exploração é estratégico: muitos ambientes produtivos (como containers com restrições de capacidade ou distros minimalistas) desativam o JIT por padrão por medo de exploits anteriores baseados nele, o que agora os torna *mais* vulneráveis a esse tipo de ataque. Red Hat e Amazon Linux classificaram a falha como 'Moderada' (CVSS 6.4), mas isso reflete política de classificação interna, não realidade técnica: o CVSS 7.8 do kernel.org leva em conta o cenário completo de escalação local com acesso direto ao sistema, sem necessidade de interação remota nem credenciais adicionais.
O que mudou
Na cobertura anterior do CEVIU sobre o CIFSwitch (2 e 1 de junho), destacamos uma falha de lógica antiga (desde 2007) explorando request_key, um mecanismo de autenticação de baixo nível. Já a CVE-2026-31525 é tecnicamente oposta: não explora uma API legada mal projetada, mas sim uma inconsistência matemática entre duas camadas de segurança modernas (verificador vs. interpretador BPF), ambas introduzidas para tornar o kernel mais seguro. Enquanto o CIFSwitch dependia de chaves forjadas e chamadas privilegiadas, essa nova falha opera inteiramente dentro do modelo de sandbox BPF, ou seja, é um ataque *contra* a proteção, não ao redor dela. Também difere das falhas Dirty Frag e Fragnesia (maio/2026), que exploravam manipulação de fragmentos de rede: aqui, o vetor é puramente computacional, sem dependência de tráfego ou hardware externo.
Por que isso importa
Empresas que usam BPF para observabilidade (eBPF), filtragem de rede (Cilium, XDP) ou políticas de segurança (Falco, Tracee) estão expostas mesmo sem executar código malicioso, basta um processo local não confiável carregar um programa BPF malicioso. A mitigação recomendada (ativar JIT + desabilitar BPF não privilegiado) entra em conflito com práticas comuns em ambientes serverless e CI/CD, onde JIT é desativado por razões de estabilidade e `unprivileged_bpf_disabled=0` é necessário para ferramentas de diagnóstico. Além disso, a correção `abs_s32()` só está disponível em kernels 7.0-rc5+, o que significa que distribuições enterprise (RHEL, SLES, Ubuntu LTS) ainda dependerão de backports, e já há evidências de que alguns desses backports são incompletos, deixando sistemas parcialmente vulneráveis mesmo após atualização.
Linha do tempo
CVE-2026-31401: estouro de buffer no módulo HID-BPF
CVE-2026-43333: use-after-free no subsistema BPF
CVE-2026-45951: use-after-free em check_pseudo_btf_id
Divulgação pública do CIFSwitch (CVE-2026-XXXXX)
Divulgação da CVE-2026-31525 no kernel Linux
Perguntas frequentes
Essa falha pode ser explorada remotamente?
Não. A CVE-2026-31525 exige acesso local a um shell ou processo com capacidade de carregar programas BPF. Não há vetor de exploração via rede, web ou API, apenas execução de código no próprio sistema.
Qual versão do kernel Linux está segura?
A correção foi incorporada no commit upstream a partir da versão 7.0-rc5. Distribuições enterprise como RHEL e SUSE já lançaram atualizações específicas (ex: SUSE Security Update de 3/06/2026), mas é essencial verificar se o pacote inclui o patch completo do `abs_s32()`, pois backports parciais não resolvem a divergência de comportamento entre verificador e interpretador.
Desativar BPF resolve o problema?
Sim, mas com custos operacionais altos. Definir `kernel.unprivileged_bpf_disabled=1` bloqueia todos os programas BPF não privilegiados, o que quebra ferramentas de monitoramento (bpftrace, tc), redes CNI baseadas em eBPF (Cilium) e até funcionalidades nativas do systemd. A alternativa mais equilibrada é ativar o JIT (`net.core.bpf_jit_enable=1`) e restringir CAP_BPF a processos confiáveis.
Essa falha está relacionada às outras do BPF divulgadas em maio/junho?
Sim, tecnicamente. CVE-2026-31525, CVE-2026-45951 e CVE-2026-43333 todas exploram falhas no ciclo de verificação/execução de programas BPF. São sintomas de uma pressão crescente sobre o subsistema: mais funcionalidades, mais complexidade de verificação, e mais oportunidades para discrepâncias entre o que o verificador *acha* que vai acontecer e o que realmente ocorre no runtime.
Fontes
- sentinelone.comfonte original
- Categoria
- CEVIU Segurança da Informação
- Publicado
- 04 de junho de 2026
- Editoria
- CEVIU Segurança da Informação
