Linux kernel中存在15年的漏洞
SCSI 定義了并行I/O 總線和數(shù)據(jù)協(xié)議來(lái)連接硬盤(pán)驅(qū)動(dòng)、打印機(jī)、掃描儀、光驅(qū)、測(cè)試設(shè)備、醫(yī)療設(shè)備等外部設(shè)備到本地計(jì)算機(jī)。近日,GRIMM在Linux kernel SCSI (Small Computer System Interface,小計(jì)算機(jī)接口)組件中發(fā)現(xiàn)了3個(gè)安全漏洞,分別是:CVE-2021-27363、CVE-2021-27364、CVE-2021-27365。
第一個(gè)漏洞CVE-2021-27365是iSCSI 子系統(tǒng)中的堆緩存溢出漏洞。通過(guò)設(shè)置iSCSI string 屬性為大于1頁(yè)的值,然后讀取該值就可以觸發(fā)該漏洞。具體來(lái)說(shuō),本特權(quán)用戶可以通過(guò)drivers/scsi/libiscsi.c中的helper 函數(shù)發(fā)送netlink 消息到iSCSI 子系統(tǒng)(drivers/scsi/scsi_transport_iscsi.c),該子系統(tǒng)負(fù)責(zé)設(shè)置于iSCSI 連接相關(guān)的屬性,比如hostname、username等。這些屬性值的大小是由netlink 消息的最大長(zhǎng)度來(lái)限制的。由于堆溢出漏洞不確定性的本質(zhì),第一個(gè)漏洞可以用作不可靠的本地DoS。在融合了信息泄露漏洞后,該漏洞可以進(jìn)一步用于本地權(quán)限提升,即攻擊者利用該漏洞可以從非特權(quán)的用戶賬戶提升權(quán)限到root。
第二個(gè)漏洞CVE-2021-27363 也是一個(gè)堆溢出漏洞,研究人員發(fā)現(xiàn)kernel 指針泄露可以用來(lái)確定iscsi_transport 結(jié)構(gòu)的地址。第二個(gè)漏洞的影響稍微小一些,可以用于潛在的信息泄露。
第三個(gè)漏洞CVE-2021-27364 是libiscsi 模塊(drivers/scsi/libiscsi.c) 中的一個(gè)越界kernel讀漏洞。與第一個(gè)漏洞類似,非特權(quán)用戶可以通過(guò)構(gòu)造制定緩存大小的netlink 消息來(lái)觸發(fā)受控的越界讀操作。其中多個(gè)用戶控制的值是沒(méi)有經(jīng)過(guò)驗(yàn)證的,包括前一個(gè)header的大小的計(jì)算。該漏洞可以引發(fā)數(shù)據(jù)泄露,被利用后可以觸發(fā)DoS 條件。
這些漏洞自2006年開(kāi)始就存在于系統(tǒng)中了,攻擊者利用該漏洞可以從基本用戶權(quán)限提升到root權(quán)限。此外,攻擊者利用這些漏洞可以繞過(guò)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 發(fā)行版,但好消息是該模塊并不是默認(rèn)設(shè)置。目前,Linux已經(jīng)發(fā)布了漏洞補(bǔ)丁更新。
漏洞PoC代碼參見(jiàn)GitHub:https://github.com/grimm-co/NotQuite0DayFriday/tree/trunk/2021.03.12-linux-iscsi
完整技術(shù)分析參見(jiàn):https://blog.grimm-co.com/2021/03/new-old-bugs-in-linux-kernel.html
本文翻譯自:https://securityaffairs.co/wordpress/115565/security/linux-kernel-flaws.html如若轉(zhuǎn)載,請(qǐng)注明原文地址。