Linux kernel iSCSI多个安全漏洞

发布时间 2021-03-15

0x00 漏洞概述

2021年03月12日,GRIMM的研究人员披露Linux 内核的iSCSI子系统中存在3个已有15年历史的安全漏洞,具有普通用户权限的本地攻击者能够利用这些漏洞绕过超级用户模式执行保护(SMEP)、超级用户模式访问保护(SMAP)和内核页表隔离( KPTI),最终获得Linux系统上的root用户权限。

0x01 漏洞详情

image.png

 

SCSI(小型计算机系统接口)是用于传输数据的标准,该数据最初是通过物理电缆(如硬盘驱动器)传输以将计算机与外围设备连接起来的。SCSI是一个古老的标准,最初发布于1986年,主要用于服务器上,而iSCSI本质上是基于TCP的SCSI。

研究人员表示,这些漏洞会影响所有的Linux发行版。默认情况下系统不会加载受影响的scsi_transport_iscsi内核模块,当Linux内核加载模块时,要么是因为检测到新硬件,要么是因为内核函数检测到某个模块丢失,攻击者可能会通过加载该模块并利用该模块来进行权限提升。影响流程图如下:

image.png

此外,在CentOS 8、RHEL 8和Fedora系统上,如果安装了rdma-core软件包,则没有root权限的用户可以自动加载所需的模块。在Debian和Ubuntu系统上,如果RDMA硬件可用,则rdma-core软件包将仅自动加载两个必需的内核模块。因此,这些漏洞将更不容易被利用。

3个漏洞详情如下:

Linux kernel iSCSI缓冲区溢出漏洞(CVE-2021-27365)

由于某些iSCSI数据结构没有适当的长度限制或检查,并且可能超过PAGE_SIZE值。非root用户的攻击者可以发送与iSCSI关联的Netlink消息,并使其长度为Netlink消息的最大长度,并最终可以在目标系统上提升权限、造成信息泄露或拒绝服务。

 

Linux kernel iSCSI内核指针泄露漏洞(CVE-2021-27363)

内核指针泄漏可以用来确定iscsi_transport结构的地址。当一个iSCSI传输在iSCSI子系统中注册时,传输的句柄可以通过sysfs文件系统在/sys/class/iscsi_transport/$TRANSPORT_NAME/handle处被非root用户获取。当读取时,show_transport_handle函数(在drivers/scsi/scsi_transport_iscsi.c中)会被调用,从而泄露了该句柄(该句柄实际上是内核模块全局变量中的iscsi_transport结构的指针)。

 

Linux kernel iSCSI越界读取漏洞(CVE-2021-27364)

由于drivers/scsi/scsi_transport_iscsi.c 受到非root用户发送的恶意 Netlink 消息的影响,iSCSI中存在越界读取漏洞。攻击者可以利用该漏洞造成信息泄露或拒绝服务。

 

影响范围

所有已加载scsi_transport_iscsi内核模块的Linux发行版

 

0x02 处置建议

目前这些漏洞均已在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),将不会发布任何补丁。

下载链接:

https://www.kernel.org/

 

0x03 参考链接

https://blog.grimm-co.com/2021/03/new-old-bugs-in-linux-kernel.html

https://www.bleepingcomputer.com/news/security/15-year-old-linux-kernel-bugs-let-attackers-gain-root-privileges/

https://nvd.nist.gov/vuln/detail/CVE-2021-27363

 

0x04 时间线

2021-03-12  GRIMM披露漏洞

2021-03-15  VSRC发布安全通告

 

0x05 附录

 

CVSS评分标准官网:http://www.first.org/cvss/

image.png