Qualys๋ ๊ถํ ์๋ ์ฌ์ฉ์๊ฐ ๋์ ์ก์ธ์ค ๊ถํ์ด ํ์ํ ์์ ์ ์ํํ ์ ์๋๋ก ๋ฐฐํฌํ์ ์ฌ์ฉ๋๋ Polkit(์ด์ ์ PolicyKit) ์์คํ ๊ตฌ์ฑ ์์์์ ์ทจ์ฝ์ (CVE-2021-4034)์ ํ์ธํ์ต๋๋ค. ์ด ์ทจ์ฝ์ ์ผ๋ก ์ธํด ๊ถํ์ด ์๋ ๋ก์ปฌ ์ฌ์ฉ์๊ฐ ์์ ์ ๊ถํ์ ๋ฃจํธ๋ก ์น๊ฒฉํ๊ณ ์์คํ ์ ๋ํ ๋ชจ๋ ๊ถํ์ ์ป์ ์ ์์ต๋๋ค. ๋ฌธ์ ์ ์ฝ๋๋ช ์ PwnKit์์ผ๋ฉฐ ๋๋ถ๋ถ์ Linux ๋ฐฐํฌํ์ ๊ธฐ๋ณธ ๊ตฌ์ฑ์์ ์คํ๋๋ ์๋ํ๋ ์ต์คํ๋ก์์ ์์ฑํ๋ ๊ฒ์ผ๋ก ์ ๋ช ํฉ๋๋ค.
๋ฌธ์ ๋ SUID ๋ฃจํธ ํ๋๊ทธ์ ํจ๊ป ์ ๊ณต๋๊ณ ์ง์ ๋ PolKit ๊ท์น์ ๋ฐ๋ผ ๋ค๋ฅธ ์ฌ์ฉ์์ ๊ถํ์ผ๋ก ๋ช ๋ น์ ์คํํ๋๋ก ์ค๊ณ๋ PolKit์ pkexec ์ ํธ๋ฆฌํฐ์ ์์ต๋๋ค. pkexec์ ์ ๋ฌ๋ ๋ช ๋ น์ค ์ธ์์ ์๋ชป๋ ์ฒ๋ฆฌ๋ก ์ธํด ๊ถํ์ด ์๋ ์ฌ์ฉ์๋ ์ค์ ๋ ์ก์ธ์ค ๊ท์น์ ๊ด๊ณ์์ด ์ธ์ฆ์ ์ฐํํ๊ณ ๋ฃจํธ๋ก ์ฝ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค. ๊ณต๊ฒฉ์ ๊ฒฝ์ฐ PolKit์ ์ด๋ค ์ค์ ๊ณผ ์ ํ ์ฌํญ์ด ์ง์ ๋์ด ์๋์ง๋ ์ค์ํ์ง ์์ผ๋ฉฐ pkexec ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์คํ ํ์ผ์ ๋ํด SUID ๋ฃจํธ ์์ฑ์ ์ค์ ํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค.
Pkexec๋ ํ๋ก์ธ์ค๋ฅผ ์์ํ ๋ ์ ๋ฌ๋ ๋ช ๋ น์ค ์ธ์ ๊ฐ์(argc)์ ์ ํจ์ฑ์ ํ์ธํ์ง ์์ต๋๋ค. pkexec ๊ฐ๋ฐ์๋ argv ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์๋ ํญ์ ํ๋ก์ธ์ค ์ด๋ฆ(pkexec)์ด ํฌํจ๋๊ณ ๋ ๋ฒ์งธ ํญ๋ชฉ์๋ NULL ๊ฐ ๋๋ pkexec๋ฅผ ํตํด ์คํ๋ ๋ช ๋ น ์ด๋ฆ์ด ํฌํจ๋๋ค๊ณ ๊ฐ์ ํ์ต๋๋ค. ์ธ์ ๊ฐ์๋ ๋ฐฐ์ด์ ์ค์ ๋ด์ฉ๊ณผ ๋น๊ตํ์ฌ ํ์ธ๋์ง ์์๊ณ ํญ์ 1๋ณด๋ค ํฐ ๊ฒ์ผ๋ก ๊ฐ์ ๋์๊ธฐ ๋๋ฌธ์ Linux execve ํจ์์์ ํ์ฉํ๋ ๊ฒ์ฒ๋ผ ํ๋ก์ธ์ค์ ๋น argv ๋ฐฐ์ด์ด ์ ๋ฌ๋ ๊ฒฝ์ฐ pkexec๋ NULL์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ฒ๋ฆฌํฉ๋๋ค( ํ๋ก์ธ์ค ์ด๋ฆ) ๋ฐ ๋ค์ ๋ฐฐ์ด์ ๋ด์ฉ๊ณผ ๊ฐ์ด ๋ฒํผ ๋ฉ๋ชจ๋ฆฌ ์ธ๋ถ์ ์๋ ๊ฒ์ ๋๋ค. |โโโ+โโโ+โโ+โโโโ|โโโ+โโโ+โโ+โโโโ| | ์ธ์[0] | ์ธ์[1] | ... | ์ธ์[argc] | ํ๊ฒฝ[0] | ํ๊ฒฝ[1] | ... | ํ๊ฒฝ[ํ๊ฒฝ] | |โ-|โ-+โ-|โ-+โโ+โโ|โโ|โ-|โ-+โ-|โ-+โโ+โโ|โโ| VVVVVV "ํ๋ก๊ทธ๋จ" "-์ต์ " NULL "๊ฐ" "PATH=์ด๋ฆ" NULL
๋ฌธ์ ๋ argv ๋ฐฐ์ด ๋ค์ ํ๊ฒฝ ๋ณ์๋ฅผ ํฌํจํ๋ ๋ฉ๋ชจ๋ฆฌ์ envp ๋ฐฐ์ด์ด ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ argv ๋ฐฐ์ด์ด ๋น์ด ์์ผ๋ฉด pkexec๋ ํ๊ฒฝ ๋ณ์(argv[1]๊ฐ envp[0]์ ๋์ผํด์ง)๊ฐ ์๋ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์์์ ์์น๋ ๊ถํ์ผ๋ก ์คํ๋๋ ๋ช ๋ น์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ฉฐ ๊ทธ ๋ด์ฉ์ ์ ์ดํ ์ ์์ต๋๋ค. ๊ณต๊ฒฉ์์ ์ํด.
argv[1]์ ๊ฐ์ ์์ ํ๋ฉด pkexec๋ PATH์ ํ์ผ ๊ฒฝ๋ก๋ฅผ ๊ณ ๋ คํ์ฌ ์คํ ํ์ผ์ ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ํ์ธํ๊ณ ์ ์ฒด ๊ฒฝ๋ก๊ฐ ํฌํจ๋ ๋ฌธ์์ด์ ํฌ์ธํฐ๋ฅผ ๋ค์ argv[1]์ ์๋๋ค. argv[ 1]์ envp[0]๊ณผ ๋์ผํ๋ฏ๋ก ์ฒซ ๋ฒ์งธ ํ๊ฒฝ ๋ณ์์ ๊ฐ์ ๋ฎ์ด์ฐ๊ฒ ๋ฉ๋๋ค. ๊ณต๊ฒฉ์๋ ์ฒซ ๋ฒ์งธ ํ๊ฒฝ ๋ณ์์ ์ด๋ฆ์ ์กฐ์ํ์ฌ pkexec์์ ๋ค๋ฅธ ํ๊ฒฝ ๋ณ์๋ฅผ ๋์ฒดํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด suid ํ๋ก๊ทธ๋จ์์ ํ์ฉ๋์ง ์๋ "LD_PRELOAD" ํ๊ฒฝ ๋ณ์๋ฅผ ๋์ฒดํ๊ณ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ pkexec์ ๋ก๋๋๋๋ก ๋ฐฐ์ดํ ์ ์์ต๋๋ค. ํ๋ก์ธ์ค.
์๋ํ๋ ์ต์คํ๋ก์์๋ g_printerr() ํจ์๋ฅผ ํธ์ถํ ๋ ๋์ ์ผ๋ก ๋ก๋๋๋ ๊ธฐํธ ํธ๋์ค์ฝ๋ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๊ฒฝ๋ก๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ GCONV_PATH ๋ณ์๋ฅผ ๋์ฒดํ๋ ์์ ์ด ํฌํจ๋ฉ๋๋ค. ์ด ๋ณ์์ ์ฝ๋๋ iconv_open()์ ์ฌ์ฉํฉ๋๋ค. GCONV_PATH์์ ๊ฒฝ๋ก๋ฅผ ์ฌ์ ์ํจ์ผ๋ก์จ ๊ณต๊ฒฉ์๋ ๋ก๋๋ ํ์ค iconv ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋๋ผ ์์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ, pkexec๊ฐ ์ฌ์ ํ ์คํ ์ค์ธ ๋จ๊ณ์์ ์ค๋ฅ ๋ฉ์์ง๊ฐ ํ์๋ ๋ ์คํ๋๋ ํธ๋ค๋ฌ์ธ์ง ํ์ธํ ์ ์์ต๋๋ค. ๋ฃจํธ ๊ถํ๊ณผ ์์ ๊ถํ์ด ํ์ธ๋๊ธฐ ์ ์ ๋๋ค.
๋ฌธ์ ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์์ผ๋ก ์ธํด ๋ฐ์ํ๋ค๋ ์ฌ์ค์๋ ๋ถ๊ตฌํ๊ณ ์ฌ์ฉ๋๋ ํ๋์จ์ด ์ํคํ ์ฒ์ ๊ด๊ณ์์ด ์์ ์ ์ด๊ณ ๋ฐ๋ณต์ ์ผ๋ก ์ ์ฉ๋ ์ ์์ต๋๋ค. ์ค๋น๋ ์ต์คํ๋ก์์ Ubuntu, Debian, Fedora ๋ฐ CentOS์์ ์ฑ๊ณต์ ์ผ๋ก ํ ์คํธ๋์์ง๋ง ๋ค๋ฅธ ๋ฐฐํฌํ์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋์ ์ต์คํ๋ก์์ ์์ง ๊ณต๊ฐ๋์ง ์์์ผ๋ฉฐ ์ด๋ ์ฌ์ํ๊ณ ๋ค๋ฅธ ์ฐ๊ตฌ์๊ฐ ์ฝ๊ฒ ์ฌํํ ์ ์์์ ๋ํ๋ ๋๋ค. ๋ฐ๋ผ์ ๋ค์ค ์ฌ์ฉ์ ์์คํ ์์๋ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ํจ์น ์ ๋ฐ์ดํธ๋ฅผ ์ค์นํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. Polkit์ BSD ์์คํ ๋ฐ Solaris์์๋ ์ฌ์ฉํ ์ ์์ง๋ง ํด๋น ์์คํ ์์์ ์ฌ์ฉ์ ๋ํด์๋ ์ฐ๊ตฌ๋ ๋ฐ๊ฐ ์์ต๋๋ค. ์๋ ค์ง ๊ฒ์ OpenBSD ์ปค๋์ด execve()๊ฐ ํธ์ถ๋ ๋ null argc ๊ฐ ์ ๋ฌ์ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ OpenBSD์์๋ ๊ณต๊ฒฉ์ ์ํํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ด ๋ฌธ์ ๋ pkexec ๋ช ๋ น์ด ์ถ๊ฐ๋ ์ดํ์ธ 2009๋ 6์๋ถํฐ ๋ฐ์ํ์ต๋๋ค. PolKit ์ทจ์ฝ์ ์ ๋ํ ์์ ์ฌํญ์ ํ์ฌ ํจ์น๋ก ์ ๊ณต๋์ง๋ง(ํจ์น ๋ฆด๋ฆฌ์ค๋ ๋ฆด๋ฆฌ์ค๋์ง ์์) ๋ฐฐํฌํ ๊ฐ๋ฐ์์๊ฒ ์ฌ์ ์ ๋ฌธ์ ๋ฅผ ํต๋ณดํ๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ์ ๋ฐฐํฌํ์์๋ ์ทจ์ฝ์ ์ ๋ํ ์ ๋ณด ๊ณต๊ฐ์ ๋์์ ์ ๋ฐ์ดํธ๋ฅผ ๊ฒ์ํ์ต๋๋ค. ์ด ๋ฌธ์ ๋ RHEL 7/8/0755, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux ๋ฐ Manjaro์์ ํด๊ฒฐ๋์์ต๋๋ค. ์ทจ์ฝ์ ์ ์ฐจ๋จํ๊ธฐ ์ํ ์์ ์กฐ์น๋ก /usr/bin/pkexec ํ๋ก๊ทธ๋จ(โchmod XNUMX /usr/bin/pkexecโ)์์ SUID ๋ฃจํธ ํ๋๊ทธ๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
์ถ์ฒ : opennet.ru