CVE-2017-16995-Ubuntu本地提權漏洞復現
- 2019 年 10 月 7 日
- 筆記
環境搭建
系統選擇的是Ubuntu16.04-desktop-amd64.iso安裝的環境,安裝過程不用安裝更新軟體包。
漏洞分析&利用
在該環境下直接利用編譯好之後的程式並不成功(4.4.0-21-generic),如下:

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

缺失頭文件,然後在16.04.4下嘗試:

很顯然該版本4.13高於4.4.0,所以並沒有漏洞,也許是我下載的16.04.4的鏡像比較新導致的:

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

我們還是用16.04測試。查找該漏洞的詳情,漏洞編號是:CVE-2017-16995
在seebug有詳細的說明:https://www.seebug.org/vuldb/ssvid-97183

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

我們將這個crash程式碼在ubuntu下編譯執行,引起變化之後在執行exp:
gcc -ocrasher_badtrunc crasher_badtrunc.c -Wall && ./crasher_badtrunc

可以看到提權成功,獲得root的許可權,從利用過程來看,利用條件還算是較小,所以應該屬於一個高危的漏洞了!
漏洞修復
目前暫未有明確的修補程式升級方案。 建議用戶在評估風險後,通過修改內核參數限制普通用戶使用bpf(2)系統調用:
# echo 1 >/proc/sys/kernel/unprivileged_bpf_disabled