๋Œ€๋ถ€๋ถ„์˜ Linux ๋ฐฐํฌํŒ์—์„œ ๋ฃจํŠธ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜๋Š” PolKit์˜ ์‹ฌ๊ฐํ•œ ์ทจ์•ฝ์ 

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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€