是什么让 nsjail 的 disable_no_new_privs 变得危险?

是什么让 nsjail 的 disable_no_new_privs 变得危险?

的文件监狱指出这disable_no_new_privs是危险的:

--disable_no_new_privs   
Don't set the prctl(NO_NEW_PRIVS, 1) (DANGEROUS)

内核文档指出

例如,setuid 和 setgid 位将不再改变 uid 或 gid;

所以现在我想知道:在我需要 setuid 二进制文件的情况下,设置会有什么风险disable_no_new_privs: true

内核文档说

no_new_privs + chroot 比单独使用 chroot 的危险性要小得多。

但这是否意味着存在 nsjail 越狱的危险?或者这里的危险是什么意思?

答案1

双重否定令人困惑。当该选项为真时,nsjail 没有设置标志

if (!nsjconf->disable_no_new_privs) {
        if (prctl(PR_SET_NO_NEW_PRIVS, 1UL, 0UL, 0UL, 0UL) == -1) {

这并不意味着一定存在已知的漏洞或逃逸。一般来说,保护被授权执行任何操作的进程并因此找到逃逸方法要困难得多。

不使用 setuid 或 fcap 程序的好处是,如果这些程序被攻陷,则它们会以更高的权限执行操作。启用它(未设置 jail 选项 disabled),内核可以保证,即使 setuid 程序被攻陷并执行恶意 execve(),也不会执行任何特权操作。例如,假设有人对 sudo 进行了错误的更新。没有 setuid 会使 sudo 变得毫无用处,但您需要其他方法来更改有效用户。

与Linux上的ping程序进行比较。Fedora 让每个人都发送 ICMP 回显,允许人们进行网络诊断而无需 cap_net_admin 或 cap_net_raw。可能存在无需额外权限即可完成应用程序所需的任何操作的方法。

相关内容