
Implementação de pesquisa demonstrando interação com o subsistema eBPF do Linux relacionada ao CVE-2021-3490. Inclui criação de mapa BPF, wrappers de syscall, configuração de namespace e análise de verificador. Apenas para fins educacionais e de pesquisa de segurança.
Implementação de pesquisa demonstrando interação com o subsistema eBPF do Linux relacionado ao CVE-2021-3490. Inclui criação de mapas BPF, wrappers de syscall, configuração de namespace e análise do verifier. Apenas para fins educacionais e de pesquisa em segurança.
CVE-2021-3490 – Análise de Rastreamento de Limites do Verificador eBPF Visão Geral
Este repositório contém uma implementação em C que explora o subsistema eBPF do kernel Linux em relação ao CVE-2021-3490, uma vulnerabilidade que envolve rastreamento incorreto de limites de 32 bits no verificador eBPF.
O objetivo deste projeto é entender como a chamada de sistema bpf() funciona internamente, como os mapas BPF são criados e gerenciados a partir do espaço do usuário, e como o verificador lida com restrições de registradores. Este é um projeto de pesquisa e aprendizado focado em componentes internos do kernel e análise de segurança.
Este código não se destina ao uso em produção.
Contexto
O eBPF permite que programas em espaço do usuário carreguem bytecode verificado no kernel Linux. Antes da execução, o verificador do kernel verifica se o programa:
Não realiza acesso inseguro à memória
Mantém-se dentro dos limites dos registradores
Não viola as regras de segurança do kernel
Em versões vulneráveis do kernel, o verificador rastreava incorretamente os limites de 32 bits durante certas operações ALU. Essa falha poderia permitir que programas criados contornassem a lógica de validação.
Para detalhes oficiais:
NVD: https://nvd.nist.gov/vuln/detail/CVE-2021-3490
Aviso de Segurança Ubuntu: https://ubuntu.com/security/CVE-2021-3490
Advertência Red Hat: https://access.redhat.com/security/cve/CVE-2021-3490
O Que Este Projeto Demonstra
Esta implementação foca em:
Uso direto da chamada de sistema bpf()
Definição manual de union bpf_attr
Criação de mapas BPF (BPF_MAP_TYPE_ARRAY)
Atualização e consulta de elementos do mapa
Recuperação de metadados de objetos BPF
Configuração de namespace para execução controlada
É projetado para ajudar a entender como o espaço do usuário interage com a infraestrutura BPF do kernel.
Este repositório não inclui lógica automatizada de payload de exploração.
Ambiente Testado
Ubuntu 20.10 (Groovy)
Kernel Linux 5.8.0-48-generic
Você pode verificar sua versão do kernel com:
uname -r
O comportamento pode diferir em kernels corrigidos ou mais recentes.
Compilação
Compile usando GCC:
gcc -o exploit exploit.c -lpthread
Nenhuma biblioteca externa é necessária além dos cabeçalhos padrão do Linux.
Uso
Execute o programa:
./exploit
O programa irá:
Configurar namespaces de usuário e rede
Criar um mapa BPF
Inserir um elemento
Consultar metadados do mapa
Exibir resultados da execução
Nota de Segurança
Este projeto é para:
Fins educacionais
Pesquisa em segurança do kernel
Compreensão dos componentes internos do eBPF
Ambientes de laboratório controlados
Não execute este código em sistemas sem a devida autorização.
Objetivos de Aprendizagem
Através deste projeto, você pode entender:
Como o kernel Linux expõe a interface BPF
Como os mapas BPF são estruturados
Como a lógica do verificador interage com entradas do espaço do usuário
Como chamadas de sistema de baixo nível são construídas manualmente