
Visualização, Fuzzing, Exploit e Patch da Vulnerabilidade Baron Samedit
Visualização, Fuzzing, Exploit e Patch da Vulnerabilidade Baron Samedit
Veja o relatório »
Francesco Marchiori
·
Alessandro Lotto
Qualquer sistema operacional baseado em Unix é equipado com o comando sudo que permite uma escalada temporária de privilégios de root para os usuários que devem fazê-lo. O sudo oferece, então, uma funcionalidade crítica que, se abusada, pode levar ao comprometimento da segurança e confiabilidade do próprio sistema. Devido à sua importância dentro do sistema operacional, o código fonte do sudo é submetido a testes e revisões frequentes. Estas levaram à descoberta de uma vulnerabilidade de estouro de heap, denominada CVE-2021-3156, que surpreendentemente esteve oculta por quase 10 anos. Nem mesmo técnicas de fuzzing, uma das técnicas mais usadas para descoberta de bugs e vulnerabilidades, permitiram detectá-la antes. Neste artigo, analisamos em detalhes a vulnerabilidade CVE-2021-3156 do sudo, desde a vulnerabilidade de estouro de buffer até como ela pode ser explorada para obter um shell de root mesmo sendo um usuário não privilegiado ou não tendo permissão para usar o comando sudo.
No diretório Visualization existem alguns scripts que usamos para visualizar como os argumentos são analisados com ou sem caracteres de barra invertida e para analisar como as variáveis de ambiente afetam o layout do heap, a fim de compreender melhor a estrutura do exploit proposto.
No diretório Fuzzing estão os arquivos necessários para realizar fuzzing na versão vulnerável do sudo. Também é relatado como ser capaz de fuzzar e como resolver os problemas que impedem o AFL de funcionar imediatamente, explicando assim como a vulnerabilidade ficou oculta por quase 10 anos.
No diretório Exploit estão os arquivos necessários para realizar o ataque em outra versão vulnerável do sudo. Exploramos a população de memória através de variáveis de ambiente para realizar heap feng shui e sobrescrever o nome do objeto service_user, a fim de executar nosso próprio código em vez de carregar uma biblioteca.
No diretório Patch existe um script overflow_simulation_patch.c que simula o comportamento do estouro e o corrige com código adicional que escrevemos. Como os desenvolvedores do projeto Sudo decidiram corrigir o fluxo da vulnerabilidade em vez do código em si, mostramos uma abordagem diferente e como ela pode ser corrigida com apenas algumas linhas de código.