FUSE CNNVD-201505-472本地root权限提升漏洞修复建议


ubuntu和debian因为fusermount二进制调用变量不严谨导致曝出高危本地root权限提升漏洞。
        该漏洞的产生原因是由于fusermount二进制调用setuid的(geteuid())重置RUID时,它调用/bin/mount才能使用的特权挂载选项, 通常限制如果RUID!= euid。在理论上,因为fusermount可以消除参数以确保它的安全。正如代码中:

然而,由于它认为这是被root用户权限调用,它允许通过环境变量进入调试模式,不会管是否为安全的非特权用户和fusermount没有清除的。因此,错误是环境变量不清除时调用RUID = 0方式。可以通调试功能在/etc/mtab里设定LIBMOUNT_MTAB变量后,就可以被滥用覆盖任意文件。
        这次红帽子公开说明企业版是不受影响的,RHEL7中/etc/mtab不是一个普通的文件,而是链接到/proc/self/mtab下的,可以防止fusermount运行挂载和卸载。即使使用libmount支持调用libmount_mtab环境变量可以挂载的,它也不是由fusermount控制的,是使用类似于目前的Fedora版本。
        而在RHEL5和6版本中,/etc/mtab 是一个正常文件,因此fusermount可以运行挂载和卸载命令。然而,在RHEL 6和更早系统版本中挂载和卸载不使用libmount(在RHEL 6,libmount是UTIL-linux的-NG包的一部分,但不是使用mount和umount命令;在RHEL5中,使用util-linux的包是不包含libmount库)。
        而且RHEL 7虚拟机管理程序包含libguestfs-winsupport包,其中包括NTFS-3G。但是,NTFS-3G是不是安装为setuid root的,所以不存在权限提升的风险。
        攻击POC演示:先以普通用户登录(没有sudo权限的)

执行攻击POC,给/bin/dash加上s权限(当我们将一个程序文件执行成为进程的时候,该程序文件的拥有者(owner)和拥有组(owner group)可以被存储成为进程的存储身份。在随后进程的运行过程中,进程就将可以选择将真实身份或者存储身份复制到有效身份,以拥有真实身份或者存储身份的权限)。通过设置LIBMOUNT_MTAB,mtab可以覆盖任意文件用来设置exp。

看到红色提示框内容标识修改成功,在看下/etc/bash.bashrc内容是否已经被替换成提权文件。换个管理员账号su–到root去。

再切换到demo用户去执行/bin/dash看是否获得root权限。

           如此root提权成功。

最新文章