SCSI 定义了并行I/O 总线和数据协议来连接硬盘驱动、打印机、扫描仪、光驱、测试设备、医疗设备等外部设备到本地计算机。近日,GRIMM在Linux kernel SCSI (Small Computer System Interface,小计算机接口)组件中发现了3个安全漏洞,分别是:CVE--27363、CVE--27364、CVE--27365。
第一个漏洞CVE--27365是iSCSI 子系统中的堆缓存溢出漏洞。通过设置iSCSI string 属性为大于1页的值,然后读取该值就可以触发该漏洞。具体来说,本特权用户可以通过drivers/scsi/libiscsi.c中的helper 函数发送netlink 消息到iSCSI 子系统(drivers/scsi/scsi_transport_iscsi.c),该子系统负责设置于iSCSI 连接相关的属性,比如hostname、username等。这些属性值的大小是由netlink 消息的最大长度来限制的。由于堆溢出漏洞不确定性的本质,第一个漏洞可以用作不可靠的本地DoS。在融合了信息泄露漏洞后,该漏洞可以进一步用于本地权限提升,即攻击者利用该漏洞可以从非特权的用户账户提升权限到root。
第二个漏洞CVE--27363 也是一个堆溢出漏洞,研究人员发现kernel 指针泄露可以用来确定iscsi_transport 结构的地址。第二个漏洞的影响稍微小一些,可以用于潜在的信息泄露。
第三个漏洞CVE--27364 是libiscsi 模块(drivers/scsi/libiscsi.c) 中的一个越界kernel读漏洞。与第一个漏洞类似,非特权用户可以通过构造制定缓存大小的netlink 消息来触发受控的越界读操作。其中多个用户控制的值是没有经过验证的,包括前一个header的大小的计算。该漏洞可以引发数据泄露,被利用后可以触发DoS 条件。
这些漏洞自开始就存在于系统中了,攻击者利用该漏洞可以从基本用户权限提升到root权限。此外,攻击者利用这些漏洞可以绕过Kernel Address Space Layout Randomization (KASLR)、Supervisor Mode Execution Protection (SMEP)、Supervisor Mode Access Prevention (SMAP)、Kernel Page-Table Isolation (KPTI)等安全特征。漏洞影响scsi_transport_iscsi kernel模块加载的所有Linux 发行版,但好消息是该模块并不是默认设置。目前,Linux已经发布了漏洞补丁更新。
漏洞PoC代码参见GitHub:/grimm-co/NotQuite0DayFriday/tree/trunk/.03.12-linux-iscsi
完整技术分析参见:https://blog.grimm-//03/new-old-bugs-in-linux-kernel.html
如果觉得《linux内核 漏洞扫描 Linux kernel中存在的漏洞》对你有帮助,请点赞、收藏,并留下你的观点哦!