Ubuntu内核OverlayFS权限逃逸误差剖析(CVE-2021-3493)

宣布时间 2021-04-29

背  景


凭证官方先容,OverlayFs误差允许Ubuntu下的外地用户获得root权限。这个误差是Ubuntu系统中的特定问题,在该问题中,未准确验证关于用户namespace文件系统功效的应用程序。由于Ubuntu附带了一个允许非特权的Overlayfs挂载的补丁,团结这个补丁挂载Overlayfs可以权限逃逸,抵达权限提升的目的。


影响版本


Ubuntu 20.10

Ubuntu 20.04 LTS

Ubuntu 18.04 LTS

Ubuntu 16.04 LTS

Ubuntu 14.04 ESM


误差复现


首先审查内核版本,为受影响版本编译exploit后执行,提权乐成。如下图所示:


1.jpg


相关先容


(1)虚拟文件系统

为支持种种本机文件系统,且在同时允许会见其他操作系统的文件,Linux内核在用户历程(或C标准库)和文件系统实现之间引入了一个笼统层。该笼统层称之为虚拟文件系统(Virtual File System)简称VFS,如下图所示:


2.jpg


VFS为所有的文件系统提供了统一的接口,对每个详细文件系统的会见要通过VFS界说的接口来实现。VFS笼统了几个主要的结构:super_block,dentry,inode,file,通过这些结构将一个真实的文件舷笼统到内存中,从而通过管理这些工具对文件系统举行操作。


(2)Overlay文件系统

OverlayFS是一个面向Linux的文件系统服务,着实现一个面向其他文件系统的团结挂载。它于2014年被合并到Linux内核的3.18版本。OverlayFS的主要机制涉及到两个文件系统,提供统一名称的目录时,目录会见合并。除此之外,OverlayFS泛起其中一个所爆发的工具,“上层”文件系统优先。OverlayFS与其他笼罩型文件系统差别,OverlayFS合并的目录子树纷歧定是来自差别的文件系统。效果如下图所示:


3.jpg


其挂载文件的基本下令如下:

mount -t overlay overlay -o lowerdir=lower1:lower2:lower3,upperdir=upper,workdir=work merged。


其中“lower1:lower2:lower3”体现差别的lower层目录,差别的目录使用“:”脱离,条理关系依次为lower1 > lower2 > lower3(注:多lower层功效支持在Linux-4.0合入,Linux-3.18版本只能指定一个lower dir),然后upper和work目录划分体现:upper层目录和文件系统挂载后,用于存放暂时和间接文件的事情基目录(work base dir),最后的merged目录就是最终的挂载点目录。若一切顺遂,在执行以上下令后,overlayfs就乐成挂载到merged目录下了。


(3)capabilitiy

为了举行权限检查,Linux系统将历程分为了两类:privileged历程(effective UID为0)和 unprivileged 历程(effective UID为非0)。privileged历程可以绕过所有的内核权限检查,而unprivileged 历程要举行严酷的权限检查。从2.2版本的内核最先,linux对权限举行了细分,分为多种差别的权限,称之为capability。capability可以作用在历程上,也可以作用在程序文件上。现在,Linux系统上实现了37种capability。


每个历程都有五个capability荟萃:Permitted,Inheritable,Effective,Ambient,Bounding。文件的capability生涯在文件的扩展属性security.capability中。文件有三个capabilitiy荟萃:Permitted,Inheritable,Effective。文件的capability和历程的capability一起来决议在执行execve后,历程的capability。


误差原理


(1)OverlayFS挂载

通常情形下,挂载文件系统是需要特权的,可是在Ubuntu系统中,通俗用户便可以挂载OverlayFS。以5.4.0版本内核主线代码为例,ovl_fs_type结构体界说如下图所示:

 

4.jpg


以Ubuntu20.04的内核补丁linux_5.4.0-26.30.diff为例,补丁如下图所示:

 

5.jpg


添加了fs_flags数据域,并设置为FS_USERNS_MOUNT,体现将允许一个通俗用户在低权限用户命名空间中mout一个overlayfs文件系统。当去mount一个overlayfs文件系统时,挪用路径如下图所示:


6.jpg


会挪用到do_new_mount()函数,该函数是建设一个新的mount,并将其放入namespace树中,实现代码如下图所示:


7.jpg


行2792,获取要挂载的文件系统类型,这里是overlay。然后就是举行capabilitiy校验,如下图所示:


8.jpg


由于fs_flags被设置为FS_USERNS_MOUNT,进入ns_capable()函数,最后通过磨练后,如下图所示:


9.jpg


并且设置current->flags为PF_SUPERPRIV,即在目今历程上设置超等权限,并返回ture。以是通过挂载overlay文件系统,目今历程具备了超等权限。


 (2)权限逃逸

该误差是在setxattr()函数中爆发的,当对文件扩展属性的capabilitiy举行设置时,权限校验不彻底。下面是"SSD Secure Disclosure"披露的Exp执行情形,挪用路径如下图所示:


10.jpg


这里pathname为“./ovlcap/merge/magic”,行468,挪用cap_convert_nscap()函数,将要设置的cap转换到nscap中,如下图所示:


11.jpg


进入cap_convert_nscap()函数,举行相关检测后,若是是capabilitiy版本2,则直接挪用ns_capable()举行磨练,凭证注释可知,若是user有超等权限,直接写入并返回。


12.jpg


毫无疑问,这里一定是磨练通过的。打印要害内存,如下图所示:


13.jpg


寄存器rax为0x1,体现返回ture。由于目今会见的inode属于overlay文件系统的。从cap_convert_nscap()函数准确返回后,随即进入vfs_setxattr()函数,这是第一次进入。接下来就是分发到overlay文件系统对应的ovl_xattr_set()函数中,挪用路径如下图所示:


14.jpg


看ovl_xattr_set()函数的部分实现代码,获取upperdentry和realdentry,如下图所示:


15.jpg


获取后,打印upperdentry和realdentry内存,如下图所示:


16.jpg


凭证overlay文件系统特征,这里的upperdentry和realdentry应该是“./ovlcap/upper”目录下的magic的目录项,打印内存可知,如下图所示:


17.jpg


确定真实的dentry后,第二次挪用vfs_setxattr()函数,如下图所示:


18.jpg


此时的dentry是属于ext3文件系统的,打印内存可知,如下图所示:


19.jpg


到此可知,现实上是对ext3文件系统下的“./ovlcap/upper/magic”举行设置cap。权限逃逸历程如下图所示:


20.jpg


误差使用剖析


"SSD Secure Disclosure"官方已经披露了相关Exp,详细剖析如下:

 

21.jpg


这里界说后面挂载overlay文件系统的文件夹名称:


22.jpg


并自界说xmkdir函数建设这些文件夹:


23.jpg


然后获取目今用户的uid和gid:

 

24.png


建设新的user namespace,由于overlayfs mount需要CAP_SYS_MOUNT能力,因此需要新建一个NEWUSER的namespace,这样就具有CAP_SYS_MOUNT,


25.jpg


CLONE_NEWNS和CLONE_NEWUSER界说:


26.jpg


用目今用户的uid和gid等改写/proc/self下的对应文件,并且用该权限下的namespace挂载overlayfs,前面简介说了,由于ubuntu的补丁保存,该操作是正当的。


27.jpg


 对应目录下可以看到我们修改了的文件,通过/proc/self/exe可以找到目今历程的二进制实体(文件):


28.jpg


继续回到exp中,下面结构了一个cap,改cap界说的permitted为0xffffffff,并且开启Effective,然后将/proc/self下的文件拷贝到merge文件夹下,凭证overlay文件系统特征,这个拷贝历程现实是建设./ovlcap/upper/magic文件,最后挪用setxattr()函数,将cap设置到./ovlcap/merge/magic上面。


29.jpg


凭证前文误差原理先容,权限逃逸后,此时属于ext3文件系统的./ovlcap/upper/magic文件的capabilitiy为all+ep,便可以使用capabilitiy举行权限提升,接着启动./ovlcap/upper/magic历程,该历程的capabilitiy已具备all+ep,然后举行setuid(0)和setgid(0)提权操作,这是被允许的。


30.jpg


补丁跟踪


误差成因在上面已经先容了,这里的补丁也很彻底,将cap_convert_nscap放入了vfs_setxattr中,即每次进入vfs_setxattr()函数时,都先举行权限校验,判断capabilitiy和命名空间的权限是否匹配。


31.jpg


参考链接:

[1] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3493

[2] https://access.redhat.com/security/cve/cve-2021-3493
[3] https://ubuntu.com/security/CVE-2021-3493
[4] https://github.com/briskets/CVE-2021-3493
[5] https://cve.report/CVE-2021-3493.pdf
[6] https://blog.csdn.net/qq_15770331/article/details/96699386
[7] https://lwn.net/Articles/671641/
[8] https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1793458/comments/4
[9] https://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/xenial/commit/?id=98a3740920f8f3362c1ac50598af2dc632f5051a


耀世娱乐起劲防御实验室(ADLab)


ADLab建设于1999年,是中国清静行业最早建设的攻防手艺研究实验室之一,微软MAPP妄想焦点成员,“黑雀攻击”看法首推者。阻止现在,ADLab已通过CVE累计宣布清静误差近1100个,通过 CNVD/CNNVD累计宣布清静误差1000余个,一连坚持国际网络清静领域一流水准。实验室研究偏向涵盖操作系统与应用系统清静研究、智能终端清静研究、物联网智能装备清静研究、Web清静研究、工控系统清静研究、云清静研究。研究效果应用于产品焦点手艺研究、国家重点科技项目攻关、专业清静服务等。


adlab.jpg