當前位置:
首頁 > 新聞 > CVE-2019-11815:Linux kernel漏洞

CVE-2019-11815:Linux kernel漏洞

Linux kernel中存在漏洞是非常常見的,因為有Linux kernel有大約2600萬行代碼,單2018年就新添加了338萬行,刪除了251萬行代碼。代碼的量和複雜性說明了其中必然存在漏洞。

2019年5月8日,漏洞資料庫NVD(National Vulnerability Database)發布了CVE-2019-11815——Linux kernel漏洞的詳情,其CVSS 3.0評分為8.1。漏洞的詳情包含網路攻擊向量,不需要許可權和管理級的代碼執行,CIA影響的評分都是high。除了攻擊向量、所需許可權外,CIA等都影響著CVSS的評分。

CVSS 3基準評分的一個部分就是攻擊複雜性,CVE-2019-11815漏洞的攻擊複雜性也是high。也就是說成功攻擊需要特定的場景,而這種場景往往很難得到。根據CVSS 3.0標準,評級意味著成功的攻擊需要依靠攻擊者的控制以外的條件,而且成功的攻擊需要投入大量精力和準備過程以達到攻擊所需的條件。

下面分析該漏洞以解釋為什麼該評分標準從技術上是準確的,尤其是將攻擊複雜度評級納入考慮以後,並不能真正代表對企業和用戶的風險。

漏洞分析

NVD對該漏洞的描述為Linux kernel 5.0.8之前版本的net/rds/tcp.c中的rds_tcp_kill_sock存在的問題,其中存在競爭條件導致的與net namespace cleanup相關的UAF。這是從代碼角度對該漏洞進行的準確描述,但是缺乏一些關鍵信息可能會導致我們對TCP產生警示。

該漏洞的第一個主要組件是Reliable Datagram Sockets (RDS,可靠數據報套接字)這是一個Oracle開發的socket介面和協議,允許單個傳輸socket向不同終端發送和接收大量數據。該漏洞其實是TCP被用作底層傳輸協議時RDS的漏洞:RDS頭部的應用數據會通過TCP封裝和發送,埠是16385,然後解封裝並傳遞給RDS socket。除了Oracle的文檔和維基百科的介紹,沒有關於RDS的更多信息。協議的模糊性加上原有的本地許可權提升漏洞,導致許多Linux發布版都將與RDS相關的kernel模塊加入了黑名單。這就減少了該漏洞帶來的潛在危害。

如果rds和rds_tcp kernel模塊啟用?

如果rds和rds_tcp kernel模塊啟用會怎麼樣呢?在TCP上使用RDS時,底層的TCP傳輸完全是由kernel來管理的。也就是說,當客戶端建立了新的RDS socket時,kernel會在tcp_connect.c的中打開TCP socket,rds_tcp_conn_path_connect()是由threads.c中的worker線程函數 rds_connect_worker()調用的。

當TCP客戶端socket持續連接失敗該漏洞的RDS部分就會出現。如果TCP connect()連接失敗,就會調用函數rds_tcp_restore_callbacks(),並設置rds_tcp_connection 結構中的t_sock 指針為NULL,這是一個完全合理的行為。

該漏洞的第二個主要組件是網路命名空間(network namespaces)。Network namespaces考慮為給定的命名空間使用單獨的介面和路由表,一般來說整個操作系統都回共享相同的介面和路由表。Docker這樣的平台也使用這個命名空間功能來為容器提供網路隔離。

RDS-TCP socket在 rds_tcp_init()中初始化後,就會調用network namespaces 函數register_pernet_device() ,傳遞一個指針給pernet_operations結構rds_tcp_net_ops,其中含有初始化後和退出函數在網路命名空間初始化、移除或socket活動時執行。

退出函數 rds_tcp_exit_net()會調用rds_tcp_kill_sock(),用來執行RDS-TCP socket不同部分的清除。該過程的一部分就是清除連接列表的創建tmp_list。

每次連接都會做的其中一個檢查是查看TCP socket使用的t_sock指針是否為null,如果為空,t_tcp_node就不會加入到cleanup list中。因此,對這些節點也不會調用rds_conn_destroy() ,其中一些cleanup也不執行。

更重要的是rds_connect_worker()線程並不是停止,會繼續嘗試重新連接。最後,底層的網路結構會就釋放,這也是命名空間清理的一部分,也可能會繼續被運行的rds_connect_worker()使用,觸發UAF漏洞。從技術上來講,該漏洞可以描述為不需要特權,如果成功利用可能導致管理級代碼執行。

修復方法也很簡單:系統管理員只需要確保有漏洞的模塊禁用就可以了,或安裝更新的kernel。

CVE-2019-11815的真正風險

CVE-2019-11815怎麼樣才能被攻擊者利用呢?潛在的受害者首先要載入拉黑的rds和rds_tcp模塊,如果不載入,那麼之後的步驟也就不可能了。因為TCP connect()只有RDS-TCP客戶端執行而不是伺服器,因此如果攻擊者發現了目標,就會使目標連接攻擊者控制的同一網路命名空間中的RDS-TCP socket。

攻擊者的下一個工作就是使用底層的TCP連接產生失敗,同時清理目標用戶的網路命名空間,這是一個遠程攻擊者沒有機會執行的任務。因為競爭條件是很難利用的,並且需要大量的嘗試。

將這些條件都考慮進去的話,該漏洞在不經過認證被遠程利用的可能性幾乎為0。當然也有非常小的機會可能被用作本地許可權提升,但這要求拉黑的rds和rds_tcp模塊是載入的。

雖然該漏洞的CVSS評分從技術上將是準確的,但是用戶仍然需要意識到攻擊發生的可能性是根據根據的複雜性和攻擊所需的條件確定的。大多數Linux伺服器在遠程環境下是不受該漏洞影響的。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

CVE-2019-0708漏洞:RDP=Really DO Patch?
後邊界時代驟增的移動安全風險探析

TAG:嘶吼RoarTalk |