linux内核2018,CVE-2018-1000001 linux kernel
CVE-2018-1000001 linux kernel
前置知識
一個名稱空間將全局系統資源封裝在一個抽象中,使其在名稱空間內的進程中出現,它們有自己獨立
的全局資源實例。對全局資源的更改在其他進程中是可見的,但其他進程是不可見的。名稱空間的一
個用途是實現容器。
“mount point”:locations in the file hierarchy where file systems have been mounted to
"mounts":安裝文件系統的集合/文件系統已安裝到的文件層次結構中的位置集。
"to mount":將文件系統安裝到文件層次結構中的操作。
Dos Attack
簡稱拒絕服務攻擊, denial-of-service (DoS) attack
userns
SUID,SGID and Sticky Bit
SUID,SGID和Stiky Bits和對所有者/組/其他人的讀/寫/執行權限一樣,都屬于文件的屬性
Stiky Bit:一旦有關程序被執行,它應當駐留在內存中,比如:當一個用戶剛剛使用完一個
程序,另外一個用戶想要啟動相同程序時,不必再次重新初始化。
SUID Bit:此程序的SUID若被置為root,那么無論任何用戶都能以root的權限運行該程序。
SGID Bit:和SUID類似
Introduction
漏洞成因:在應用程序編寫完成后再改變文檔會引入安全問題。
Linux kernel side
Linux 內核并不完全遵循POSIX規范。它更改了getcwd,但是此時glibc已經實現了
下面的文檔某種程度上有矛盾
如果當前目錄不在當前進程的root文件下(比如進程通過chroot設置了一個新的文件系統根目錄)
從Linux2.6.36,將會返回"(unreachable)",非特權用戶更改當前目錄到另一個掛載命名空間
當遇到來自不可信任源的路徑時,這些函數的調用者應當確保返回的路徑以'/'或者'('開始。
getcwd遵循POSIX.1-2001,但POSIX.1-2001并沒有明確如何處理buf為NULL的情況
文檔明確指明了"unreachable"的使用,但是并不遵循POSIX規范。至少違反了POSIX 2004和2008
規范。而POSIX.1-2001并不能免費獲得。根據IEEE Std 1003.1-2008對getcwd的定義:
getcwd()函數應將當前工作目錄的絕對路徑名放置在buf指向的數組中,并返回buf。路徑名不包
含點或點,或符號鏈接。
似乎,由于Linux內核方面的接口規范的更改而導致的結果并沒有得到所有受影響的各方的認可。
realpath()函數依賴于使用getcwd()來解析相對路徑名。另外,manpage不反映底層getcwd()調用的更改。
Libc side
glibc依然假定getcwd將返回絕對路徑:
realpath()拓展所有符號鏈接并解析,生成一個規范化的絕對路徑名。
當解析一個相對路徑,realpath會使用當前的工作目錄。假設它以a/.開始,這個函數從getcwd文件
名稱從一個斜線到前一個斜線的的../符號鏈接,它并不檢查緩存區的邊界。所以,在string緩存區
被用作創建規范化的絕對路徑之前,可能會以一個斜線結尾。因此,用getcwd()返回
(ubreachable)/,來解析上面提到的鏈接名稱,已經將指針移動到緩存區前,會更改緩存區前一個字節為'/',下一部分x將被復制到這個位置。
方法
為了實現提權,mount,unmount這類SUID程序,是最合適的目標:他們使用realpath處理函數路徑
不會降權,也能被所有用戶使用。選擇unmount,因為它每次運行允許處理多個掛載點,從而多次遍
歷問題代碼,打敗ASLR。
總結
以上是生活随笔為你收集整理的linux内核2018,CVE-2018-1000001 linux kernel的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 茱萸的功效与作用、禁忌和食用方法
- 下一篇: linux 其他常用命令