天天看點

CVE-2017-16995-Ubuntu本地提權漏洞複現echo 1 >/proc/sys/kernel/unprivileged_bpf_disabled

環境搭建

系統選擇的是Ubuntu16.04-desktop-amd64.iso安裝的環境,安裝過程不用安裝更新軟體包。

漏洞分析&利用

在該環境下直接利用編譯好之後的程式并不成功(4.4.0-21-generic),如下:

CVE-2017-16995-Ubuntu本地提權漏洞複現echo 1 >/proc/sys/kernel/unprivileged_bpf_disabled

然後在Ubuntu14.04、16.04.4都試着還是不成功!都是報錯,如下是14環境報錯資訊:

CVE-2017-16995-Ubuntu本地提權漏洞複現echo 1 >/proc/sys/kernel/unprivileged_bpf_disabled

缺失頭檔案,然後在16.04.4下嘗試:

CVE-2017-16995-Ubuntu本地提權漏洞複現echo 1 >/proc/sys/kernel/unprivileged_bpf_disabled

很顯然該版本4.13高于4.4.0,是以并沒有漏洞,也許是我下載下傳的16.04.4的鏡像比較新導緻的:

CVE-2017-16995-Ubuntu本地提權漏洞複現echo 1 >/proc/sys/kernel/unprivileged_bpf_disabled

在16.04.1和16.04.1中沒有嘗試。是以個人認為網上的文章說明的範圍稍微偏大

CVE-2017-16995-Ubuntu本地提權漏洞複現echo 1 >/proc/sys/kernel/unprivileged_bpf_disabled

我們還是用16.04測試。查找該漏洞的詳情,漏洞編号是:CVE-2017-16995

在seebug有詳細的說明:https://www.seebug.org/vuldb/ssvid-97183

CVE-2017-16995-Ubuntu本地提權漏洞複現echo 1 >/proc/sys/kernel/unprivileged_bpf_disabled

這裡檢視漏洞詳情,可以看到作者分析了具體的詳情,由于Linux核心帶有的eBPF bpf(2)系統調用中,當使用者提供惡意BPF程式使eBPF驗證器子產品産生計算錯誤,導緻任意記憶體讀寫問題。 非特權使用者可以使用此漏洞獲得權限提升,代碼我們就不分析了,作者在不斷嘗試得到引起記憶體位址變換幾個變量R0/R1/R10是需要在gcc編譯的過程中調試,是以最後的代碼是正确的:crasher_badtrunc.c

CVE-2017-16995-Ubuntu本地提權漏洞複現echo 1 >/proc/sys/kernel/unprivileged_bpf_disabled

我們将這個crash代碼在ubuntu下編譯執行,引起變化之後在執行exp:

gcc -ocrasher_badtrunc crasher_badtrunc.c -Wall && ./crasher_badtrunc

CVE-2017-16995-Ubuntu本地提權漏洞複現echo 1 >/proc/sys/kernel/unprivileged_bpf_disabled

可以看到提權成功,獲得root的權限,從利用過程來看,利用條件還算是較小,是以應該屬于一個高危的漏洞了!

漏洞修複

目前暫未有明确的更新檔更新方案。 建議使用者在評估風險後,通過修改核心參數限制普通使用者使用bpf(2)系統調用:

echo 1 >/proc/sys/kernel/unprivileged_bpf_disabled

擷取更多漏洞複現知識請關注WX公衆号【安全漏洞環境學習】

繼續閱讀