0. Antes de ler
- Este post de blog foi feito para futuros viajantes do tempo que queiram pesquisar vulnerabilidades do kernel Linux, de modo que iniciantes possam aprender o fluxo de trabalho de pesquisa e pesquisadores experientes possam aprender novas técnicas.
- O post segue o formato de um artigo de pesquisa e, apesar de extenso, foi estruturado para permitir varredura rápida e extração de conhecimento com facilidade.
- Como forma eficiente de leitura, sugere-se ler a seção de visão geral, dividir a tela para ler e pesquisar, pular para a seção do bug para entender como ele funciona e, em seguida, passar pela seção de prova de conceito para analisar o exploit.
1. Visão geral
- Neste post, é apresentada uma nova técnica para explorar, com taxa de sucesso de 93%–99%, um bug 0-day de double-free encontrado em
nf_tables contra kernels Linux reforçados (por exemplo, instâncias do KernelCTF com mitigação).
- Esse exploit só funciona quando
nf_tables está habilitado e namespaces de usuário não privilegiados estão ativados, realizando um KSMA (Kernel-Space Mirroring Attack) que espelha o espaço do kernel no espaço do usuário.
- Com a técnica Dirty Pagedirectory, é possível obter permissões ilimitadas de leitura/escrita sobre endereços físicos, algo alcançado por meio de confusão na tabela de páginas.
2. Informações de contexto
nf_tables é um dos módulos de entrada do kernel Linux e é usado como backend do iptables nas versões recentes.
iptables é uma ferramenta de firewall que usa uma máquina de estados e regras definidas pelo usuário para decidir se um pacote deve passar pelo firewall.
- Um veredito do Netfilter é a decisão de um conjunto de regras do Netfilter sobre se um determinado pacote deve passar pelo firewall, como descartá-lo ou aceitá-lo.
- A estrutura
sk_buff é usada para descrever dados de rede (por exemplo, pacotes IP, quadros Ethernet etc.), e o objeto sk_buff->head contém o conteúdo real do pacote.
- O recurso de fragmentação de pacotes do IPv4 permite enviar um pacote em vários fragmentos IP, e o kernel Linux armazena todos os fragmentos na mesma árvore rubro-negra.
Opinião do GN⁺
- Este post de blog oferece informações muito úteis para quem deseja pesquisar vulnerabilidades do kernel Linux. Em especial, ajuda a entender vulnerabilidades relacionadas a
nf_tables e a aprender como explorá-las.
- A técnica de exploit apresentada pode trazer uma contribuição importante para a pesquisa de segurança em ambientes reais, e por meio dela profissionais de segurança podem compreender melhor as vulnerabilidades dos sistemas e se defender delas.
- No entanto, como essas técnicas de exploit também podem ser usadas com fins maliciosos, é preciso considerar as questões éticas que podem surgir ao compartilhá-las.
- Para fortalecer a segurança do kernel Linux, a comunidade deve continuar encontrando e corrigindo vulnerabilidades, e este post pode ser visto como parte desse esforço.
- Ao conduzir pesquisas de segurança com esta ou técnicas semelhantes, os pesquisadores devem seguir políticas de divulgação responsável e colaborar para que correções sejam distribuídas antes que a vulnerabilidade passe a ser amplamente explorada.
1 comentários
Comentários do Hacker News
CONFIG_INIT_ON_ALLOC_DEFAULT_ON. Veja mais detalhes no README.md. Esse bug foi corrigido em fevereiro de 2024, e é recomendável atualizar os dispositivos Linux.sysctl kernel.unprivileged_userns_clone = 1. Essa é a configuração padrão nos kernels Debian/Ubuntu e Arch Linux. Se você não precisa dessa configuração, é melhor desativá-la./boot/configou/proc/config.gz.CONFIG_INIT_ON_FREE_DEFAULT_ONimpede o exploit, mas as distribuições não compilam isso por padrão. É um bom exemplo de como o hardening do kernel é importante.