2024 ์๋ฐ๊ธฐ Hot๐ฅ๋ณด์ ์ฌ๊ฑด ์ฌ๊ณ
๊ฐ์
2024๋ ๋ ์๋ฐ๊ธฐ์๋ ๋ง์ ๋ณด์ ์ฌ๊ฑด/์ฌ๊ณ ๊ฐ ์์์ต๋๋ค. ์ด๋ฒ ํฌ์คํธ์์๋ ํฐ์ค๋ฆฌ Security Assessment ํ์ ์ฐ๊ตฌ์๋ค์ด ์ ์ ํ 2024๋ ์๋ฐ๊ธฐ์ ์ฃผ์ ๋ณด์ ์ฌ๊ฑด/์ฌ๊ณ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. LockBit Takedown
๊ฐ์ฅ ๋จผ์ ์ดํด๋ณผ ์ฌ๊ฑด์ LockBit Takedown์ ๋๋ค. LockBit์ 2020๋ ์ ํ๋์ ์์ํ Ransomware as a Service(RaaS)๋ก, ์ธ๊ณ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋์ฌ์จ์ด ์ค ํ๋์ ๋๋ค. LockBit ๋์ฌ์จ์ด์ ์ํด ๋ฐ์ํ ํผํด์๋ 2,500๋ช ์ด ๋๊ณ , ๊ทธ๋ค์ด ์ ์ ํผํด์ก์ 1์ต 5์ฒ๋ง ๋ฌ๋ฌ๊ฐ ๋๋ ๊ฒ์ผ๋ก ์๋ ค์ ธ ์์ต๋๋ค.
LockBit์ ๋์ฌ์จ์ด์ ์ด๋ฆ์ด์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก๋ LockBit ๋์ฌ์จ์ด๋ฅผ ๊ด๋ฆฌํ๋ ๋ฒ์ฃ ์กฐ์ง๋ LockBit์ด๋ผ๊ณ ๋ถ๋ฅด๊ณ ์์ต๋๋ค. ์ ๋ฒ 2023 Hot๐ฅ ๋ณด์ ์ฌ๊ฑด ์ฌ๊ณ โ ์๋ฐ๊ธฐ์์๋ ์๊ฐํด๋๋ ธ๋ LockBit ๋์ฌ์จ์ด ์กฐ์ง์ด ๋ฐ๋ก ์ด LockBit ๋์ฌ์จ์ด๋ฅผ ๊ด๋ฆฌํ๋ ๋ฒ์ฃ ์กฐ์ง์ ๋๋ค.
2024๋ 2์ 20์ผ, ๋ฏธ๊ตญ๊ณผ ์๊ตญ์ ํฌํจํ ์ฌ๋ฌ ๊ตญ๊ฐ์ ์์ฌ ๊ธฐ๊ด๋ค์ด ๊ณต์กฐํ์ฌ LockBit ๋์ฌ์จ์ด ์กฐ์ง์ ์ฅ์ ํ์ต๋๋ค.
LockBit ์กฐ์ง์ ์์ฅ์ผ๋ก ์๋ ค์ง LockBitSupp์ ์ ์ฅ๋ฌธ์์ PHP 8.1.2 ๋ฒ์ ์ ์ ๋ฐ์ดํธํ์ง ์์ ์๋ฒ๊ฐ ํ์ทจ๋์๋ค๊ณ ๋ฐํ๋ฉฐ, ์์ฌ ๊ธฐ๊ด๋ค์ด CVE-2023โ3824 ๋๋ 0-day ๊ณต๊ฒฉ์ ์ฌ์ฉํ์ ๊ฐ๋ฅ์ฑ์ ์ ๊ธฐํ์ต๋๋ค.
CVE-2023โ3824๋ phar(PHP Archive) ํ์ผ์ ์ฝ์ ๋ ๋ฐ์ํ๋ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ ์ทจ์ฝ์ ์ผ๋ก, phar ๋ด๋ถ ํ์ผ ์ด๋ฆ์ ๊ธธ์ด์ ๋ํ ๊ฒ์ฆ์ด ๋ฏธํกํ์ฌ ๋ฐ์ํฉ๋๋ค. ํด๋น CVE์ PoC๋ ์๋์ ๊ฐ์ต๋๋ค.
$phar = new Phar('myarchive.phar');
$phar->startBuffering();
$phar->addFromString(str_repeat('A', PHP_MAXPATHLEN - 1).'B', 'This is the content of the file.');
$phar->stopBuffering();
?>
$handle = opendir("phar://./myarchive.phar");
$x = readdir($handle);
closedir($handle);
var_dump($x);
?>
LockBitSupp์ ๋ฐ๋ฅด๋ฉด, ์์ฌ ๊ธฐ๊ด์ ์ด๋ฒ ์ฅ์ ์ ํตํด ์น ์๋ฒ์ ์ ์ฒด ์์ค ์ฝ๋์ LockBit ์ ์ฒด ๋ณตํธํ ํค์ 2.5%์ ํด๋นํ๋ ์ฝ 1,000๊ฐ์ ๋ณตํธํ ํค๋ฅผ ํ๋ํ์ต๋๋ค. ํ์ง๋ง, ์ด๋ฌํ ์ฑ๊ณผ์๋ ๋ถ๊ตฌํ๊ณ LockBit์ 5์ผ ๋ง์ ์น์ฌ์ดํธ๋ฅผ ๋ณต๊ตฌํ๊ณ ํ๋์ ์ฌ๊ฐํ์ต๋๋ค.
LockBitSupp์ ์ ์ฒด์ ๋ํ ์ด์ผ๊ธฐ๋ ์์์ต๋๋ค. ๋ฏธ๊ตญ ๊ตญ๋ฌด๋ถ๋ LockBitSupp์ ์ ์ฒด๋ฅผ ๋ฌ์์ ๊ตญ์ ์ Dmitry Yuryevich Khoroshev๋ผ๊ณ ๋ฐํ๋ฉฐ, ์ต๋ ์ฒ๋ง ๋ฌ๋ฌ(ํํ ์ฝ 139์ต์)์ ํ์๊ธ์ ์ ์ํ์ต๋๋ค. ํ์ง๋ง, Khoroshev๋ Click Here ํ์บ์คํธ์์ ์ธํฐ๋ทฐ์์ ์์ ์ด LockBitSupp์ด ์๋๋ผ๊ณ ์ฃผ์ฅํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ดํ FBI๋ 2024๋ ๋ณด์คํด ์ฌ์ด๋ฒ ๋ณด์ ์ปจํผ๋ฐ์ค์์ Khoroshev๊ฐ LockBit์ ์์ฅ์์ ๋ค์ ํ๋ฒ ๋ฐํ๊ณ , ์์ ๋ค์ด 7,000๊ฐ์ ๋ณตํธํ ํค๋ฅผ ํ๋ณดํ๋ค๊ณ ๋ฐํํ์ต๋๋ค.
๋์ฌ์จ์ด ์กฐ์ง ์ฅ์ ์ ์ํ ์์ฌ ๊ธฐ๊ด์ ๋ ธ๋ ฅ์ด ์์์ง๋ง, LockBit์ด ์๋ฒ๋ฅผ ์ฅ์ ๋นํ ๋ค์๋ ๋ฐ๋ก ํ๋์ ์ฌ๊ฐํ ๋งํผ, ๊ธฐ์ /๊ธฐ๊ด/๊ฐ์ธ์ ๋์ฌ์จ์ด ๊ณต๊ฒฉ์ ๊ณ์ํด์ ๋๋นํด์ผ ํฉ๋๋ค. ์ค์ํ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐฑ์ ํ๊ณ ํ๊ฒฝ์ ๋ถ๋ฆฌํจ์ผ๋ก์จ ๋์ฌ์จ์ด ๊ณต๊ฒฉ์ ํผํด๋ฅผ ์ต์ํํ ์ ์์ต๋๋ค. ์ฃผ๊ธฐ์ ์ธ ๋ชจ๋ํฐ๋ง๊ณผ ์ฌ์ฉ์์ ์ฃผ์๊ฐ ๋์ฌ์จ์ด ๊ณต๊ฒฉ์ ๋ํ ์ต์ ์ ๋ฐฉ์ด์ ๋๋ค.
Reference
https://www.europol.europa.eu/media-press/newsroom/news/new-measures-issued-against-lockbit
https://www.justice.gov/opa/pr/us-and-uk-disrupt-lockbit-ransomware-variant
https://therecord.media/lockbitsupp-interview-ransomware-cybercrime-lockbit
https://github.com/php/php-src/security/advisories/GHSA-jqcx-ccgc-xwhv
2. XZ Backdoor
๋ค์์ผ๋ก ์ดํด๋ณผ ์ฌ๊ฑด์ XZ Backdoor์ ๋๋ค. XZ Backdoor๋ XZ ํ๋ก์ ํธ์ ๋ฉ์ธํ ์ด๋ ์ค ํ๋๊ฐ ํ๋ก์ ํธ์ ๋ฐฑ๋์ด๋ฅผ ์ฌ์๋ ์ฌ๊ฑด์ผ๋ก, 2024๋ ์๋ฐ๊ธฐ์ ๊ฐ์ฅ ์ด์๊ฐ ๋์๋ ๋ณด์ ์ฌ๊ฑด/์ฌ๊ณ ์ ๋๋ค.
XZ๋ ์ ๋์ค ๋ฐ ์๋์ฐ ์ด์์ฒด์ ์์ ์ฌ์ฉํ๋ ์์ถ ์ ํธ๋ฆฌํฐ๋ก, LZMA2 ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋์ ์์ถ๋ฅ ์ ์ ๊ณตํ๋ ๊ฒ์ด ํน์ง์ ๋๋ค. XZ ์ ํธ๋ฆฌํฐ๋ ๋ง์ ์ด์ฉ์๋ค์ด ์ฌ์ฉํ๋ ์คํ์์ค ํ๋ก์ ํธ ๋๊ตฌ์๊ธฐ์ ์ด๋ฒ ๋ฐฑ๋์ด๋ ํฐ ์ด์๊ฐ ๋์์ต๋๋ค.
๋ฐฑ๋์ด๋ฅผ ์ฌ์ ๋ฉ์ธํ ์ด๋๋ Jia Tan(JiaT75)์ผ๋ก ๋ฐํ์ก์ต๋๋ค. Jia Tan์ 2021๋ ๋ถํฐ XZ ํ๋ก์ ํธ์ ํจ์น๋ฅผ ์ ์ถํ๋ฉฐ ๊ธฐ์ฌํ๊ธฐ ์์ํ์ต๋๋ค. ๊ทธ๋ ๊พธ์คํ ํจ์น๋ฅผ ๋ณด๋ด๋ฉฐ ์ ๋ขฐ๋ฅผ ์์๊ณ , 2023๋ 1์์ Lasse Collin์ผ๋ก๋ถํฐ ๋ฉ์ธํ ์ด๋ ๊ถํ์ ๋ถ์ฌ ๋ฐ์์ต๋๋ค. ์ดํ Jia Tan์ ํ๋ก์ ํธ์์ ๋ ํฐ ์ญํ ์ ๋งก๊ฒ ๋์๋๋ฐ, ์ด ์์ ๋ถํฐ ๋ฐฑ๋์ด๋ฅผ ๊ต๋ฌํ๊ฒ ์ ๋ฐ์ดํธ์ ์ถ๊ฐํ๊ณ , ๋ฆฌ๋ ์ค ์ปค๋ฎค๋ํฐ์ ๋ฆด๋ฆฌ์ฆ ์ ๋ฐ์ดํธ๋ฅผ ์ฌ์ดํ์์ต๋๋ค.
์ด๋ฒ์ ๋ฐํ์ง XZ ๋ฐฑ๋์ด๋ XZ Utils 5.6.0/5.6.1 ๋ฒ์ ์ ์ํฅ์ ์ฃผ๋ ๊ฒ์ผ๋ก ์๋ ค์ก์ต๋๋ค(์ฐธ๊ณ : CVE-2024โ3094). ๋ฐฑ๋์ด๋ฅผ ์ด์ฉํ๋ฉด, sshd์์ ์ฌ์ฉํ๋ RSA_public_decrypt
ํจ์๋ฅผ ํ์ด์ฌํนํ์ฌ sshd ์๋น์ค์ ์ธ์ฆ์ ์ธ์ฆ์ ์ฐํํ๊ณ ์๊ฒฉ ๋ช
๋ น์ ์คํํ ์ ์์ต๋๋ค. ๋ฐฑ๋์ด๋ ์ ๊ตํ๊ณ ๋ณต์กํ๊ฒ ๋๋
ํ๋์ด ์ค๋น์ ์ค๋ ์๊ฐ์ด ํ์ํ์ ๊ฒ์ด๋ผ๋ ์ถ์ ์ด ์์๋๋ฐ, ์ค์ ๋ก ๊ณต๊ฒฉ์๊ฐ ํด๋น ๋ฐฑ๋์ด๋ฅผ ํ๋ก์ ํธ์ ์ฝ์
ํ๊ธฐ ์ํด ์ต์ 2๋
์ ์ค๋น๋ฅผ ํ ๊ฒ์ผ๋ก ๋ฐํ์ก์ต๋๋ค. ๋ฐฑ๋์ด์ ์ ๊ตํจ ๋๋ฌธ์, Jia Tan์ ๊ณ์ ์ด ํ์ทจ๋์๊ฑฐ๋, Jia Tan ํผ์๊ฐ ์๋ ๋จ์ฒด๊ฐ ์ด ๋ฐฑ๋์ด ์
์ฑ์ฝ๋๋ฅผ ์ค๋นํ์ ๊ฐ๋ฅ์ฑ๋ ์ ๊ธฐ๋ ๋ฐ ์์ต๋๋ค.
๋ฐฑ๋์ด๋ 2024๋ 3์ 29์ผ Microsoft์ ์ํํธ์จ์ด ์์ง๋์ด Andres Freund๊ฐ ๋ง์ดํฌ๋ก๋ฒค์น๋งํน์ ์ํํ๋ ์ค ๋ฐ๊ฒฌํ์ฌ ์ ๋ณดํ์ต๋๋ค. Andres๋ ๋ง์ดํฌ๋ก๋ฒค์น๋งํน์ ํตํด sshd ํ๋ก์ธ์ค์ CPU ์ฌ์ฉ๋์ด ๋์ ๊ฒ์ ๋ฐ๊ฒฌํ๊ณ , liblzma ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ๋กํ์ผ๋ง์ ํตํด CPU ์๊ฐ์ ๋๋ถ๋ถ์ด ๋ฐฑ๋์ด๊ฐ ์จ๊ฒจ์ ธ ์๋ liblzma ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ์ฉ๋๋ ๊ฒ์ ํ์ธํ์ต๋๋ค.
XZ์ ๋ฐฑ๋์ด๊ฐ ์๋ค๋ ์ฌ์ค์ด ๋ฐํ์ง ์ดํ, ๋ง์ ํด์ปค ๋ฐ ๊ฐ๋ฐ์๋ค์ด ํด๋น ์ ์ฑ ์ฝ๋๋ฅผ ๋ถ์ํ์ต๋๋ค. thesamesam์ ์์ ์ gist์ XZ ๊ด๋ จ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฆฌํ์ฌ ๊ณต์ ํ์๊ณ , ํด๋น ๊ธ์ ํตํด ์ธ๊ณ์ ํด์ปค๋ค๊ณผ ๋ถ์ ๊ณผ์ ์ ๊ณต์ ํ ๋์ XZ ๋ฐฑ๋์ด๋ฅผ ๋น ๋ฅด๊ฒ ๋ถ์ํ ์ ์์์ต๋๋ค. ๋ํ, knownsec 404 team์ ๋น๋กฏํ ์ฌ๋ฌ ๋งค์ฒด์์ XZ 5.6.0/5.6.1 ๋ฒ์ ์ ์ฝ์ ๋ ๋ฐฑ๋์ด์ ๋์ ๊ณผ์ ์ ๋ถ์ํ ๋ด์ฉ์ ๊ณต๊ฐํ์ต๋๋ค. ์๋๋ Thomas Roccia๊ฐ ๊ณต์ ํ XZ ์ฌ๊ฑด์ ์ค๋ช ํ๋ ์ฌ์ง์ ๋๋ค.
์ ์ฌ์ง์์ ์ ์ ์๋ฏ์ด, m4/build-to-host.m4
ํ์ผ์ ํตํด XZ 5.6.0/5.6.1 ๋ฒ์ ์ ์
์ฑ ์ฝ๋๊ฐ ์ฝ์
๋์์ต๋๋ค. ํด๋น ํ์ผ์ ๋น๋ ํ๋ก์ธ์ค์์ ์คํ๋๋ ๋งคํฌ๋ก๋ก, ์
์ฑ ์ฝ๋๊ฐ ํฌํจ๋ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์คํํ ์ ์๊ฒ ์ค๊ณ๋์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ๋จ๊ณ์์๋ ํน์๊ฐ ๋งคํ์ ํตํด tests/files/bad-3-corrupt_lzma2.xz
ํ์ผ์ ๋ณตํธํํ๋ฉฐ, ์ด ๊ณผ์ ์์ ์
์ฑ ์ฝ๋๋ ๋ณตํธํ๋ ํ์ผ์ ์ฝ์
๋์ด ์คํ๋ฉ๋๋ค.
๋ ๋ฒ์งธ ๋จ๊ณ์์๋ test/files/good-large-compressed.lzma
ํ์ผ์์ ์ถ์ถ๋ ๋ฐ์ดํฐ๊ฐ liblzma_la-crc64-fast.o
ํ์ผ์ ์ปดํ์ผ ๋ฐ ๋งํน ๊ณผ์ ์ ํฌํจ๋ฉ๋๋ค. ์ด ๋จ๊ณ์์๋ test/files/
๋๋ ํ ๋ฆฌ์ ์กด์ฌํ๋ ํ์ผ๋ค์ ์๋ช
์ ํ์ธํ๊ณ , ํ์ง๋ ํ์ผ๋ค์ ์ธ๊ทธ๋จผํธ๋ฅผ ๋ณํฉํ ํ, ๋ฐ์ดํธ ๋งคํ์ ํตํด ๋ณตํธํํจ์ผ๋ก์จ ๋ฐ์ดํฐ๋ฅผ ์คํํฉ๋๋ค. ์ํธํ๋ ๋ฐฑ๋์ด๋ m4/build-to-host.m4
ํ์ผ์์ ์คํ๋๋๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
๊ณต๊ฒฉ์๋ ๋ฐฑ๋์ด์ ์๋ฐํ ๋์์ ์ํด, sshd์์ ์ฌ์ฉํ๋ RSA_public_decrypt
ํจ์๋ฅผ ํ์ด์ฌํนํ๋ ๋ณต์กํ ๊ตฌํ ๋ฐฉ์์ ์ฌ์ฉํ์ต๋๋ค. ๊ณต๊ฒฉ์๋ XZ Utils ์์ค ์ฝ๋์ ๋ฐฑ๋์ด๋ฅผ ์จ๊ธฐ๊ณ , ์ปดํ์ผ ์คํฌ๋ฆฝํธ ์์ ์ ํตํด ์ปดํ์ผ ๊ณผ์ ์์ liblzma5.so
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฐฑ๋์ด ์ฝ๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ์ดํ sshd ์์ ์ liblzma5.so
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ์ ์ผ๋ก ๋ถ๋ฌ์ค๊ฒ ํ์๊ณ , IFUNC์ rtdl-audit ๋ฉ์ปค๋์ฆ์ ์ด์ฉํ์ฌ RSA_public_decrypt
ํจ์์ ํ์ด์ฌํน์ ๊ตฌํํ์ต๋๋ค. ๊ณต๊ฒฉ์๋ ํด๋น ํจ์์ ๋ด๋ถ ๋์์ ๋ณ๊ฒฝํ์ฌ, ์ธ์ฆ์ ํต๊ณผํ ๊ฒฝ์ฐ ์๊ฒฉ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ ๋ฉ์ปค๋์ฆ์ ์ถ๊ฐํ์ต๋๋ค. ๋ํ, ์ธ์ฆ ์๋ช
๊ฒ์ฆ ๊ณผ์ ์ ์์ฑํ ๊ณต๊ฐํค๋ฅผ ์ถ๊ฐํ์ฌ, ๊ณต๊ฒฉ์๊ฐ ์์ ์ ๋น๋ฐํค๋ก sshd ์ธ์ฆ์ ํต๊ณผํ ์ ์๋๋ก ํ์ต๋๋ค.
XZ ๋ฐฑ๋์ด์ ๋์ํ๊ธฐ ์ํด์๋, ๋จผ์ XZ ์ ํธ๋ฆฌํฐ๊ฐ ๋ฐฑ๋์ด์ ์ํฅ์ ๋ฐ๋ 5.6.0/5.6.1 ๋ฒ์ ์ธ์ง ํ์ธํด์ผ ํฉ๋๋ค. ํด๋น ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๋ค๋ฅธ ์์ ์ ์ธ ๋ฒ์ ์ผ๋ก ๋๋๋ฆฌ๊ฑฐ๋ ๋ณด์ ํจ์น๊ฐ ์ ์ฉ๋ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํจ์ผ๋ก์จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
๋ฒค๋์ ๋ณด์ ์ ๋ฌธ๊ฐ๋ค์ ์ด๋ฒ ์ด์์ ๋ณด๋ค ์ฒด๊ณ์ ์ผ๋ก ๋์ํ ํ์๊ฐ ์์ต๋๋ค. ํ์ฌ์ ์์ฐ ๋ชฉ๋ก๋ค์ ์ทจ์ฝํ ๋ฒ์ ์ฌ์ฉ ์ฌ๋ถ๋ฅผ ์กฐ์ฌํ๊ณ , ์ํฉ์ ๋ง๋ ์ ์ ํ ์กฐ์น(์: ์ ์ํ ๋กค๋ฐฑ, ๋คํธ์ํฌ ์ฐจ๋จ)๋ฅผ ์ทจํด์ผ ํฉ๋๋ค. ๋ํ, ์์คํ ๋ก๊ทธ์ ๋คํธ์ํฌ ํธ๋ํฝ์ ๋ชจ๋ํฐ๋งํ์ฌ ํด๋น ์ด์๊ฐ ์ ์ฉ์ด ๋ ์ด๋ ฅ์ด ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
์ด๋ฒ ์ด์ ์ด์ ์๋, ์คํ์์ค์ ๋ฐฑ๋์ด๋ฅผ ์ฌ์๋ ์ฌ๋ก๋ ๋ง์ด ์์์ต๋๋ค. ๋ํ์ ์ผ๋ก, PHP Git ์ ์ฅ์(Repository)์ ๋ฐฑ๋์ด๋ฅผ ์ฌ์๋ ์ฌ๊ฑด์ด ์์ต๋๋ค. ์คํ์์ค ์ํํธ์จ์ด์ ๋ฐฑ๋์ด ์ ์ฑ ์ฝ๋๊ฐ ์ฌ์ด์ง ๊ฒฝ์ฐ, ๊ณต๊ฒฉ์๋ฅผ ํฌํจํด ํด๋น ์ ์ฑ ์ฝ๋์ ์กด์ฌ๋ฅผ ์๋ ๋ชจ๋ ์ด์ฉ์๊ฐ ์์คํ ์ ๋ฌด๋จ์ผ๋ก ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ๊ฑฐ๋ ์์คํ ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค. ๋ํ, ๋ค์์ ๊ธฐ์ ์์ ์ด์ฉํ๋ ์คํ์์ค์ผ ๊ฒฝ์ฐ์๋ ํ๋์ ์ ์ฅ์์ ์ฌ์ ๋ฐฑ๋์ด๊ฐ ๋ค์์ ๊ธฐ์ ์ ๊ณต๊ฒฉํ๋ ๊ณต๊ธ๋ง ๊ณต๊ฒฉ(Supply chain attack)์ผ๋ก ์ฝ๊ฒ ์ฐ๊ฒฐ๋ ์ ์์ต๋๋ค.
๋๋ฌธ์ ์คํ์์ค ์ํํธ์จ์ด์ ๋ฐฑ๋์ด ๋ฌธ์ ๋ ๊ทธ ํ๊ธ๋ ฅ๊ณผ ์ฌ๊ฐ์ฑ์ด ๋งค์ฐ ๋์ต๋๋ค. ์ด๋ฐ ์ํ์ ๋ชจ๋ ์ด์ฉ์์๊ฒ ํฐ ํผํด๋ฅผ ์ฃผ๊ณ , ํด๋น ์คํ์์ค ํ๋ก์ ํธ์ ์ ๋ขฐ์ฑ์ ํฌ๊ฒ ํผ์ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์คํ์์ค ๋ด๋น์๋ค์ ๋ฉ์ธํ ์ด๋๋ฅผ ๋น๋กฏํ ๊ด๋ฆฌ์๋ฅผ ์ ์คํ๊ฒ ์ ์ ํด์ผ ํฉ๋๋ค.
XZ ๋ฐฑ๋์ด ์ฌ๊ฑด์ ์คํ์์ค ์ํํธ์จ์ด ๋ณด์ ๊ด๋ฆฌ์ ์ค์์ฑ์ ์ผ๊นจ์์ฃผ๋ ์ฌ๋ก์ ๋๋ค. ์คํ์์ค ์ํํธ์จ์ด์ ๋ํด ์ต์ ๋ณด์ ์ ๋ฐ์ดํธ๋ฅผ ์ง์์ ์ผ๋ก ์ ์ฉํ๊ณ , ์์ฌ์ค๋ฌ์ด ํ๋์ ๋ชจ๋ํฐ๋งํ์ฌ ์์คํ ์ ๋ณดํธํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ํนํ, ๋น๋ ํ๋ก์ธ์ค์์ ์ฌ์ฉ๋๋ ์คํฌ๋ฆฝํธ์ ์ค์ ํ์ผ์ ์ฒ ์ ํ ๊ฒํ ํ์ฌ ์ ์ฑ์ฝ๋๊ฐ ํฌํจ๋์ง ์๋๋ก ํด์ผ ํฉ๋๋ค.
Reference
https://boehs.org/node/everything-i-know-about-the-xz-backdoor
https://medium.com/@knownsec404team/analysis-of-the-xz-utils-backdoor-code-d2d5316ac43f
3. Telegram RCE
์ค๋งํธํฐ์ด ๋ณดํธํ๋ ํ, ๋ง์ ์ฌ๋๋ค์ด ํ๋ ๋๋ ๋ ๊ฐ ์ด์์ ๋ฉ์ ์ ์ ํ๋ฆฌ์ผ์ด์ (์ดํ ์ฑ)์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ด๋ฒ ์ด์๊ฐ ๋ฐ๊ฒฌ๋ Telegram์ ์ธ๊ณ์์ 4๋ฒ์งธ๋ก ๋ง์ ์ด์ฉ์(์ฝ 9์ต ๋ช )๊ฐ ์ฌ์ฉํ๋ ๋ฉ์ ์ ์ฑ์ ๋๋ค.
์ฌํด 4์, X(ํธ์ํฐ)์์ ์๋์ฐ ์ฉ Telegram์์ ์๊ฒฉ ์ฝ๋ ์คํ(RCE)์ด ๊ฐ๋ฅํ๋ค๋ ์์์ด ์ฌ๋ผ์์ต๋๋ค.
ํด๋น ์์์ ์๋์ฐ์ฉ Telegram์ ์ฑํ
์ฐฝ์์ ๋์์์ ๋๋ฅด์ ๊ณ์ฐ๊ธฐ๊ฐ ์คํ๋๋ ๋ชจ์ต์ ๋ด๊ณ ์์ต๋๋ค. ์์์ด ์ฌ๋ผ์จ ํ, Telegram ์ธก์ "๊ทธ๋ฐ ์ทจ์ฝ์ ์ด ์กด์ฌํ๋ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค"
๋ฉฐ ๋์์์ด ๊ฑฐ์ง์ผ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๊ณ ๋ฐ๋ฐํ์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ค์ ๋ , XSS ํดํน ํฌ๋ผ์ ํด๋น ์ทจ์ฝ์ ์ Proof of Concept (PoC)๊ฐ ๊ณต๊ฐ๋์์ต๋๋ค. PoC๋ ์์ค์ฝ๋ ์์ ์คํ๋ก ์ธํ์ฌ .pyzw
ํ์ผ ์ ์ก ์ ๋ณด์ ๊ฒฝ๊ณ ์ฐฝ์ ์ฐํํ ์ ์๋ ์ทจ์ฝ์ ์ ์ด์ฉํ์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ, .pyzw
ํ์ผ์ ์ ์กํ ๋ MIME type์ video/mp4
์ผ๋ก ๋ณ๊ฒฝํ์ฌ ๋์์์ ๋ณด๋ธ ๊ฒ์ฒ๋ผ ์์ฅํ ์ ์์์ต๋๋ค.
Telegram์ ์คํ๊ฐ ๋ ๋ถ๋ถ์ ์์ค ์ฝ๋๋ฅผ ์์ ํ์๊ณ , ํด๋น ์ทจ์ฝ์ ์ด ๋ฐํ์ ๋ง๊ธฐ ์ํด ์๋ฒ์์ .pyzw
ํ์ผ ์ ์ก ์ untrusted
ํ์ฅ์๋ฅผ ์ถ๊ฐํ์ฌ ํ์ผ์ ๋ณด๋ด๋๋ก ํ์์ต๋๋ค. ์ด ํจ์น๋ ํ์ผ์ด Python์์ ์๋ ์คํ๋๋ ๊ฒ์ ๋ง๊ธฐ ์ํด, ์ด๋ค ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ์ฌ ํ์ผ์ ์ด ๊ฒ์ธ์ง ํ์ธํ๋ ์ ์ฐจ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์ด๋ฒ์ ์ดํด๋ณธ Telegram RCE๋ ๊ฐ๋ฐ์์ ์ฌ์ํ ์ค์(์คํ)๋ก ์ธํ์ฌ ๋ฐ์ํ์์ต๋๋ค. ์คํ๋ ๊ฐ๋ฐ ๊ณผ์ ์์ ํํ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก, ๊ฐ๋ฐ์๋ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ ํ์ผ์ ์ด๋ฆ์ ์์ฑํ๊ณ ์ฝ๋ ๊ฒํ ๋ฐ ํ ์คํธ๋ฅผ ๊ฐํํด์ผ ํฉ๋๋ค. ๋ํ, ์ฌ์ฉ์๋ ์ ๋ขฐํ ์ ์๋ ์์ค์์ ์ค๋ ์ฌ์ง, ๋์์, ํ์ผ์ ์ด๊ฑฐ๋ ๋ค์ด๋ก๋ํ์ง ์๋๋ก ์ฃผ์ํด์ผ ํ๋ฉฐ, ๋ณด์ ๋ฌธ์ ์๋ฐฉ์ ์ํด ์ ๊ธฐ์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
Reference
https://www.boannews.com/media/view.asp?idx=128844&direct=mobile
https://github.com/telegramdesktop/tdesktop/commit/11b57ff7d3b61684daf03b350d90e5f8d68c24b1
4. XSS in PDF.js
์ง๋ 2024๋ 5์ 20์ผ Codean Labs์์ PDF.js์ XSS ์ทจ์ฝ์ (CVE-2024โ4367)์ ๋ฐํํ์ต๋๋ค. PDF.js๋ Mozilla Corporation์ด ์ฃผ๋ํ๊ณ ์๋ ์คํ์์ค ํ๋ก์ ํธ๋ก, HTML5 canvas element๋ฅผ ์ฌ์ฉํ์ฌ PDF ๋ ๋๋ง์ ์ง์ํฉ๋๋ค. ํ์ฌ ํ์ด์ดํญ์ค์ ์น ์ ํ๋ฆฌ์ผ์ด์ , electron ๊ธฐ๋ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌํจํ ๋ค์ํ ์๋น์ค์์ PDF.js๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
ํด๋น ์ทจ์ฝ์ ์ ํฐํธ๋ฅผ ๋ ๋๋งํ๋ ๊ณผ์ ์์ ๋ฐ์ํฉ๋๋ค. PDF๋ ๋ค์์ ํฐํธ๋ค์ ์ง์ํ๊ธฐ ์ํด PDF ํ์ค์ ์ ์๋ ํฐํธ ์ธ์ ํฐํธ๋ค์ ๋ํ ์ ๋ณด๋ฅผ stream์ผ๋ก ์ ๋ฌ ๋ฐ๊ฑฐ๋, ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํตํด์ ์ ๋ฌ ๋ฐ์ ๋ ๋๋ง ํ ์ ์๋๋ก ํ๊ณ ์์ต๋๋ค. ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด ํฐํธ๋ฅผ ๋ ๋๋งํ ๊ฒฝ์ฐ ๋ฉํ๋ฐ์ดํฐ๋ก ์ ๋ฌ๋ glyph๋ฅผ ํ์ด์ง์ ๋ ๋๋งํ๋๋ฐ, ์ด๋ ์ต์ ํ๋ฅผ ์ํด ์๋์ ๊ฐ์ด pre-compile๋ ํจ์๋ฅผ ์์ฑํฉ๋๋ค.
// If we can, compile cmds into JS for MAXIMUM SPEED...
if (this.isEvalSupported && FeatureTest.isEvalSupported) {
const jsBuf = [];
for (const current of cmds) {
const args = current.args !== undefined ? current.args.join(",") : "";
jsBuf.push("c.", current.cmd, "(", args, ");\n");
}
// eslint-disable-next-line no-new-func
console.log(jsBuf.join(""));
return (this.compiledGlyphs[character] = new Function(
"c",
"size",
jsBuf.join("")
));
}
์ ์ฝ๋๋ ํ์ด์ง์ ํฐํธ๋ฅผ ์ ์ฉํ๊ธฐ ์ ์ ์คํํด์ผ ํ๋ ์ฝ๋๋ฅผ ํจ์๋ฅผ ๋์ ์ผ๋ก ์์ฑํ๊ณ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก๋ ์๋์ ๊ฐ์ด c(CanvasRenderingContext2D)๋ฅผ ํฌ๋งทํ ํฉ๋๋ค.
(function anonymous(c,size
) {
c.save();
c.transform(0.1,0,0,0.1,0,1);
c.scale(size,-size);
c.restore();
})
transform
์๋ PDF์์ FontMatrix ๋ฐฐ์ด๋ก ์ ๋ฌ๋ ํฐํธ์ glyph ์ ๋ณด๊ฐ ๋ค์ด๊ฐ๋๋ค. ์ด๋ FontMatrix์ ๋ฌธ์์ด์ด ์กด์ฌํ๋์ง ๊ฒ์ฆํ์ง ์๊ธฐ ๋๋ฌธ์, ์์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ์ฝ์
์ด ์ด๋ฃจ์ด์ ธ ํฐํธ๊ฐ ์ ์ฉ๋๊ธฐ ์ ์ ์์ ์ฝ๋๊ฐ ์คํ๋ฉ๋๋ค.
/FontMatrix [0.1 0 0 0.1 0 (1\);
debugger
//)]
์๋ฅผ ๋ค์ด, ๊ณต๊ฒฉ์๊ฐ ์์ ๊ฐ์ FontMatrix๋ฅผ PDF์ ํฐํธ ์ ๋ณด์ ์ฝ์ ํ ๊ฒฝ์ฐ, pre-compile๋ ํจ์์ debugger๋ฅผ ์คํํ๋ ์ฝ๋๊ฐ ์ถ๊ฐ๋ฉ๋๋ค. PDF ๋ ๋๋ง ๊ฒฐ๊ณผ๋ก pre-compile๋ ํจ์๊ฐ ์คํ๋ ๋ชจ์ต์ ์๋์ ๊ฐ์ต๋๋ค.
ํด๋น ์ทจ์ฝ์ ์ ํ์ฌ ํจ์น๊ฐ ์ด๋ฃจ์ด์ ธ Firefoxโฅ126, Firefox ESRโฅ115.11, PDF.jsโฅ4.2.67์ผ๋ก ์
๋ฐ์ดํธํ์ฌ ๋์ํ ์ ์์ต๋๋ค. ์์กด์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์, PDF.js์ wrapper ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์: react-pdf
)์์๋ ์ ์ ํ ํจ์น๊ฐ ์ด๋ฃจ์ด์ก๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ๋ง์ฝ ์
๋ฐ์ดํธ๋ฅผ ํ ์ ์๋ ์ํฉ์ด๋ผ๋ฉด, isEvalSupported
์ต์
์ false
๋ก ์ค์ ํ์ฌ ์ทจ์ฝํ ์ฝ๋๊ฐ ์คํ๋์ง ์๋๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค.
ํด๋น ์ทจ์ฝ์ ์ Akasec CTF์์ ๋ฌธ์ ๋ก ์ถ์ ๋๊ธฐ๋ ํ์์ต๋๋ค. ์ง์ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ฉด์, ์ทจ์ฝ์ ์ ํ์ธํ๊ณ ์ดํดํ๋๋ฐ ๋์์ ๋ฐ์ ์ ์์ต๋๋ค.
Reference
5. Git Clone Bug with symlinks
Git์ ๋ฆฌ๋ ์ค๋ฅผ ๊ฐ๋ฐํ ๋ฆฌ๋์ค ํ ๋ฅด๋ฐ์ค๊ฐ ๋ฆฌ๋ ์ค ์ปค๋ ์์ค์ฝ๋ ๊ด๋ฆฌ๋ฅผ ์ํด ๋ง๋ ํ์ ๊ด๋ฆฌ ๋๊ตฌ์ ๋๋ค. ๋ฆฌ๋์ค ํ ๋ฅด๋ฐ์ค๊ฐ 2์ฃผ๋ง์ ์์ฑ์์ผฐ๋ Git์ ๊ณ์๋ ๋ฐ์ ๊ฒฐ๊ณผ ํ์ฌ ์ ์ธ๊ณ์์ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํ์ ๊ด๋ฆฌ ๋๊ตฌ๊ฐ ๋์์ต๋๋ค.
๋๋ถ๋ถ์ ๊ฐ๋ฐ์๋ ์ฌ๋ฌ๊ฐ์ง ์ด์ ๋ก ๋ค๋ฅธ ์ฌ๋์ด ๋ง๋ Git ์ ์ฅ์๋ฅผ ๋ณต์ ํ๊ฒ ๋๋๋ฐ, ๋ณต์ ๋ง์ผ๋ก ์์์ ์ ์ฑ ๋ช ๋ น์ด ์คํ์ด ๊ฐ๋ฅํ๋ค๋ฉด ๊ฐ๋ฐ ์ปค๋ฎค๋ํฐ์ ํฐ ํผ๋์ด ์๊ธธ ๊ฒ์ ๋๋ค.
์ต๊ทผ ๋ฐ๊ฒฌ๋ CVE-2024โ32002 ์ทจ์ฝ์ ์ ํด๋น ์ํ์ด ํ์คํ๋ ์ฌ๋ก์
๋๋ค. ํด๋น ์ทจ์ฝ์ ์ ์ด์ฉํ๋ฉด ๊ณต๊ฒฉ์๊ฐ ์
์์ ์ผ๋ก ์กฐ์๋ Git ์ ์ฅ์๋ฅผ ๋ง๋ค์ด, ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ด๋ฅผ git clone โ recurse-submodules
๋ช
๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ๋ณต์ ํ ๋ Remote Code Execution (RCE) ์ทจ์ฝ์ ์ ์ ๋ฐํ ์ ์์ต๋๋ค.
ํด๋น ์ทจ์ฝ์ ์ Git์ ์๋ธ๋ชจ๋ ์ฒ๋ฆฌ ๋ฐฉ์ ๋ฐ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ํ์ผ ์์คํ
์ ํน์ฑ์ ๊ต๋ฌํ๊ฒ ์ด์ฉํฉ๋๋ค. ๊ณต๊ฒฉ์๋ ์๋ธ๋ชจ๋ ๊ฒฝ๋ก์ ๋์ผํ ์ด๋ฆ์ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋ง๋ค์ด Git ์์ฒด์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ .git
๋๋ ํ ๋ฆฌ์ ์ ๊ทผํ๊ณ , ์ด๋ฅผ ํตํด ์
์ฑ ์ฝ๋๊ฐ ํฌํจ๋ Git ํ
์ ์คํ์ํฌ ์ ์์ต๋๋ค.
์ด๋ฌํ ์ทจ์ฝ์ ์ ๊ฐ๋ฐ์๋ค์ด ์ผ์์ ์ผ๋ก ์ํํ๋ ์ ์ฅ์ ๋ณต์ ์์ ๋ง์ผ๋ก๋ ์์คํ ์ ์ํ์ ๋ ธ์ถ์ํฌ ์ ์์ด ํนํ ์ํํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๋ค์ ํญ์ ์ ๋ขฐํ ์ ์๋ ์ถ์ฒ์ ์ ์ฅ์๋ง์ ๋ณต์ ํด์ผ ํ๋ฉฐ, Git ํด๋ผ์ด์ธํธ๋ฅผ ์ต์ ๋ฒ์ ์ผ๋ก ์ ์งํ ํ์๊ฐ ์์ต๋๋ค.
ํด๋น CVE์ Git ํจ์น๋ฅผ ๋ถ์ํ Amal Murali์ ๊ธ์์ ์์ธํ ๋ถ์๊ณผ์ ๊ณผ ํจ๊ป ์ทจ์ฝ์ PoC๋ฅผ ๋ด๊ณ ์๋ Github ์ ์ฅ์ ๋งํฌ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
Reference
6. Chrome & Safari XXE
XML external entity (XXE) ๊ณต๊ฒฉ์ ์ ์์ ์ผ๋ก ์กฐ์๋ XML ์ ๋ ฅ์ XML ์ฒ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ณตํ์ฌ, XML ํ์๊ฐ ๊ฐ๋ฐ์์ ์๋์ ๋ค๋ฅด๊ฒ ๋์ํ๋๋ก ์ ๋ํ๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ ๋๋ค. ๋ณดํต XML์ external entity ๊ธฐ๋ฅ์ ์ ์ฉํ์ฌ ๊ณต๊ฒฉํ๊ธฐ ๋๋ฌธ์ XXE๋ผ๋ ์ด๋ฆ์ด ๋ถ์ฌ์ก์ต๋๋ค.
XML์์๋ entity๋ผ๊ณ ๋ถ๋ฅด๋ ํน์ ๋ฌธ์์ด์ ๋ํ ๋จ์ถ์ด ์ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ์๋์ ๊ฐ์ ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
// XML ๋ฌธ์ ํ์
์ ์์ ์์ฑ
<!ENTITY writer "someone@theori.io">
<!ENTITY copyright "Copyright Theori.">
// XML ๋ณธ๋ฌธ์ ์์ฑ
<author>&writer; ©right;</author>
XML์ด ํด์๋๋ ๊ณผ์ ์์ ์๋์ ๊ฐ์ด entity๊ฐ ํ์ฅ๋ฉ๋๋ค.
<author>someone@theori.io Copyright Theori.</author>
XML์ด๋ XML์ ํ์ ์งํฉ์ธ HTML์์ ์์ฃผ ์ฌ์ฉํ๋ <
, >
๋ ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ entity์
๋๋ค.
entity๋ ์์์ ์ค๋ช ํ ๊ฒ์ฒ๋ผ ๋ฌธ์ ํ์ ์ ์์ ๋จ์ถ์ด๋ฅผ ์ง์ ์์ฑํ์ฌ ์ ์ธํ๋ internal entity์, ๋ฌธ์ ํ์ ์ ์์ ์ ์ธ๋์ด ์์ง๋ง ๋จ์ถ์ด๋ ์ธ๋ถ์ ์์ฑ๋์ด ์๋ external entity๊ฐ ์์ต๋๋ค. external entity์ ์์๋ ์๋์ ๊ฐ์ต๋๋ค.
// XML ๋ฌธ์ ํ์
์ ์์ ์์ฑ
<!ENTITY writer โSYSโTEM "http://example.com/email">
// XML ๋ณธ๋ฌธ์ ์์ฑ
<author>&writer;</author>
XML์ด ํด์๋๋ ๊ณผ์ ์์ external entity๊ฐ ์ ์ธ๋์ด ์๊ธฐ ๋๋ฌธ์ http://example.com/email
๋ก ์์ฒญ์ ์ ์กํ์ฌ ํด๋น ๋ด์ฉ์ ์ฝ์ด ์ ์ฅํ๊ณ , XML ๋ณธ๋ฌธ์ ๋ด์ฉ์ ํ์ฅํฉ๋๋ค. ์ด๋ http ํ๋กํ ์ฝ ์ธ์๋ file ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ํน์ ์์น์ ํ์ผ์ ์ฝ์ ์ ์์ต๋๋ค.
XML์ ํด์ํ๋ ์ปดํจํฐ ๋ด๋ถ์ ์์ ํ์ผ์ ์ฝ๊ฑฐ๋, ์ธ๋ถ๋ก ์์ ์์ฒญ์ ์ ์กํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๊ธฐ ๋๋ฌธ์ XXE ๊ณต๊ฒฉ์ ํ ๋ ์น ์๋ฒ ์ฅ์ ์ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํ๊ธ๋ ฅ์ด ๋์ ์ทจ์ฝ์ ์ด์์ต๋๋ค. ํ์ง๋ง ๋ณด์์ ์ค์์ฑ์ด ์ปค์ง๊ณ , ๊ฐ๋ฐ์๋ค์ ๋์๊ณผ ๋๋ถ์ด XML ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋จ์์ XXE ์ทจ์ฝ์ ๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ์ ํํ๋ ์ต์ ์ ์ ๊ณตํ๋ฉฐ ์ด๋ ์๊ฐ๋ถํฐ ๋ฐ์ ๋น๋๊ฐ ๋ง์ด ์ค์๋ค๊ณ ์๋ ค์ ธ ์์์ต๋๋ค.
CVE-2023โ4357, CVE-2023โ40415๋ ์ด๋ฐ ์๊ฐ์ ๋ฐ๊พธ๊ฒ ํ ์ทจ์ฝ์ ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก XXE ๊ณต๊ฒฉ์ ์น ์๋ฒ๋ฅผ ๋์์ผ๋ก ์ด๋ฃจ์ด์ง์ง๋ง, ํด๋น ์ทจ์ฝ์ ๋ค์ ๊ฐ๊ฐ Chrome๊ณผ Safari๋ฅผ ๋์์ผ๋ก XXE ๊ณต๊ฒฉ์ ์๋ํ์ต๋๋ค. ๋จ์ํ๊ฒ ์๊ฐํด๋ณด๋ฉด, ์น๋ธ๋ผ์ฐ์ ๋ XML์ ํด์ํ์ฌ ๋ณด์ฌ์ฃผ๋ ๋ํ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐ์ XXE ๊ณต๊ฒฉ์ ์ทจ์ฝํ ์ ์๋ค๋ ๊ฒ์ ์์ํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ค๋ ์๊ฐ ๋์ ๋ณด์์ ๋ํ ์ฐ๊ตฌ์ ๊ฐ์ ์ด ์ด๋ฃจ์ด์ง ์น๋ธ๋ผ์ฐ์ ๋ค์ด ์ด๋ฐ ๊ธฐ๋ณธ์ ์ธ ๊ณต๊ฒฉ์ ์ทจ์ฝํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ ์ฌ๋๋ค์ ๋ง์ง ์์์ต๋๋ค.
Igor Sak-Sakovskiy๊ฐ ๋ฐ๊ฒฌํ ์ด๋ฒ ์ทจ์ฝ์ ๋ค(CVE-2023โ4357, CVE-2023โ40415)์ ์น๋ธ๋ผ์ฐ์ ์ญ์ XML์ ํด์ํ๊ณ ์ฒ๋ฆฌํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ธ ์ด์, XXE ์ทจ์ฝ์ ์ ์ํฅ์ ๋ฐ์ ์ ์๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ์์ต๋๋ค.
CVE-2023โ4357(Chrome)๊ณผ CVE-2023โ40415(Safari)๋ ๊ฐ๊ฐ Chrome๊ณผ Safari ๋ธ๋ผ์ฐ์ ์์ ๋ฐ๊ฒฌ๋ XXE ์ทจ์ฝ์ ์ ๋๋ค. ํด๋น ์ทจ์ฝ์ ๋ค์ XML์ ํํ ๋ฐฉ์์ ์ง์ ํ ๋ ์ฌ์ฉํ๋ eXtensible Stylesheet Language (XSL)์ ์ด์ฉํ๋ ๊ณผ์ ์์ ๋ฐ๊ฒฌ๋์์ผ๋ฉฐ, ๋ธ๋ผ์ฐ์ ์ XML ํ์ฑ ๊ณผ์ ์ด ์ธ๋ถ ์ํฐํฐ๋ฅผ ์ ์ ํ ์ ํํ์ง ์์ ๋ฐ์ํฉ๋๋ค. ๊ณต๊ฒฉ์๋ ์ด๋ฅผ ์ ์ฉํ์ฌ ๋ก์ปฌ ํ์ผ ์์คํ ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
์ด๋ฒ ๋ฐ๊ฒฌ์ XXE ๊ณต๊ฒฉ์ด ์ฌ์ ํ ํ์ฌ ์งํํ์ ์ํ์ด๋ฉฐ, ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ต์ ์น๋ธ๋ผ์ฐ์ ์์๋ ๋ฐ์ํ ์ ์์์ ๋ณด์ฌ์ค๋๋ค. ์ด๋ ๋ณด์ ์ ๋ฌธ๊ฐ๋ค์๊ฒ XXE ์ทจ์ฝ์ ์ ๋ํ ์ง์์ ์ธ ์ฃผ์์ ์ ๊ฒ์ ํ์์ฑ์ ์๊ธฐ์์ผ ์ฃผ์์ต๋๋ค.
Igor Sak-Sakovskiy์ ๊ธ์์ ์ทจ์ฝ์ ์ ์ฐพ๊ณ ์ ํ ๋๊ธฐ๋ถํฐ, ChatGPT์์ ์ํธ์์ฉ์ ํตํด ์์ ์ ๊ฐ์ค๋ค์ ๋ํ PoC๋ฅผ ์์ฑํ๊ณ ๋ฐ์ ์์ผ ๋๊ฐ ๊ณผ์ ๋ค์ ์์ธํ๊ฒ ํ์ธํ ์ ์์ต๋๋ค.
Reference
๋ง์น๋ฉฐ
๋ณธ ํฌ์คํ ์ ํตํด 2024๋ ์๋ฐ๊ธฐ์ ๋ฐ์ํ ๋ณด์ ์ฌ๊ฑด/์ฌ๊ณ ๋ฅผ ๋ค๋ฃจ์ด ๋ณด์์ต๋๋ค. 2024๋ ํ๋ฐ๊ธฐ์๋ ํฐ์ค๋ฆฌ Security Assessment ํ์ ๊พธ์คํ ์ฌ๋ก ์กฐ์ฌ์ ๊ธฐ์ ์ฐ๊ตฌ๋ฅผ ํตํด ์ฆ๊ฐ์ ์ธ ์ํ๋ถํฐ ์ ์ฌ์ ์ธ ์ํ๊น์ง ์ ์ ์ ์ผ๋ก ๋์ํด๋๊ฐ ์์ ์ ๋๋ค.
About Theori Security Assessment
ํฐ์ค๋ฆฌ Security Assessment ํ์ ์ค์ ํด์ปค๋ค์ ์คํ์๋ธ ๋ณด์ ๊ฐ์ฌ ์๋น์ค๋ฅผ ํตํด ๊ณ ๊ฐ์ ์๋น์ค์ ์ธํ๋ผ์คํธ๋ญ์ฒ๋ฅผ ์์ ํ๊ฒ ํจ์ผ๋ก์จ ๋น์ฆ๋์ค๋ฅผ ๋ณดํธํฉ๋๋ค. ํนํ, ๋์ฑ ์์ ํ ์ธ์์ ์ํด ๋์ ๊ธ ์ฌ์ด๋ฒ๋ณด์ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๋ ๊ฒ์ ์ฆ๊ธฐ๋ฉฐ, ์คํ์๋ธ ์ฌ์ด๋ฒ๋ณด์์ ๋ฆฌ๋๋ก์, ๊ณต๊ฒฉ์๋ณด๋ค ํ๋ฐ ์์ ๋์ํ๊ณ ๋ถ๊ฐ๋ฅํ๋ค๊ณ ์ฌ๊ฒจ์ง๋ ๋ฌธ์ ๋ฅผ ๊ธฐ์ ์ค์ฌ์ ์ผ๋ก ํด๊ฒฐํฉ๋๋ค.