ld.so privesc exploit example
Prepare o ambiente
Na seção a seguir, você pode encontrar o código dos arquivos que vamos usar para preparar o ambiente
Crie esses arquivos em sua máquina na mesma pasta
Compile a biblioteca:
gcc -shared -o libcustom.so -fPIC libcustom.c
Copie
libcustom.so
para/usr/lib
:sudo cp libcustom.so /usr/lib
(privilégios de root)Compile o executável:
gcc sharedvuln.c -o sharedvuln -lcustom
Verifique o ambiente
Verifique se libcustom.so está sendo carregado de /usr/lib e que você pode executar o binário.
Exploração
Neste cenário, vamos supor que alguém criou uma entrada vulnerável dentro de um arquivo em /etc/ld.so.conf/:
A pasta vulnerável é /home/ubuntu/lib (onde temos acesso de escrita). Baixe e compile o seguinte código dentro desse caminho:
Agora que criamos a biblioteca maliciosa libcustom dentro do caminho mal configurado, precisamos esperar por um reboot ou que o usuário root execute ldconfig
(caso você possa executar este binário como sudo ou ele tenha o bit suid você poderá executá-lo por conta própria).
Uma vez que isso tenha acontecido, verifique novamente de onde o executável sharevuln
está carregando a biblioteca libcustom.so
:
Como você pode ver, está carregando do /home/ubuntu/lib
e se algum usuário executá-lo, um shell será executado:
Observe que neste exemplo não elevamos privilégios, mas modificando os comandos executados e esperando que o root ou outro usuário privilegiado execute o binário vulnerável, seremos capazes de elevar privilégios.
Outras má configurações - Mesma vuln
No exemplo anterior, simulamos uma má configuração onde um administrador definiu uma pasta não privilegiada dentro de um arquivo de configuração em /etc/ld.so.conf.d/
.
Mas existem outras má configurações que podem causar a mesma vulnerabilidade, se você tem permissões de escrita em algum arquivo de configuração dentro de /etc/ld.so.conf.d
, na pasta /etc/ld.so.conf.d
ou no arquivo /etc/ld.so.conf
, você pode configurar a mesma vulnerabilidade e explorá-la.
Exploit 2
Suponha que você tenha privilégios sudo sobre ldconfig
.
Você pode indicar ao ldconfig
de onde carregar os arquivos de conf, então podemos aproveitar isso para fazer o ldconfig
carregar pastas arbitrárias.
Então, vamos criar os arquivos e pastas necessários para carregar "/tmp":
Agora, conforme indicado no exploit anterior, crie a biblioteca maliciosa dentro de /tmp
.
E finalmente, vamos carregar o caminho e verificar de onde o binário está carregando a biblioteca:
Como você pode ver, tendo privilégios sudo sobre ldconfig
, você pode explorar a mesma vulnerabilidade.
Eu não encontrei uma maneira confiável de explorar essa vulnerabilidade se ldconfig
estiver configurado com o bit suid. O seguinte erro aparece: /sbin/ldconfig.real: Can't create temporary cache file /etc/ld.so.cache~: Permission denied
Referências
Dab machine in HTB
Last updated