Por que o chroot (2) está indisponível para usuários sem privilégios?

5

Por que chroot(2) está indisponível para usuários sem privilégios?

Não entendo as respostas existentes na Internet. Por exemplo, este link .

O sudo funcionaria realmente se /etc/sudoers e /etc não fossem de propriedade do root? Um usuário não privilegiado não pode simplesmente criar binários setuid de propriedade de root dentro do chroot, ela pode?

Exatamente como um usuário sem privilégios pode subverter o ambiente chroot?

Eu só consigo pensar em algo assim

ln /mnt/backup/XYZ/etc/sudoers $CHROOT/etc/sudoers
ln /usr/bin/sudo $CHROOT/usr/bin/sudo

onde XYZ denota alguma instância de backup em que o administrador realmente errou e permitiu que meu usuário fizesse algo perigoso. Mas isso é meio que especial. Existe alguma maneira mais simples de explorar chroot(2) se estivesse disponível para usuários não privilegiados?

    
por woky 17.03.2016 / 15:09

2 respostas

3

Um usuário comum não pode criar um binário setuid, mas não há nada que o impeça de criar um link físico para um binário setuid existente. Portanto, se ele tiver permissão de gravação em um diretório no mesmo sistema de arquivos que /usr/bin , ele poderá colocar a cadeia nesse diretório, criar um link físico para su ou sudo e colocar um /etc/passwd e /etc/sudoers na cadeia.

Talvez isso não funcione para sudo , pois ele pode verificar se /etc/sudoers é de propriedade de root. Mas aposto que su não verifica a propriedade de /etc/passwd .

    
por 23.03.2016 / 18:57
2

De acordo com Brad Spengler, no link , há uma maneira trivial de escalar para uid 0 usando CAP_SYS_CHROOT (a capacidade de usar chroot(2) :

CAP_SYS_CHROOT: generic: From Julien Tinnes/Chris Evans: if you have write access to the same filesystem as a suid root binary, set up a chroot environment with a backdoored libc and then execute a hardlinked suid root binary within your chroot and gain full root privileges through your backdoor

    
por 19.03.2017 / 03:38