为什么非特权用户无法使用 chroot(2)?

为什么非特权用户无法使用 chroot(2)?

为什么chroot(2)非特权用户无法使用?

我不明白互联网上现有的答案。例如这个https://lists.freebsd.org/pipermail/freebsd-security/2003-April/000123.html

sudo如果/etc/sudoers/etc不属于root,真的会起作用吗?非特权用户不能在 chroot 中创建 root 拥有的 setuid 二进制文件,对吗?

非特权用户究竟如何破坏 chroot 环境?

我只能想到类似的事情

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

其中XYZ表示一些备份实例,其中管理员确实搞砸了并允许我的用户进行危险的操作。但这有点特别。chroot(2)如果非特权用户可以使用,是否有更直接的利用方法?

答案1

chroot(2)不会更改工作目录,因此调用后.可以在以/.然后,您可以使用相对路径从 chroot 内部运行任何 setuid 二进制文件。可能有很多方法可以利用这一点。例如,通过修改/etc/ld.so.preloadchroot 目录内部,您可以使用 root 权限执行任意代码。你可以看一下例子

答案2

普通用户无法创建 setuid 二进制文件,但没有什么可以阻止他创建到现有 setuid 二进制文件的硬链接。因此,如果他对与 相同的文件系统上的某个目录具有写权限/usr/bin,他可以将监狱放入此目录中,创建指向su或 的硬链接sudo,然后将自定义的/etc/passwdand/etc/sudoers放入监狱中。

也许这不适用于sudo,因为它可能会检查它/etc/sudoers是否由 root 拥有。但我敢打赌su不会检查 的所有权/etc/passwd

答案3

根据布拉德·斯宾格勒的说法https://forums.grsecurity.net/viewtopic.php?f=7&t=2522,有一个简单的方法可以使用CAP_SYS_CHROOT(使用的功能chroot(2)

CAP_SYS_CHROOT:通用:来自 Julien Tinnes/Chris Evans:如果您对与 suid root 二进制文件相同的文件系统具有写访问权限,请使用后门 libc 设置 chroot 环境,然后在 chroot 中执行硬链接的 suid root 二进制文件并获得完全 root通过您的后门获得特权

相关内容