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