Drupal, Joomla ๋ฐ Typo3์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” PharStreamWrapper ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ทจ์•ฝ์ 

๋„์„œ๊ด€์—์„œ 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

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