๊ตฌ๊ธ์ ๋ณด์ ์ฐ๊ตฌ์๋ค์ด ์ปค๋์์ ์ทจ์ฝ์ ์ ๋ฐ๊ฒฌํ์ต๋๋ค. Linux ๊ถํ ์์น ์ทจ์ฝ์ (CVE-2025-38236)์ด ์กด์ฌํฉ๋๋ค. ์ด ์ทจ์ฝ์ ์ ํนํ Google Chrome์์ ์ฌ์ฉ๋๋ ์๋๋ฐ์ค ๊ฒฉ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ์ฐํํ์ฌ Chrome์ ์๋๋ฐ์ค ๋ ๋๋ง ํ๋ก์ธ์ค ์ปจํ ์คํธ์์ ์ฝ๋๋ฅผ ์คํํ ๋ ์ปค๋ ์์ค์ ์ฝ๋ ์คํ ๊ถํ์ ํ๋ํ ์ ์๋๋ก ํฉ๋๋ค(์: Chrome์ ๋ค๋ฅธ ์ทจ์ฝ์ ์ ์ ์ฉํ๋ ๊ฒฝ์ฐ). ์ด ๋ฌธ์ ๋ ์ปค๋์์ ์์๋ฉ๋๋ค. Linux 6.9 ๋ฒ์ ์์ ์ปค๋ ์ ๋ฐ์ดํธ๋ฅผ ํตํด ์์ ๋์์ต๋๋ค. Linux 6.1.143, 6.6.96, 6.12.36 ๋ฐ 6.15.5 ๋ฒ์ ์์ ์ทจ์ฝ์ ์ด ๋ฐ๊ฒฌ๋์์ต๋๋ค. ์ต์คํ๋ก์ ํ๋กํ ํ์ ์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
์ด ์ทจ์ฝ์ ์ AF_UNIX ์์ผ์ ์ค์ ํ ์ ์๋ MSG_OOB ํ๋๊ทธ์ ๊ตฌํ ์ค๋ฅ๋ก ์ธํด ๋ฐ์ํฉ๋๋ค. MSG_OOB("๋์ญ ์ธ") ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ก๋๋ ๋ฐ์ดํฐ์ ์ถ๊ฐ ๋ฐ์ดํธ๋ฅผ ๋ง๋ถ์ผ ์ ์์ผ๋ฉฐ, ์์ ์๋ ๋๋จธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ธฐ ์ ์ ์ด ์ถ๊ฐ ๋ฐ์ดํธ๋ฅผ ์ฝ์ ์ ์์ต๋๋ค. ์ด ํ๋๊ทธ๋ ์ปค๋์ ์ถ๊ฐ๋์์ต๋๋ค. 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
