在5.1.17以前的Linux內核中,kernel / ptrace.c中的ptrace_link錯誤地處理了想要建立ptrace關係的進程的憑據記錄,這容許本地用戶經過利用父子的某些方案來獲取root訪問權限 進程關係,父進程刪除權限並調用execve(可能容許攻擊者控制)。 一個影響因素是對象壽命問題(也可能致使恐慌)。 另外一個影響因素是將ptrace關係標記爲特權,這能夠經過(例如)Polkit的pkexec幫助程序與PTRACE_TRACEME進行利用。 注意:在某些環境中,SELinux deny_ptrace多是一種可用的解決方法。html
Linux Kernel < 5.1.17
OS: Ubuntu 16.04 Kernel: 4.15.0-47-generic
poc地址:git
https://github.com/bcoles/kernel-exploits/tree/master/CVE-2019-13272
下載poc:github
wget https://raw.githubusercontent.com/bcoles/kernel-exploits/master/CVE-2019-13272/poc.c
可是ubuntu沒裝代理的,因而用curl下來,傳到ubuntu上ubuntu
而後編譯安全
gcc -s poc.c -o test
賦予權限bash
chmod +x test
建立普通用戶服務器
useradd test01
su test01
運行pocssh
./test
第一次實驗執行失敗:curl
由於在建立用戶時候沒有建立對應的用戶文件夾url
useradd -d /home/test01 test01 建立用戶 passwd test01 設置密碼
第二次實驗復現成功
在ssh上同一個普通用戶復現
發現是失敗的,看了一些文章。發現ssh並不能完成提權操做。
kernel 5.1.17以前版本中存在安全漏洞,該漏洞源於kernel/ptrace.c文件的ptrace_link沒有正確處理對憑證的記錄。攻擊者可利用該漏洞獲取root訪問權限。因爲PTRACE_TRACEME容許的borked權限,利用bug在概念上頗有趣。對象生命週期處理問題可能會致使內存損壞,但它須要以精確的方式進行代碼競爭。事實PTRACE_TRACEME證實,除了父進程以外,內核還記錄了跟蹤器的憑據。研究人員概述的方案涉及一個父進程,該進程建立一個子進程,這個子進程會建立子進程。第一個子進程使用命令pkexec(用於以root身份運行程序),第二個子進程運行PTRACE_TRACEME,而後第一個子進程丟棄其權限。最終結果是父進程可使用ptrace來控制第一個子進程,後者可使用ptrace來控制第二個子進程 - 從而讓攻擊者得到對兩個進程的控制權。
Polkit
在系統層級進行權限控制,提供了一個低優先級進程和高優先級進程進行通信的系統。和sudo
等程序不一樣,Polkit
並無賦予進程徹底的 root 權限,而是經過一個集中的策略系統進行更精細的受權。
Polkit
定義出一系列操做,例如運行GParted
, 並將用戶按照羣組或用戶名進行劃分,例如 wheel
羣組用戶。而後定義每一個操做是否能夠由某些用戶執行,執行操做前是否須要一些額外的確認,例如經過輸入密碼確認用戶是否是屬於某個羣組。
pkexec allows an authorized user to execute PROGRAM as another user. If username is not specified, then the program will be executed as the administrative super user, root.
pkexec容許受權用戶做爲另外一個用戶執行程序。若是沒有指定用戶名,則程序將做爲管理超級用戶root執行。
普通用戶在SSH中使用pkexec時會顯示以下須要密碼驗證
test@ubuntu-vm:~$ pkexec –user root whoami
==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===
Authentication is needed to run `/usr/bin/whoami’ as the super user
Authenticating as: test,,, (test)
Password:
在Gnome桌面中
經過poc代碼中的部分代碼,推測爲
gnome
桌面程序存在的缺陷致使用戶能夠實現代碼層面的條件競爭致使了提權,可是實戰中多數服務器不會配備桌面環境,屬比較雞肋的提權漏洞