發現並修復了令人討厭的 Linux 核心錯誤
最近在 Linux 核心中發現了一個堆溢位錯誤。該補丁現已在大多數主要 Linux 發行版中提供。
大多數報告的 Linux「安全」錯誤實際上並不是 Linux 錯誤。例如,安全供應商 CrowdStrike 關於最大的基於 Linux 的惡意軟體家族的報告實際上是關於 telnet、SSH 和 Docker 的系統管理安全錯誤,而不是 Linux。但是,這並不意味著 Linux 沒有安全漏洞。 例如,一個新的令人討厭的 Linux 核心問題剛剛出現。
在這個例子中,Linux 核心的 fs/fs_context.c 程式中的 Legacy_parse_param 存在堆溢位錯誤。此參數在 Linux 檔案系統中用於安裝超級區塊建立和重新安裝超級區塊重新配置期間使用。超級區塊記錄檔案系統的所有特徵,例如檔案大小、區塊大小、空白儲存區塊和已滿儲存區塊。所以,是的,這很重要。
Legacy_parse_param()“PAGE_SIZE - 2 - size”計算被錯誤地設定為無符號類型。這意味著較大的“大小”值會產生較高的正值,而不是預期的負值。哎呀。
反過來,這意味著您將資料複製到為其分配的記憶體片之外。而且,正如所有程式設計師都知道的那樣,寫入超出程式應該存取的記憶體是一件可怕的事情。
Rust 被納入 Linux 的一個重要原因是 Rust 讓這種記憶體錯誤更難發生。每個 C 開發人員都知道,C 程式中的記憶體分配很容易出錯。
那麼,情況到底有多糟呢?透過通用漏洞評分系統 (CVSS) v3.1 評分測試,它獲得了可靠的 7.7 分。這被認為是一個高安全漏洞。
本地攻擊者可以使用它來提升使用者權限或使系統崩潰。這可以透過觸發此整數溢出的特製程序來完成。完成後,執行任意程式碼並授予攻擊者 root 權限就很簡單了。
要利用它需要啟用 CAP_SYS_ADMIN 權限。如果是這種情況,非特權本機使用者可以開啟不支援檔案系統上下文應用程式介面 (API) 的檔案系統。在這種情況下,它會退回到遺留處理,並且從那裡,該缺陷可以升級攻擊者的系統權限。
利用漏洞並不像您想像的那麼難。它的發現者、Linux 核心開發人員 William Liu 報告說,他創建了針對 Ubuntu 20.04 的漏洞利用程序,以及針對 Google 強化的容器優化 (COS) 的容器逃逸漏洞利用程序。
此安全漏洞於 2019 年 2 月 28 日在 Linux 5.1-rc1 核心中引入。現在它存在於所有 Linux 核心中。是的,全部。幸運的是,補丁已經打好了。
您也可以透過在 Red Hat Linux 系列上使用以下 shell 程式碼將 user.max_user_namespaces 設定為停用使用者命名空間來停用它。
- echo "user.max_user_namespaces=0" > /etc/sysctl.d/userns.conf
- sysctl -p /etc/sysctl.d/userns.conf
在 Ubuntu 和相關發行版上,您可以使用以下 shellcode 來保護您的系統:
- sysctl -w kernel.unprivileged_userns_clone=0
但是,請記住,您必須在容器化 Linux 發行版(例如 Red Hat OpenShift Container Platform)上擁有可用的命名空間,因為它需要啟用此功能。在這些情況下,您需要在發行商提供補丁後立即修補您的 Linux 發行版。
確保安全,保持補丁。