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