ctypes์—์„œ ๊ฒ€์ฆ๋˜์ง€ ์•Š์€ ๋ถ„์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ Python์˜ ์ทจ์•ฝ์„ฑ

Python ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด 3.7.10 ๋ฐ 3.6.13์˜ ์ˆ˜์ • ๋ฆด๋ฆฌ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฆด๋ฆฌ์Šค๋Š” ctypes ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ C ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํ•ธ๋“ค๋Ÿฌ์—์„œ ๊ฒ€์ฆ๋˜์ง€ ์•Š์€ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ฝ”๋“œ ์‹คํ–‰์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์ (CVE-2021-3177)์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. . ์ด ๋ฌธ์ œ๋Š” Python 3.8 ๋ฐ 3.9 ๋ธŒ๋žœ์น˜์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€๋งŒ ํ•ด๋‹น ์—…๋ฐ์ดํŠธ๋Š” ์•„์ง ๋ฆด๋ฆฌ์Šค ํ›„๋ณด ์ƒํƒœ(1์›” XNUMX์ผ ๋ฆด๋ฆฌ์Šค ์˜ˆ์ •)์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” sprintf์˜ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ctypes ํ•จ์ˆ˜ PyCArg_repr()์˜ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ, ๋ณ€ํ™˜ 'sprintf(buffer, " ", self->tag, self->value.b)'๋Š” 256๋ฐ”์ดํŠธ์˜ ์ •์  ๋ฒ„ํผ("char buffer[256]")๋ฅผ ํ• ๋‹นํ–ˆ์ง€๋งŒ ๊ฒฐ๊ณผ๋Š” ์ด ๊ฐ’์„ ์ดˆ๊ณผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ทจ์•ฝ์ ์— ๋Œ€ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ทจ์•ฝ์ ์„ ํ™•์ธํ•˜๋ ค๋ฉด "1e300" ๊ฐ’์„ ์ „๋‹ฌํ•ด ๋ณด์‹ญ์‹œ์˜ค. c_double.from_param ๋ฉ”์„œ๋“œ๋กœ ์ฒ˜๋ฆฌํ•  ๋•Œ ๊ฒฐ๊ณผ ์ˆซ์ž์— 308์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๊ณ  ํ˜•์‹์— ๋งž์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. 256๋ฐ”์ดํŠธ ๋ฒ„ํผ. ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ์˜ ์˜ˆ: import ctypes; x = ctypes.c_double.from_param(1e300); ๋‹ด๋‹น์ž(x)

์ด ๋ฌธ์ œ๋Š” Debian, Ubuntu ๋ฐ FreeBSD์—์„œ๋Š” ์ˆ˜์ •๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋‚จ์•„ ์žˆ์ง€๋งŒ Arch Linux, Fedora, SUSE์—์„œ๋Š” ์ด๋ฏธ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. RHEL์—์„œ๋Š” ๋ฌธ์ž์—ด ํ•จ์ˆ˜์—์„œ ์ด๋Ÿฌํ•œ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ๋ฅผ ์ฐจ๋‹จํ•˜๋Š” FORTIFY_SOURCE ๋ชจ๋“œ์˜ ํŒจํ‚ค์ง€ ์–ด์…ˆ๋ธ”๋ฆฌ๋กœ ์ธํ•ด ์ทจ์•ฝ์ ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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