作業 10-1 題目 : 又來到我們的大型翻車現場,這車足足翻了有一年了我現在才發現。首先這次 Day01 - 開賽 (含作業1) 請各位建立的 Linux kernel - v5.16.20(Ubuntu) 其實這版是無法使用 CVE-2022-0492 這個弱點的,請參考資訊解釋一下為何不能? 以及更新內核版本後試著利用弱點進行逃逸會遇到甚麼問題?
解答 : 首先先去看一下 參考資訊 中提到該弱點問題是出在 cgroup_release_agent_write,後來的 patch 增加了身分驗證機制,如果沒有 CAP_SYS_ADMIN 就無法進行寫入。接著驗證步驟如下所示 :
# 抓取該版本的原始碼
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.16.20.tar.gz ;
# 解開檔案,如果不想全解也可以用 7-zip 之類的工具去看
tar xvf linux-5.16.20.tar.gz ;
# 看一下當初發生弱點的函式,會發現這個版本有打 patch
cat linux-5.16.20/kernel/cgroup/cgroup-v1.c | grep 'static ssize_t cgroup_release_agent_write' -A 17 ;
參考 CVE-2022-0492 隨便挑一版有問題的來看看,這邊就挑 5.16.5 本版來看看。
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.16.5.tar.gz ;
tar xvf linux-5.16.5.tar.gz ;
# 看不到身分判斷的部分,所以這版是有漏洞的
cat linux-5.16.5/kernel/cgroup/cgroup-v1.c | grep 'static ssize_t cgroup_release_agent_write' -A 17 ;
# 忍痛切換 kernel 版本
wget https://kernel.ubuntu.com/mainline/v5.16.5/amd64/linux-headers-5.16.5-051605-generic_5.16.5-051605.202202011731_amd64.deb ;
wget https://kernel.ubuntu.com/mainline/v5.16.5/amd64/linux-headers-5.16.5-051605_5.16.5-051605.202202011731_all.deb ;
wget https://kernel.ubuntu.com/mainline/v5.16.5/amd64/linux-image-unsigned-5.16.5-051605-generic_5.16.5-051605.202202011731_amd64.deb ;
wget https://kernel.ubuntu.com/mainline/v5.16.5/amd64/linux-modules-5.16.5-051605-generic_5.16.5-051605.202202011731_amd64.deb ;
sudo dpkg -i *.deb ;
# 調整 GRUB_TIMEOUT=20
sudo vim /etc/default/grub ;
sudo update-grub ;
sudo shutdown -r now ;
# 重開機會卡住,點進去按 ESC 選擇對應的版本
# 下指令確認版本是否正確,會出現 5.16.5-051605-generic
uname -r ;
# 開始建立 CVE-2022-0492 弱點環境及測試
docker run --rm -it --security-opt="seccomp=unconfined" --security-opt="apparmor=unconfined" aeifkz/my-ubuntu:v1.0 bash ;
# 這個指令的結果很重要,先不破梗
cat /proc/self/cgroup ;
# 不 unshare 的話後面會無法 mount,但這個指令跟 CVE-2022-0492 弱點無關
unshare -UrmC --propagation=unchanged bash ;
mkdir /tmp/cgroup ;
mount -t cgroup -o rdma cgroup /tmp/cgroup ;
# 這邊直接跳步驟顯示 Permission denied
echo "echo 123" > /tmp/cgroup/release_agent
這邊會錯誤是因為從剛剛 "cat /proc/self/cgroup" 這個指令就可以看出這些 cgroup 都不是 root cgroup directory,所以掛載後目錄也不會出現 release_agent,所以接下來的作業 10-2 的目的就是要建立出這樣的環境後繼續進行該弱點的測試。