A empresa Qualys identificou uma vulnerabilidade crítica (CVE-2023-6246) na biblioteca padrão em C, Glibc, que permite, através de manipulações no lançamento de aplicativos SUID, a execução de código com privilégios elevados. Pesquisadores conseguiram desenvolver um exploit funcional que permite obter privilégios de root por meio da manipulação de argumentos da linha de comando ao iniciar a ferramenta su.
A vulnerabilidade é causada por um estouro de buffer na função __vsyslog_internal(), usada quando chamando as funções syslog() e vsyslog(). O problema surge devido a um erro ao tentar imprimir um nome de aplicativo muito longo através do macro SYSLOG_HEADER. Ao tentar expandir o buffer considerando o nome longo, ocorre uma falha, após a qual os dados são gravados no buffer antigo de tamanho menor.
Ao organizar um ataque através da ferramenta su, o atacante pode alterar o nome do processo ao iniciar o aplicativo, substituindo o valor de argv[0], que é usado para obter informações sobre o nome do programa ao registrar, e conseguir uma sobreposição controlada de dados além do buffer alocado. Em seguida, o estouro pode ser utilizado para sobrescrever a estrutura nss_module na biblioteca nss para criar uma biblioteca compartilhada e carregá-la com privilégios de root.
O problema se manifesta a partir do lançamento do glibc 2.37, publicado em agosto de 2022, que inclui uma alteração que trata a situação de tentativa de gravar mensagens excessivamente longas. A correção que introduziu a vulnerabilidade foi retroportada para a ramificação do glibc 2.36 e para pacotes de distribuições com versões mais antigas do glibc, uma vez que a correção em questão solucionava a vulnerabilidade CVE-2022-39046, que leva a vazamentos de dados da heap. Assim, a correção de uma vulnerabilidade não crítica resultou em um problema crítico. Notavelmente, uma vulnerabilidade semelhante na função vsyslog() da biblioteca libc 5.4.3 foi relatada em 1997.
A vulnerabilidade foi confirmada no Debian 12/13, Ubuntu 23.04/23.10 e Fedora 37-39. A operação do exploit para permitir que um usuário não privilegiado obtenha privilégios de root foi demonstrada em um ambiente Fedora 38 totalmente atualizado, com todos os mecanismos de proteção padrão habilitados. A vulnerabilidade pode ser explorada apenas localmente, pois exige o envio de mais de 1024 bytes através do parâmetro argv[0] ou argumento ident na função openlog().
A correção da vulnerabilidade foi incluída há algumas horas na base de código do Glibc e fará parte da atualização do Glibc 2.39 de amanhã, juntamente com a correção de mais duas vulnerabilidades (CVE-2023-6779, CVE-2023-6780), que também afetam o código __vsyslog_internal() e levam a um estouro de buffer. Além disso, a empresa Qualys alertou sobre a descoberta de um estouro de buffer na implementação da função qsort(), que não foi classificada pelos desenvolvedores do Glibc como uma vulnerabilidade, uma vez que a exploração implica o uso de uma função de comparação não usual como argumento ao chamar qsort.
O status da correção de vulnerabilidades nas distribuições pode ser avaliado nas seguintes páginas: Debian, Ubuntu, SUSE, RHEL, Fedora, Arch Linux, Gentoo, Slackware. A testagem da vulnerabilidade do sistema pode ser feita com o seguinte comando: $ (exec -a "`printf ‘28000x’ 1`" /usr/bin/su < /dev/null)
Fonte: opennet.ru
