Python 2.7์ ๋ฑ์ฅํ๊ณ 2012๋ ์ ์๋ณ๋์์ผ๋ฉฐ Python 3์์ ์์ง ์์ ๋์ง ์์ ์ค๋ซ๋์ ์๋ ค์ง ๋ฒ๊ทธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Python ์ฝ๋ ์คํ ์์คํ ์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ฒ์ํ์ต๋๋ค. ์ด ๋ฒ๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ํน๋ณํ ์ฐ๊ฒฐ๋ Python ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ ํด์ ๋ ํธ์ถ์ ์์ํ ์ ์์ต๋๋ค. Python์ ๋ฉ๋ชจ๋ฆฌ(Use-After-Free). ์ฒ์์๋ ์ค๋ฅ๊ฐ ๋ณด์ ์ํ์ ์ผ์ผํค์ง ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์ธ์์ ์ผ๋ก ์์ฑ๋ ๋งค์ฐ ๋๋ฌธ ๊ฒฝ์ฐ์๋ง ์คํฌ๋ฆฝํธ๊ฐ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋ ์ ์๋ค๊ณ ๊ฐ์ ํ์ต๋๋ค.
kn32๋ผ๋ ๊ฐ๋ช ์ ์ฌ์ฉํ๋ ๋ณด์ ์ฐ๊ตฌ์์ด ์ด ๋ฌธ์ ์ ๊ด์ฌ์ ๊ฐ๊ฒ ๋์๊ณ os.system๊ณผ ๊ฐ์ ๋ฉ์๋์ ์ง์ ์ก์ธ์คํ์ง ์๊ณ ๋ ์์คํ ๋ช ๋ น์ ํธ์ถํ ์ ์๋ ์์ ์ต์คํ๋ก์์ ์ค๋นํ์ต๋๋ค. ์ต์คํ๋ก์์ ์์ Python์ผ๋ก ๊ตฌํ๋๋ฉฐ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ค์ง ์๊ณ "code.__new__" ํธ๋ค๋ฌ๋ฅผ ์ค์นํ์ง ์๊ณ ์๋ํฉ๋๋ค. ํํฌ ์ค "builtin.__id__"๋ง ์ฌ์ฉ๋๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๊ธ์ง๋์ง ์์ต๋๋ค. ์ค์ฉ์ ์ธ ์ธก๋ฉด์์ ์ ์๋ ์ฝ๋๋ Python ์ฝ๋์ ์คํ์ ํ์ฉํ์ง๋ง ์ฌ์ฉ ๊ฐ๋ฅํ ํธ์ถ์ ์ ํํ๋ ๋ค์ํ ์๋น์ค ๋ฐ ํ๊ฒฝ(์: ํ์ต ํ๊ฒฝ, ์จ๋ผ์ธ ์ ธ, ๋ด์ฅ ์ฒ๋ฆฌ๊ธฐ ๋ฑ)์์ ๊ฒฉ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ์ฐํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. os.system๊ณผ ๊ฐ์ ์ก์ธ์ค ๋ฐฉ๋ฒ์ ํ์ฉํ์ง ๋ง์ญ์์ค.
์ ์๋ ์ฝ๋๋ CPython์ ์ทจ์ฝ์ ์ ์ ์ฉํ์ฌ ์๋ํ๋ os.system ํธ์ถ๊ณผ ์ ์ฌํฉ๋๋ค. ์ต์คํ๋ก์์ x3-86 ์์คํ ์ ๋ชจ๋ ๋ฒ์ ์ Python 64์์ ์๋ํ๋ฉฐ PIE, RELRO ๋ฐ CET ๋ณด์ ๋ชจ๋๊ฐ ํ์ฑํ๋ ์ํ์์๋ Ubuntu 22.04์์ ์์ ์ ์ ๋๋ค. ์์ ์ ์คํ ๊ฐ๋ฅํ CPython ์ฝ๋์ ์๋ ํจ์ ์ค ํ๋์ ์ฃผ์์ ๋ํ Python ์ฝ๋ ์ ๋ณด๋ฅผ ์ป๋ ๊ฒ์ผ๋ก ์ถ์๋ฉ๋๋ค. ์ด ์ฃผ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์๋ CPython์ ๊ธฐ๋ณธ ์ฃผ์์ ๋ก๋๋ libc ์ธ์คํด์ค์ system() ํจ์ ์ฃผ์๊ฐ ๊ณ์ฐ๋ฉ๋๋ค. ๋ง์ง๋ง์ ๋ฌธ์์ด "/bin/sh"์ ๋ํ ์ฒซ ๋ฒ์งธ ์ธ์ ํฌ์ธํฐ์ ๋์ฒด์ ํจ๊ป ํน์ ์์คํ ์ฃผ์๋ก์ ์ง์ ์ ํ๊ฐ ์์๋ฉ๋๋ค.
์ถ์ฒ : opennet.ru