๋ชจ๋“  ๋ฆฌ๋ˆ…์Šค ๋ฐฐํฌํŒ์—์„œ ํŽ˜์ด์ง€ ์บ์‹œ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ๋ฃจํŠธ ๊ถŒํ•œ์„ ํš๋“ํ•˜๋Š” Dirty Frag ์ทจ์•ฝ์ 

๋ฆฌ๋ˆ…์Šค ์ปค๋„์—์„œ ๋‘ ๊ฐ€์ง€ ์ทจ์•ฝ์ ์ด ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ทจ์•ฝ์ ๋“ค์€ ๋ฉฐ์น  ์ „ ๊ณต๊ฐœ๋œ Copy Fail ์ทจ์•ฝ์ ๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ, ๊ฐ๊ฐ xfrm-ESP์™€ RxRPC๋ผ๋Š” ๋‹ค๋ฅธ ํ•˜์œ„ ์‹œ์Šคํ…œ์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ์ด ์ผ๋ จ์˜ ์ทจ์•ฝ์ ์€ Dirty Frag(Copy Fail 2๋ผ๊ณ ๋„ ํ•จ)๋ผ๋Š” ์ฝ”๋“œ๋ช…์œผ๋กœ ๋ช…๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ทจ์•ฝ์ ์„ ์ด์šฉํ•˜๋ฉด ๊ถŒํ•œ์ด ์—†๋Š” ์‚ฌ์šฉ์ž๋„ ํŽ˜์ด์ง€ ์บ์‹œ์˜ ํ”„๋กœ์„ธ์Šค ๋ฐ์ดํ„ฐ๋ฅผ ๋ฎ์–ด์จ ๋ฃจํŠธ ๊ถŒํ•œ์„ ํš๋“ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ชจ๋“  ๋ฆฌ๋ˆ…์Šค ๋ฐฐํฌํŒ์—์„œ ์ž‘๋™ํ•˜๋Š” ์ต์Šคํ”Œ๋กœ์ž‡์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์ทจ์•ฝ์ ์€ ํŒจ์น˜๊ฐ€ ๋ฐฐํฌ๋˜๊ธฐ ์ „์— ๊ณต๊ฐœ๋˜์—ˆ์ง€๋งŒ, ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Dirty Frag๋Š” ๋‘ ๊ฐ€์ง€ ์ทจ์•ฝ์ ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ESP(Encapsulating Security Payload) ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ IPsec ์•”ํ˜ธํ™” ์ž‘์—…์„ ๊ฐ€์†ํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” xfrm-ESP ๋ชจ๋“ˆ์˜ ์ทจ์•ฝ์ ์ด๊ณ , ๋‘ ๋ฒˆ์งธ๋Š” UDP๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋˜๋Š” AF_RXRPC ์†Œ์ผ“ ์ œํ’ˆ๊ตฐ๊ณผ ๋™์ผํ•œ ์ด๋ฆ„์˜ RPC ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•˜๋Š” RxRPC ๋“œ๋ผ์ด๋ฒ„์˜ ์ทจ์•ฝ์ ์ž…๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ์ทจ์•ฝ์ ์€ ๋ฃจํŠธ ๊ถŒํ•œ ํš๋“์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. xfrm-ESP ์ทจ์•ฝ์ ์€ 2017๋…„ 1์›”๋ถ€ํ„ฐ, RxRPC ์ทจ์•ฝ์ ์€ 2023๋…„ 6์›”๋ถ€ํ„ฐ ๋ฆฌ๋ˆ…์Šค ์ปค๋„์— ์กด์žฌํ•ด ์™”์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฌธ์ œ ๋ชจ๋‘ ํŽ˜์ด์ง€ ์บ์‹œ์— ์ง์ ‘ ์“ฐ๊ธฐ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ์ตœ์ ํ™”๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

xfrm-ESP ์ทจ์•ฝ์ ์„ ์•…์šฉํ•˜๋ ค๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ƒ์„ฑ ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•˜๊ณ , RxRPC ์ทจ์•ฝ์ ์„ ์•…์šฉํ•˜๋ ค๋ฉด rxrpc.ko ์ปค๋„ ๋ชจ๋“ˆ์ด ๋กœ๋“œ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์šฐ๋ถ„ํˆฌ์—์„œ๋Š” AppArmor ๊ทœ์น™์— ๋”ฐ๋ผ ๊ถŒํ•œ์ด ์—†๋Š” ์‚ฌ์šฉ์ž๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์ง€๋งŒ, rxrpc.ko ๋ชจ๋“ˆ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋ฐฐํฌํŒ์€ rxrpc.ko ๋ชจ๋“ˆ์ด ์—†์ง€๋งŒ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ƒ์„ฑ์„ ์ฐจ๋‹จํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•œ ์—ฐ๊ตฌ์›์€ ๋‘ ๊ฐ€์ง€ ์ทจ์•ฝ์ ์„ ๋ชจ๋‘ ์ด์šฉํ•˜์—ฌ ์‹œ์Šคํ…œ์„ ๊ณต๊ฒฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฐํ•ฉ ์ต์Šคํ”Œ๋กœ์ž‡์„ ๊ฐœ๋ฐœํ–ˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ์ฃผ์š” ๋ฐฐํฌํŒ์—์„œ ํ•ด๋‹น ์ทจ์•ฝ์ ์„ ์•…์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์ทจ์•ฝ์ ์€ Ubuntu 24.04.4(์ปค๋„ 6.17.0-23), RHEL 10.1(์ปค๋„ 6.12.0-124.49.1), openSUSE Tumbleweed(์ปค๋„ 7.0.2-1), CentOS Stream 10(์ปค๋„ 6.12.0-224), AlmaLinux 10(์ปค๋„ 6.12.0-124.52.3) ๋ฐ Fedora 44(์ปค๋„ 6.19.14-300)์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Copy Fail ์ทจ์•ฝ์ ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, xfrm-ESP ๋ฐ RxRPC์˜ ๋ฌธ์ œ๋Š” splice() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ์ œ์ž๋ฆฌ ๋ฐ์ดํ„ฐ ๋ณตํ˜ธํ™” ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ํŽ˜์ด์ง€ ์บ์‹œ์˜ ์š”์†Œ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ๋ณต์‚ฌ ์—†์ด ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ์™€ ํŒŒ์ดํ”„ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์“ฐ๊ธฐ ์˜คํ”„์…‹ ๊ณ„์‚ฐ ์‹œ ํŽ˜์ด์ง€ ์บ์‹œ์˜ ์š”์†Œ์— ๋Œ€ํ•œ ์ง์ ‘ ์ฐธ์กฐ ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•œ ์ ์ ˆํ•œ ๊ฒ€์‚ฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•„, ํŠน์ˆ˜ํ•˜๊ฒŒ ์กฐ์ž‘๋œ ์š”์ฒญ์„ ํ†ตํ•ด ํŠน์ • ์˜คํ”„์…‹์—์„œ 4๋ฐ”์ดํŠธ๋ฅผ ๋ฎ์–ด์“ฐ๊ณ  ํŽ˜์ด์ง€ ์บ์‹œ์— ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ํŒŒ์ผ ์ฝ๊ธฐ ์ž‘์—…์€ ๋จผ์ € ํŽ˜์ด์ง€ ์บ์‹œ์—์„œ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€ ์บ์‹œ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ •๋œ ๊ฒฝ์šฐ, ํŒŒ์ผ ์ฝ๊ธฐ ์ž‘์—…์€ ๋“œ๋ผ์ด๋ธŒ์— ์ €์žฅ๋œ ์‹ค์ œ ์ •๋ณด๊ฐ€ ์•„๋‹Œ ์ˆ˜์ •๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ทจ์•ฝ์ ์„ ์•…์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ suid ๋ฃจํŠธ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ๋Š” ์‹คํ–‰ ํŒŒ์ผ์˜ ํŽ˜์ด์ง€ ์บ์‹œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฃจํŠธ ๊ถŒํ•œ์„ ์–ป์œผ๋ ค๋ฉด ์‹คํ–‰ ํŒŒ์ผ /usr/bin/su๋ฅผ ์ฝ์–ด ํŽ˜์ด์ง€ ์บ์‹œ์— ์ €์žฅํ•œ ๋‹ค์Œ, ํŽ˜์ด์ง€ ์บ์‹œ์— ์ €์žฅ๋œ ์ด ํŒŒ์ผ์˜ ๋‚ด์šฉ์— ์ž์‹ ์˜ ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดํ›„ "su" ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋“œ๋ผ์ด๋ธŒ์— ์žˆ๋Š” ์›๋ž˜ ์‹คํ–‰ ํŒŒ์ผ์ด ์•„๋‹Œ ํŽ˜์ด์ง€ ์บ์‹œ์— ์ €์žฅ๋œ ์ˆ˜์ •๋œ ๋ณต์‚ฌ๋ณธ์ด ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.

์ทจ์•ฝ์  ๊ณต๊ฐœ ๋ฐ ํŒจ์น˜ ๋™์‹œ ๋ฐฐํฌ๋Š” 5์›” 12์ผ๋กœ ์˜ˆ์ •๋˜์–ด ์žˆ์—ˆ์ง€๋งŒ, ์ •๋ณด ์œ ์ถœ๋กœ ์ธํ•ด ํŒจ์น˜ ๋ฐฐํฌ ์ „์— ์ทจ์•ฝ์  ์ •๋ณด๊ฐ€ ๋จผ์ € ๊ณต๊ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 4์›” ๋ง, rxrpc, ipsec, xfrm ๊ด€๋ จ ํŒจ์น˜๊ฐ€ netdev ๊ณต๊ฐœ ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ์— ๊ฒŒ์‹œ๋˜์—ˆ์ง€๋งŒ, ํ•ด๋‹น ํŒจ์น˜๊ฐ€ ์ทจ์•ฝ์ ๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค๋Š” ์–ธ๊ธ‰์€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. 5์›” 5์ผ, IPsec ์„œ๋ธŒ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž๋Š” xfrm-esp ๋ชจ๋“ˆ์˜ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ œ์•ˆํ•˜๋Š” netdev Git ์ €์žฅ์†Œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์Šน์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์„ค๋ช…์€ algif_aead ๋ชจ๋“ˆ์˜ Copy Fail ์ทจ์•ฝ์ ์„ ์œ ๋ฐœํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ ๊ฑฐ์˜ ๋™์ผํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๋ณด์•ˆ ์—ฐ๊ตฌ์›์ด ์ด ์ˆ˜์ • ์‚ฌํ•ญ์— ๊ด€์‹ฌ์„ ๊ฐ–๊ณ  ์ž‘๋™ํ•˜๋Š” ์ต์Šคํ”Œ๋กœ์ž‡์„ ๋งŒ๋“ค์–ด ๊ณต๊ฐœํ–ˆ๋Š”๋ฐ, ๊ทธ๋Š” 5์›” 12์ผ๊นŒ์ง€ ํ•ด๋‹น ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ •๋ณด ๊ณต๊ฐœ๊ฐ€ ๊ธˆ์ง€๋˜์–ด ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌ๋ˆ…์Šค ์ปค๋„ ๋ฐ ๋ฐฐํฌํŒ์˜ ์ปค๋„ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์ˆ˜์ • ์—…๋ฐ์ดํŠธ๋Š” ์•„์ง ๊ฒŒ์‹œ๋˜์ง€ ์•Š์•˜์ง€๋งŒ, ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํŒจ์น˜(xfrm-esp ๋ฐ rxrpc)๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. CVE ์‹๋ณ„์ž๊ฐ€ ํ• ๋‹น๋˜์ง€ ์•Š์•„ ๋ฐฐํฌํŒ์˜ ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ๋ฅผ ์ถ”์ ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ž„์‹œ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ esp4, esp6 ๋ฐ rxrpc ์ปค๋„ ๋ชจ๋“ˆ์˜ ๋กœ๋“œ๋ฅผ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”: sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; true"

์ถœ์ฒ˜ : opennet.ru