Linux 發現「髒管道」漏洞
Max Kellermann 解釋說,該漏洞影響 Linux Kernel 5.8 及更高版本。
週一,一名網路安全研究人員公佈了 Linux 漏洞的詳細信息,該漏洞允許攻擊者覆蓋任意唯讀檔案中的資料。
該漏洞(CVE-2022-0847)由 Max Kellermann 於 2021 年 4 月發現,但他又花了幾個月的時間才弄清楚到底發生了什麼事。
Kellermann 解釋說,漏洞影響 Linux Kernel 5.8 及更高版本,但在 Linux 5.16.11、5.15.25 和 5.10.102 中已修復。
「這一切都始於一年前,一張關於損壞檔案的支援票。一位客戶抱怨他們下載的存取日誌無法解壓縮。事實上,其中一個日誌伺服器上有一個損壞的日誌檔案;它可以解壓縮。壓縮,但gzip 報告了一個CRC 錯誤,我無法解釋為什麼它被損壞,但我認為夜間分割過程已經崩潰並留下了一個損壞的文件,我手動修復了文件的CRC,關閉了票證,很快就忘記了這個問題, 」凱勒曼說。
「幾個月後,這種情況一次又一次地發生。每次,文件的內容看起來都是正確的,只有文件末尾的CRC 是錯誤的。現在,在幾個損壞的文件中,我能夠更深入地挖掘並發現令人驚訝的類型腐敗的模式出現了。
凱勒曼接著展示了他如何發現這個問題以及人們如何利用它。他最初認為該錯誤僅在特權程序寫入檔案時才可利用,並且取決於時間。
但他後來發現,即使在沒有寫入器的情況下,也可以在沒有時間限制的情況下「在(幾乎)任意位置用任意資料」覆蓋頁面快取。
為了利用該漏洞,攻擊者需要具有讀取權限、偏移量不能在頁邊界上、寫入不能跨越頁邊界並且不能調整檔案大小。
要利用此漏洞,您需要:建立一個管道,用任意資料填充管道(在所有環條目中設定 PIPE_BUF_FLAG_CAN_MERGE 標誌),排空管道(在 struct pipe_inode_info 環上的所有 struct pipeline_buffer 實例中保留設定的標誌) ),將目標檔案(用O_RDONLY 打開)中的資料從目標偏移量之前拼接到管道中,並將任意資料寫入管道中,」他解釋道。
「此資料將覆蓋快取的檔案頁面,而不是建立新的匿名struct pipeline_buffer,因為設定了PIPE_BUF_FLAG_CAN_MERGE。為了讓這個漏洞更有趣,它不僅可以在沒有寫入權限的情況下工作,它還可以在只讀btrfs快照上使用不可變文件以及在只讀掛載(包括 CD-ROM 掛載)上,這是因為頁面緩存始終是可寫入的(由內核),並且寫入管道不會檢查任何權限。
他也分享了他自己的概念驗證漏洞。
Kellermann 於 2 月 20 日將錯誤報告、漏洞利用和修補程式傳送給 Linux 核心安全團隊。
Linux 於 2 月 23 日發布了修復程式(5.16.11、5.15.25、5.10.102),Google 於 2 月 24 日將 Kellermann 的錯誤修復合併到 Android 核心。
Kellermann 和其他專家將該漏洞與 CVE-2016-5195「髒牛」進行了比較,但表示它更容易被利用。
Dirty Pipe PoC (https://t.co/ql5Y8pWDBj) 效果很好。 🤑 pic.twitter.com/OrRYJE5skC
Vulcan Cyber 的 Mike Parkin 表示,任何提供 Linux 系統根級別存取權限的漏洞都是有問題的。
「獲得 root 權限的攻擊者可以完全控制目標系統,並且可能能夠利用該控制權來訪問其他系統。漏洞的緩解因素是它需要本地訪問,這會稍微降低風險,」Parkin 說。
「當攻擊者獲得系統存取權限時,將權限升級到root(POSIX 系列)或Admin(Windows)通常是攻擊者的首要任務,因為這使他們能夠完全控制目標,並可以幫助他們將立足點擴展到其他受害者。
Delinea 的網路安全傳播者 Shweta Khare 指出,今年,多個 Windows 核心、DNS 伺服器 RCE 和 Adobe 嚴重等級漏洞已經成為新聞,因為它們允許攻擊者獲得提升的本地系統或管理權限。
Khare 表示,此類作業系統錯誤和應用程式層級漏洞可能使攻擊者能夠提升權限、在網路內橫向移動、執行任意程式碼並完全接管裝置。