1 pontos por GN⁺ 2024-03-27 | 1 comentários | Compartilhar no WhatsApp

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

 
GN⁺ 2024-03-27
Comentários do Hacker News
  • Foi publicado um exploit de prova de conceito para o CVE-2024-1086. As versões afetadas vão do kernel Linux v5.14 ao v6.6, e do v6.4 ao v6.6 isso depende da variável de configuração do kernel 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.
  • Entre as mudanças do patch, há uma parte que reverte um commit anterior, e não está claro por que esse commit foi feito. Fico curioso se alguém investigou o histórico disso.
  • Esse exploit depende de acesso a namespaces de usuário sem privilégios: 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.
  • Ao escrever posts de blog sobre segurança, existe uma preocupação constante sobre quanto conhecimento prévio assumir do leitor. Não é fácil definir o público-alvo e fornecer informação de contexto suficiente. Este texto deve servir como um guia útil para quem está começando a pesquisar.
  • Questiona-se por que namespaces de usuário sem privilégios ficam ativados por padrão e por que se dá aos usuários, por padrão, a capacidade de executar coisas como iptables.
  • Há dúvida sobre como esse tipo de exploit ainda é possível apesar de medidas modernas de segurança, como ASLR. Em uma disciplina universitária, houve prática com binários contendo vários bugs, o que mostrou na prática como o desenvolvimento de exploits em ambientes reais é difícil.
  • Tentei executar o exploit em um sistema Debian vulnerável, mas não houve escalada de privilégios, e na segunda execução o sistema travou completamente. É importante aplicar o patch.
  • É possível verificar a configuração atual do kernel nos arquivos /boot/config ou /proc/config.gz.
  • Segundo o Ubuntu, todas as versões LTS são afetadas, e o problema foi corrigido nos kernels mais recentes com patch. Xenial e Bionic são informações para usuários com suporte estendido.
  • CONFIG_INIT_ON_FREE_DEFAULT_ON impede o exploit, mas as distribuições não compilam isso por padrão. É um bom exemplo de como o hardening do kernel é importante.