前段时间,sudo被曝不要密码就可进行root提权的漏洞引起一片哗然,众多公司纷纷连夜打补丁来避免损失。FreeBuf也对此进行了相应的报道《不用密码就能获取root权限?sudo被曝新漏洞》。
该风波还没过去多久,近期,Linux再一次被曝root提权漏洞,并且这一次的漏洞已经潜伏了长达15年!
近日,研究人员在Linux内核的iSCSI(小型计算机系统接口)子系统中发现了三个漏洞,这些漏洞可以允许具有基本用户权限的本地攻击者在未打补丁的Linux系统上获得root权限。
iSCSI(小型计算机系统接口)定义了并行I/O总线和数据协议,用于将各种外围设备(磁盘驱动器、磁带驱动器、调制解调器、打印机、扫描仪、光驱、测试设备和医疗设备)连接到主机。
不过,这些安全漏洞只能在本地被利用。也就是说,攻击者必须先利用别的漏洞或者使用其他攻击载体来访问易受攻击的设备,才能进行后续攻击。
研究人员表示在2006年iSCSI内核子系统的初始开发阶段该漏洞就已经存在,但直到现在才被发现,当中相隔15年。
根据研究人员的说法,这些漏洞影响了Linux的所有发行版本。但是幸运的是,易受攻击的scsi_transport_iscsi内核模块在默认条件下不会被加载。
但是,当攻击者将某个版本视为目标时,该模块就可以被加载并且被利用来进行root提权。
两种情况下Linux内核模块会进行加载:检测到新硬件或者内核函数检测到某个模块丢失。而后一种隐式自动加载情况更容易被滥用,并且很容易被攻击者触发,使他们能够增加内核的攻击面。
研究人员补充表示,在CentOS 8、RHEL 8和Fedora系统上,如果安装了rdma-core包,非特权用户可以自动加载所需模块。
但在Debian和Ubuntu系统上,只有在RDMA硬件可用的情况下,rdma-core包才会自动加载所需的两个内核模块。因此,该漏洞的范围较为有限。
此次的漏洞可以被利用来绕过一些组织漏洞的安全功能,如内核地址空间布局随机化(KASLR)、主管模式执行保护(SMEP)、主管模式访问防止(SMAP)和内核页表隔离(KPTI)。
同时,这三个漏洞可能导致本地权限提升:
CVE-2021-27365:堆缓冲区溢出(本地权限提升、信息泄露、拒绝服务)。 该漏洞是通过将iSCSI字符串属性设置为大于一页的值,然后试图读取它从而触发的。 更具体地说,一个无权限的用户可以向iSCSI子系统(在drivers/scsi/scsi_transport_iscsi.c中)发送netlink消息,该子系统通过drivers/scsi/libiscsi.c中的helper函数设置与iSCSI连接相关的属性,如主机名、用户名等,这些属性的大小仅受netlink消息的最大长度限制(根据处理消息的具体代码,可以是232或216)。 CVE-2021-27363:内核指针泄露(信息泄露)。 该漏洞可以用来确定iscsi_transport结构的地址。 CVE-2021-27364:越界读取(信息泄露,拒绝服务)。 与第一个漏洞类似,一个无权限的用户可以制作指定缓冲区大小的网链消息,而驱动程序无法验证,导致可控的越界读取。
此外,这三个漏洞还可能导致数据泄露,并可能被利用来触发拒绝服务条件。
由于堆溢出的非确定性,第一个漏洞可以作为一个不可靠的本地DoS。 然而,当与信息泄露相结合时,该漏洞可以进一步被利用为LPE,允许攻击者从非特权用户帐户升级到root。并且这个漏洞也可以用来泄露内核内存。 第二个漏洞(内核指针泄露)影响较小,只能作为潜在的信息泄露。 第三个漏洞(越界读取)的功能也仅限于作为潜在的信息泄露,甚至是不可靠的本地DoS。
以上三个漏洞都在5.11.4、5.10.21、5.4.103、4.19.179、4.14.224、4.9.260和4.4.260更新中进行了修补,修补程序在3月7日开始在主线Linux内核中提供。对于EOL不支持的内核版本,如3.x和2.6.23,将不会发布补丁。
如果用户已经安装了其中一个Linux内核版本,则其设备不会被利用这些漏洞进行攻击。