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