在Christian Brauner发现这个VFS错误后,DigitalOcean的Seth Forshee开始修复可能使用非初始用户名空间挂载文件系统的情况。这可能会导致安全问题、错误,甚至磁盘损坏。但好消息是,具有非初始用户命名空间的挂载在范围上仅限于特权用户。
这是一个由 2018 年编写的补丁引入的错误,自 2019 年 2 月以来在主线 Linux 内核中发现。因此,预计此 VFS 修复将向后移植到当前支持的稳定 Linux 内核系列。
Brauner在VFS修复拉取请求中解释了问题:
“我注意到特权用户可以在 sb->s_user_ns 中挂载大多数具有非初始用户命名空间的文件系统。当在非 init 命名空间中调用 fsopen() 时,调用者的命名空间将以 fs_context->user_ns 的形式记录。如果返回的文件描述符随后传递给在 init_user_ns 中享有特权的进程,则该进程可以调用 fsconfig(fd_fs, FSCONFIG_CMD_CREATE*),创建一个新的超级块,并将 sb->s_user_ns设置为名为 fsopen() 的进程的命名空间。
这是有问题的,因为已知只有引发FS_USERNS_MOUNT的文件系统才能支持非初始s_user_ns。其他人可能会遇到安全问题、磁盘损坏或内核完全崩溃。通过将此类委派限制为允许FS_USERNS_MOUNT的文件系统来防止这种情况。
请注意,此委托需要一个特权进程才能实际创建超级块,因此特权进程正在合作,或者必须有人欺骗特权进程在它不知道其来源的 fscontext 文件描述符上运行(一个愚蠢的想法)。
这个虫子可以追溯到大约 5 年前。
它只是一个 11 行补丁(嗯,实际上是三行代码,其余代码注释)来抵御这个问题。代码现在正在等待拉取到主线内核,然后向后移植到稳定的 Linux 内核系列。