DirtyCred 是個 Linux kernel 漏洞手法,使用類似 DirtyPipe 的手法,但是它除了可以提權外,還可以逃脫容器。這個漏洞透過 use-after-free 的手法來達到提權,前陣子揭露此漏洞的研究人員公布出了相關 poc。
相關文章:資安研究人員發現存於 Linux 核心長達 8 年的 Dirty Cred 漏洞
Use-after-free 是指使用者去使用 (use) 之前曾經釋放 (free) 的記憶體位置,有可能是在程序中釋放了記憶體位置但並沒有同步清除 pointer,或是使用了錯誤的方式互相參照因此呼叫到已經釋放過的位置。
通常攻擊手法為:
- 使用者已經把 used 的記憶體空間 free
- 攻擊者在那塊記憶體空間塞入惡意資料
- 使用者忘記已經 free 過那塊記憶體或設計問題,造成又去使用可以呼叫那塊記憶體的相關 function 等
- 最後使用者就會執行起攻擊者塞入那塊位置的內容
記憶體假如沒被釋出會被程序所佔用,不會被他人使用,並且利用 pointer 來指向分配到的記憶體位置。進行釋出後就會被分配出來其他人也可以使用,假如程序沒有正確的管理這些 pointer 就容易造成 uaf 問題,容易造成程序崩潰或任意代碼執行。
參與 Black Hat 資安研討會的研究人員提出了這個手法,並且分成兩種方式:
- 攻擊 task credentials
- 攻擊 open file credentials
攻擊task credentials 是利用普通權限的攻擊者在塞入多個普通的非特權權限的工作排程,之後釋放被攻擊的記憶體讓有特權權限的使用者執行到那個記憶體空間,那麼就可以以特權權限來執行。
攻擊 open file credentials 是利用普通權限的攻擊者在塞入多個有寫入權限的開檔行為,之後釋放被攻擊記憶體,但是釋放時機卡在檢查之後、寫入之前,再讓有特權權限的使用者執行到那個記憶體空間,那麼就可以以特權權限來執行並有寫入高權限檔案的權限。
他們提出的 CVE-2022-2588 漏洞,存在於 v2.6.12-rc2 以前的 linux kernel 版本的 cls_route.c,包括 4.19.249-2 以前的 debian 版本、小於 5.4.0-124.140 的 ubuntu 版本和部分 redhat 版本,不過最準確的查看方式還是直接看機器的 kernel 版本。
漏洞主因是函式檢查的時候出問題,會沒有檢查到特殊情況下使用到已經釋放掉的位置。根據他們公布的 CVE-2022-2588 poc 是使用第二種方式,可以去修改 /etc/passwd 檔案,讓非 root 權限使用者可以取得高權限,達到提權目的。
我們可以從
這裡查看 ubuntu 修補內容,並建議所有使用者盡快進行更新。
本文轉載自NEITHNET。