昨天 發布了有關 Linux 內核漏洞的信息 並且已經被歸類為 CVE-2021-3609。 這個漏洞 允許本地用戶提升他們在系統上的權限 由於 CAN BCM 協議實現中的競爭條件,並在 Linux 內核的 2.6.25 到 5.13-rc6 版本中表現出來。
裁決利用 因為 CAN BCM 協議允許您註冊自己的消息管理器 控制器的局域網 (CAN) 並將其連接到特定的網絡套接字。 當傳入消息到達時,調用該函數 bcm_rx_handler () 攻擊者可以利用競爭條件並在執行時強制關閉網絡套接字 bcm_rx_handler()。
socket關閉時問題就來了 該函數被調用 bcm_release(), 在其中釋放分配給結構的內存 bcm_op 和 bcm_sock, 繼續在處理程序 b 中使用cm_rx_handler () 它仍在運行,因此會出現導致訪問已經釋放的內存塊(釋放後使用)的情況。
這是最近報告的 Linux 內核 CAN BCM 網絡協議中的錯誤 (CVE-2021-3609) 的公告,範圍從版本 2.6.25 到主線 5.13-rc6。
該漏洞是 net/can/bcm.c 中的競爭條件,允許將權限提升到 root。 該問題最初由 syzbot 報告,Norbert Slusarek 被證明是可利用的。
攻擊歸結為打開兩個 CAN BCM 套接字並將它們綁定到 vcan 接口. 在第一個連接器中,您調用 發送消息() 與指標 接收設置 為傳入的 CAN 消息配置控制器,並在第二個連接器上調用 發送消息() 向第一個連接器發送消息。
消息到達後, bcm_rx_handler() 調用被觸發,攻擊者在適當的時候關閉第一個套接字, 這導致推出 bcm_release() 以及結構的啟動 bcm_op 和 bcm_sock,雖然工作 bcm_rx_handler () 尚未完成。
通過操縱 bcm_sock 的內容,攻擊者可以覆蓋指向 sk-> sk_data_ready (sk) 函數的指針,重定向執行,並使用面向返回的編程 (ROP) 技術覆蓋 modprobe_path 參數並使他的代碼以 root 身份運行.
在使用 ROP 技術時,攻擊者不會試圖將他的代碼 在記憶, 但它運作於 的碎片 機器指令已經可用 在加載的庫中,以控制返回語句結尾(通常,這些是庫函數的結尾)。
在啟用了用戶命名空間的系統上創建的容器中的非特權用戶可以獲得執行攻擊所需的權限。 例如,用戶命名空間默認包含在 Ubuntu 和 Fedora 中,但未在 Debian 和 RHEL 中啟用。
我的漏洞利用嘗試集中在來自提交 bf5.4aa1e74 的版本> = 86-rc111 的內核上。 我沒有研究使用 tasklet 來利用 5.4-rc1 之前的內核,但是利用較舊的內核似乎也是可行的。
有人提到 發現漏洞的研究人員能夠準備利用 在具有 5.4 及更高版本內核的系統上獲得 root 權限,包括成功攻擊 Ubuntu 20.04.02 LTS 的可能性。
漏洞利用的工作被簡化為構建對類似塊(“小工具”)的調用鏈以獲得所需的功能。 攻擊需要訪問以創建 CAN 套接字和配置的 vcan 網絡接口。
終於 提到問題依然存在 在大多數發行版上,但發布相應的補丁需要幾天時間。
如果你有興趣了解更多,你可以諮詢 以下鏈接。