๋์๊ด์์ PharStream๋ํผ, ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ ํธ๋ค๋ฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ผ๋ก ๊ณต๊ฒฉ "Phar" ํ์์ ํ์ผ ๋์ฒด๋ฅผ ํตํด ํ์ธ๋จ ์ทจ์ฝ์ (CVE-2019-11831), ๊ฒฝ๋ก์์ ".." ๋ฌธ์๋ฅผ ๋์ฒดํ์ฌ ์ฝ๋ ์ญ์ง๋ ฌํ ๋ณดํธ๋ฅผ ์ฐํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ณต๊ฒฉ์๋ ๊ณต๊ฒฉ์ "phar:///path/bad.phar/../good.phar"์ ๊ฐ์ URL์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ์ด๋ฆ "/path/good.phar"๋ฅผ ๊ฐ์กฐ ํ์ํฉ๋๋ค. ์ด๋ฌํ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐ๋ก ์ฒ๋ฆฌํ๋ ๋์์๋ "/path/bad.phar" ํ์ผ์ด ์ฌ์ฉ๋ฉ๋๋ค.
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ CMS TYPO3 ์ ์์๊ฐ ๊ฐ๋ฐํ์ง๋ง Drupal ๋ฐ Joomla ํ๋ก์ ํธ์์๋ ์ฌ์ฉ๋๋ฏ๋ก ์ทจ์ฝ์ฑ์ ์ทจ์ฝํฉ๋๋ค. ๋ฆด๋ฆฌ์ค์์ ํด๊ฒฐ๋ ๋ฌธ์ PharStreamWrapper 2.1.1 ๋ฐ 3.1.1. Drupal ํ๋ก์ ํธ๋ ์
๋ฐ์ดํธ 7.67, 8.6.16 ๋ฐ 8.7.1์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. Joomla์์ ์ด ๋ฌธ์ ๋ ๋ฒ์ 3.9.3๋ถํฐ ๋ํ๋๋ฉฐ ๋ฆด๋ฆฌ์ค 3.9.6์์ ์์ ๋์์ต๋๋ค. TYPO3์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด PharStreamWapper ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์
๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
์ค์ ์ ์ธ ์ธก๋ฉด์์ PharStreamWapper์ ์ทจ์ฝ์ ์ '๊ด๋ฆฌ ํ
๋ง' ๊ถํ์ด ์๋ Drupal Core ์ฌ์ฉ์๊ฐ ์
์ฑ phar ํ์ผ์ ์
๋ก๋ํ๊ณ ๊ทธ ์์ ํฌํจ๋ PHP ์ฝ๋๊ฐ ํฉ๋ฒ์ ์ธ phar ์์นด์ด๋ธ๋ก ๊ฐ์ฅํ์ฌ ์คํ๋๋๋ก ํ์ฉํฉ๋๋ค. "Phar ์ญ์ง๋ ฌํ" ๊ณต๊ฒฉ์ ๋ณธ์ง์ PHP ํจ์ file_exists()์ ๋ก๋๋ ๋์๋ง ํ์ผ์ ํ์ธํ ๋ ์ด ํจ์๊ฐ "phar://"๋ก ์์ํ๋ ๊ฒฝ๋ก๋ฅผ ์ฒ๋ฆฌํ ๋ Phar ํ์ผ(PHP ์์นด์ด๋ธ)์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ญ์ง๋ ฌํํ๋ค๋ ๊ฒ์
๋๋ค. . file_exists() ํจ์๊ฐ ํ์ฅ์๊ฐ ์๋ ์ฝํ
์ธ ๋ณ๋ก MIME ์ ํ์ ๊ฒฐ์ ํ๋ฏ๋ก phar ํ์ผ์ ์ด๋ฏธ์ง๋ก ์ ์กํ ์ ์์ต๋๋ค.
์ถ์ฒ : opennet.ru