์„œ๋ฒ„์—์„œ ์›๊ฒฉ ์ฝ”๋“œ ์‹คํ–‰์„ ํ—ˆ์šฉํ•˜๋Š” php-fpm์˜ ์ทจ์•ฝ์ 

์œ ํšจํ•œ PHP 7.3.11, 7.1.33 ๋ฐ 7.2.24์˜ ์ˆ˜์ • ๋ฆด๋ฆฌ์Šค ์ œ๊ฑฐ ์œ„๋…ํ•œ ์ทจ์•ฝ์  (CVE-2019-11043) PHP-FPM(FastCGI ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ์ž) ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ์Šคํ…œ์—์„œ ์›๊ฒฉ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PHP ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด Nginx์™€ ํ•จ๊ป˜ PHP-FPM์„ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ฒ„๋ฅผ ๊ณต๊ฒฉํ•˜๋ ค๋ฉด ์ด๋ฏธ ๊ณต๊ฐœ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ผ ์•…์šฉํ•˜๋‹ค.

"fastcgi_split_path_info"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ URL์˜ ์ผ๋ถ€๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  PATH_INFO ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜์ง€๋งŒ ๋จผ์ € "try_files $fastcgi_script_name"์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์˜ ์กด์žฌ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  PHP-FPM์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” nginx ๊ตฌ์„ฑ์—์„œ ๊ณต๊ฒฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ง€์‹œ์–ด ๋˜๋Š” "if (!-f $)" ๊ตฌ์„ฑ document_root$fastcgi_script_name)". ๋ฌธ์ œ๋Š” ๋˜ํ•œ ๋ช…์‹œ๋œ NextCloud ํ”Œ๋žซํผ์— ์ œ๊ณต๋˜๋Š” ์„ค์ •์—์„œ. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ์˜ ๊ตฌ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์น˜ ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}

๋‹ค์Œ ํŽ˜์ด์ง€์—์„œ ๋ฐฐํฌ ํ‚คํŠธ์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ๋น„์•ˆ, RHEL, Ubuntu, ์ˆ˜์„ธ/์˜คํ”ˆ์ˆ˜์„ธ, FreeBSD์˜, ์•„์น˜, ํŽ˜๋„๋ผ. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ "fastcgi_split_path_info" ์ค„ ๋’ค์— ์š”์ฒญ๋œ PHP ํŒŒ์ผ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

try_files $fastcgi_script_name =404;

ํŒŒ์ผ์—์„œ ํฌ์ธํ„ฐ๋ฅผ ์กฐ์ž‘ํ•  ๋•Œ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์‚ฌํ”ผ/fpm/fpm/fpm_main.c. ํฌ์ธํ„ฐ๋ฅผ ํ• ๋‹นํ•  ๋•Œ PATH_INFO ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ๊ฐ’์—๋Š” PHP ์Šคํฌ๋ฆฝํŠธ ๊ฒฝ๋กœ์™€ ์ผ์น˜ํ•˜๋Š” ์ ‘๋‘์‚ฌ๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •๋ฉ๋‹ˆ๋‹ค.
fastcgi_split_path_info ์ง€์‹œ๋ฌธ์ด ๊ฐœํ–‰ ๊ตฌ๋ถ„ ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ ๊ฒฝ๋กœ ๋ถ„ํ• ์„ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ(์˜ˆ๋ฅผ ๋“ค์–ด ๋งŽ์€ ์˜ˆ์—์„œ "^(.+?\.php)(/.*)$" ์‚ฌ์šฉ์„ ์ œ์•ˆํ•จ) ๊ณต๊ฒฉ์ž๋Š” ๋‹ค์Œ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋นˆ ๊ฐ’์€ PATH_INFO ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” ์‹คํ–‰์ด ๊ณ„์† ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ˆ˜ํ–‰ ํ•œ path_info[0]์„ XNUMX์œผ๋กœ ์“ฐ๊ณ  FCGI_PUTENV๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ • ๋ฐฉ์‹์œผ๋กœ ํ˜•์‹ํ™”๋œ URL์„ ์š”์ฒญํ•จ์œผ๋กœ์จ ๊ณต๊ฒฉ์ž๋Š” path_info ํฌ์ธํ„ฐ๋ฅผ "_fcgi_data_seg" ๊ตฌ์กฐ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ”์ดํŠธ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๋ฐ”์ดํŠธ์— XNUMX์„ ์“ฐ๋ฉด "char* pos"๊ฐ€ ์ด๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด์ „์— ์œ„์น˜ํ–ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ. ๋‹ค์Œ FCGI_PUTENV๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์œผ๋กœ ์ด ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฎ์–ด์”๋‹ˆ๋‹ค. ์ง€์ •๋œ ๋ฉ”๋ชจ๋ฆฌ์—๋Š” ๋‹ค๋ฅธ FastCGI ๋ณ€์ˆ˜์˜ ๊ฐ’๋„ ์ €์žฅ๋˜๋ฉฐ, ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ž‘์„ฑํ•จ์œผ๋กœ์จ ๊ณต๊ฒฉ์ž๋Š” ๊ฐ€์ƒ์˜ PHP_VALUE ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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