Linux ์ปค๋„ ์ทจ์•ฝ์ ์œผ๋กœ ์ธํ•ด Chrome ์ƒŒ๋“œ๋ฐ•์Šค ๊ฒฉ๋ฆฌ ์šฐํšŒ ๊ฐ€๋Šฅ

๊ตฌ๊ธ€ ๋ณด์•ˆ ์—ฐ๊ตฌ์›๋“ค์ด ๋ฆฌ๋ˆ…์Šค ์ปค๋„์—์„œ ๊ถŒํ•œ ์ƒ์Šน์„ ํ—ˆ์šฉํ•˜๋Š” ์ทจ์•ฝ์ (CVE-2025-38236)์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ทจ์•ฝ์ ์€ ๊ตฌ๊ธ€ ํฌ๋กฌ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ƒŒ๋“œ๋ฐ•์Šค ๊ฒฉ๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์šฐํšŒํ•˜์—ฌ ๊ฒฉ๋ฆฌ๋œ ํฌ๋กฌ ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค(์˜ˆ: ํฌ๋กฌ์˜ ๋‹ค๋ฅธ ์ทจ์•ฝ์ ์„ ์•…์šฉํ•˜๋Š” ๊ฒฝ์šฐ)์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ปค๋„ ์ˆ˜์ค€์˜ ์ฝ”๋“œ ์‹คํ–‰์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ๋ฆฌ๋ˆ…์Šค ์ปค๋„ 6.9๋ถ€ํ„ฐ ๋ฐœ์ƒํ–ˆ์œผ๋ฉฐ, ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ์—…๋ฐ์ดํŠธ 6.1.143, 6.6.96, 6.12.36, 6.15.5์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ต์Šคํ”Œ๋กœ์ž‡์˜ ํ”„๋กœํ† ํƒ€์ž…์€ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ทจ์•ฝ์ ์€ AF_UNIX ์†Œ์ผ“์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” MSG_OOB ํ”Œ๋ž˜๊ทธ์˜ ๊ตฌํ˜„ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. MSG_OOB("๋Œ€์—ญ์™ธ") ํ”Œ๋ž˜๊ทธ๋Š” ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ์— ์ถ”๊ฐ€ ๋ฐ”์ดํŠธ๋ฅผ ์ฒจ๋ถ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜๋ฉฐ, ์ˆ˜์‹ ์ž๋Š” ๋‚˜๋จธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜๊ธฐ ์ „์— ์ด ๋ฐ”์ดํŠธ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋Š” Oracle์˜ ์š”์ฒญ์œผ๋กœ Linux 5.15 ์ปค๋„์— ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ, ๋„๋ฆฌ ์‚ฌ์šฉ๋˜์ง€ ์•Š์•„ ์ž‘๋…„์— ์ง€์› ์ค‘๋‹จ์ด ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Chrome์˜ ์ƒŒ๋“œ๋ฐ•์Šค ๊ตฌํ˜„์€ UNIX ์†Œ์ผ“ ์ž‘์—…๊ณผ send()/recv() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ํ—ˆ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ MSG_OOB ํ”Œ๋ž˜๊ทธ๋Š” ๋‹ค๋ฅธ ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ํ—ˆ์šฉ๋˜๋ฉฐ ๋ณ„๋„๋กœ ํ•„ํ„ฐ๋ง๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. MSG_OOB ๊ตฌํ˜„์˜ ๋ฒ„๊ทธ๋กœ ์ธํ•ด ํŠน์ • ์‹œ์Šคํ…œ ํ˜ธ์ถœ ์‹œํ€€์Šค๋ฅผ ์‹คํ–‰ํ•œ ํ›„ ํ•ด์ œ ํ›„ ์‚ฌ์šฉ(use-after-free) ์กฐ๊ฑด์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. char dummy; int socks[2]; socketpair(AF_UNIX, SOCK_STREAM, 0, socks); send(socks[1], "A", 1, MSG_OOB); recv(socks[0], &dummy, 1, MSG_OOB); send(socks[1], "A", 1, MSG_OOB); recv(socks[0], &dummy, 1, MSG_OOB); send(socks[1], "A", 1, MSG_OOB); recv(socks[0], &dummy, 1, 0); recv(socks[0], &dummy, 1, MSG_OOB);

์ถœ์ฒ˜ : opennet.ru