
Escalada de Privilégio Local para Root via Sudo chroot no Linux
Elevação Local de Privilégio para Root via Sudo chroot no Linux.
Para a notícia, pode ler aqui:
TL;DR e CMIIW Então, o sudo é um comando para executar algo como admin/root. O usuário pode executar sudo se estiver no grupo sudoers. Mas há um bug no binário sudo que permite que um usuário comum sem permissão execute sudo e se torne root.
O bug está na opção de comando sudo --chroot. Esse chroot permite executar comandos em um diretório temporário. O problema é que o sudo verifica o arquivo de configuração dentro desse diretório temporário antes de verificar se o usuário pode executar sudo ou não.
Se esse arquivo de configuração puder, de alguma forma, ser editado e apontar para um código modificado para obter acesso root, é possível obter acesso root sem autenticação ou estar registrado como sudoer. Porque no processo, para obter essa informação, o sistema eleva o comando como root (temporariamente).
Qual é o arquivo de configuração? /etc/nsswitch.conf. Esse arquivo é usado pelo sistema para saber, por exemplo, em qual grupo o usuário está, etc. Dentro desse arquivo nsswitch, é mais ou menos assim:
<database> <source1> <source2> ... <sourcen>
passwd files systemd
group files systemd
shadow files
gshadow files
...
Agora! Se a fonte de dados usada for files, o nss chamará uma biblioteca chamada libnss_files.so.2. Esse arquivo contém código C, e se editarmos, é muito provável que possamos obter acesso root. Porque o sistema executa isso como root mesmo que o comando não seja executado por um usuário sudoers. Pode ser visto no arquivo exploit.sh.
Resumindo:
/etc/nsswitch.conf em uma pasta que controlamos.