2025 ํ๋ฐ๊ธฐ Hot๐ฅ๋ณด์ ์ฌ๊ฑด ์ฌ๊ณ
๋ค์ด๊ฐ๋ฉฐ
๋ค์ฌ๋ค๋ํ๋ 2025๋ ์ด ์ ๋ฌผ์ด ๊ฐ๊ณ ์์ต๋๋ค. ์ฌํด๋ ์ ๋ ๋ง์ ๋ณด์ ์ฌ๊ฑด๊ณผ ์ฌ๊ณ ๊ฐ ๋ฐ์ํ๋ฉฐ ์ง์์ ์ผ๋ก ๋ณด์์ด ์ด์๊ฐ ๋ ํ ํด์์ต๋๋ค. ์๋ฐ๊ธฐ์ ์ด์ด ํ๋ฐ๊ธฐ์๋ ๋ํ ๋ณด์ ์ฌ๊ณ ๊ฐ ๋ค์ ๋ฐ์ํ์๊ณ , ์ธ๋ก ์ ํตํด ๊ด๋ จ ์์์ด ์ฐ์ผ ๋ณด๋๋๋ฉฐ ๋ณด์ ์ ๊ณ ์ข ์ฌ์๊ฐ ์๋๋๋ผ๋ ๋ณด์ ์นจํด ์ฌ๊ณ ๋ฅผ ์์ฐ์ค๋ฝ๊ฒ ์ธ์ํ๊ฒ ๋์์ต๋๋ค. ํ์ฅ์์๋ ๋ค์์ ๊ณ ๊ฐ์ฌ์ ์ํตํ๋ฉฐ ๋ณด์์ ๋ํ ๊ฒฝ๊ฐ์ฌ๊ณผ ์ฃผ๋ชฉ๋๊ฐ ๋์์ง ๊ฒ์ ์ฒด๊ฐํ ์ ์์์ต๋๋ค. ์ด๋ฒ ํฌ์คํธ์์๋ ํฐ์ค๋ฆฌ Frontier Squad ํ์ ์ฐ๊ตฌ์๋ค์ด ์ ์ ํ ๋ณด์ ์ฌ๊ฑด/์ฌ๊ณ ๋ฅผ ํตํด 2025๋ ์ ํ๋ฐ๊ธฐ๋ฅผ ๋์๋ณด๊ฒ ์ต๋๋ค.
์๋ฐ๊ธฐ์ ์ฃผ์ ๋ณด์ ์ฌ๊ฑด/์ฌ๊ณ ์ ๋ํ ๋ด์ฉ์ 2025 ์๋ฐ๊ธฐ ๋ณด์ ์ฌ๊ฑด ์ฌ๊ณ ์์ ํ์ธํ์ค ์ ์์ต๋๋ค.
1. Phrack Report: โAPT Down โ The North Korea Filesโ
2025๋ 8์ 8์ผ, ๊ตญ์ ํด์ปค ๋งค๊ฑฐ์ง Phrack 72ํธ์ APT Down โ The North Korea Files๋ผ๋ ์ ๋ชฉ์ ๊ธฐ์ ๋ณด๊ณ ์๊ฐ ๊ณต๊ฐ๋์์ต๋๋ค. โSaberโ, โcyb0rgโ๋ผ๋ ํ๋๋ช ์ ์ฌ์ฉํ๋ ํด์ปค๊ฐ ๊ฒ์ฌํ ํด๋น ๋ณด๊ณ ์๋ ๋ํ๋ฏผ๊ตญ์ ๊ณต๊ณตยท๋ฏผ๊ฐ ์์ญ์ ๋์์ผ๋ก ํ ๊ณต๊ฒฉ ํ๋์ ๋ค๋ฃจ๊ณ ์์ด, ๊ณต๊ฐ ์งํ ๊ตญ๋ด ๋ณด์ ์ ๊ณ์ ํฐ ํ์ฅ์ ์ผ์ผ์ผฐ์ต๋๋ค.
๋ฏธ๊ตญ ๋น์๋ฆฌ ๋จ์ฒด DDoSecrets์ ํด๋น ๋ณด๊ณ ์์ ํจ๊ป ์ฝ 8.9GB ๋ถ๋์ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ก๋ ๊ฐ๋ฅํ ํํ๋ก ๊ณต๊ฐํ์์ต๋๋ค. ํด๋น ๋ฐ์ดํฐ์๋ ๋ํ๋ฏผ๊ตญ ์ ๋ถ ์ ์๋ฌธ์์์คํ ๋ฐ ํต์ ์ฌ ์ธํ๋ผ์ ์ฐ๊ด๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ ์๋ฃ๊ฐ ํฌํจ๋์ด ์์๊ณ , ์ด๋ ๋ํ๋ฏผ๊ตญ์ ๊ณต๊ณต ์์คํ ์ ๋ํ ์ฅ๊ธฐ๊ฐ์ ๋ฌด๋จ ์ ๊ทผ ๋ฐ ์๋ฃ ์ด๋ ๊ณต๊ฒฉ์ด ๋ฐ์ํ๋ค๋ ์ถ์ธก์ ๊ฐ๋ฅํ๊ฒ ํ์์ต๋๋ค.
ํด๋น ์ ํฉ์ ์ ๋ถ์ ๋ฐํ์ ๋ฐ๋ผ ์ฌ์ค๋ก ํ์ธ๋์์ต๋๋ค. ๊ตญ๊ฐ์ ๋ณด์์ 2025๋ 10์ 17์ผ ๊ณต๊ฐ ๋ฐํ๋ฅผ ํตํด, ์ธ๋ถ ํด์ปค๊ฐ 6๊ฐ์ ์ธ์ฆ์์ 6๊ฐ์ ๊ตญ๋ด์ธ IP๋ฅผ ์ด์ฉํด ๋ฒ์ ๋ถ ์ ๋ฌด์์คํ ์ธ ์จ๋๋ผ์์คํ ์ ์ ์ํ๋ค๊ณ ๋ฐํ์ต๋๋ค. ๋ํ, ํด์ปค๋ค์ด 2022๋ 9์๋ถํฐ 2025๋ 7์๊น์ง ์ ๋ถ ์๊ฒฉ์ ์์์คํ (G-VPN)์ ํต๊ณผํ์ฌ ์จ๋๋ผ์์คํ ์์ ์๋ฃ๋ฅผ ์ด๋ํ ์ฌ์ค์ ํ์ธํ์๋ค๊ณ ๋ง๋ถ์์ต๋๋ค.
๋ณด๋ค ๊ตฌ์ฒด์ ์ธ ํผํด ๋ฒ์๋ ํ์ ์์ ๋ถ์ ๋ธ๋ฆฌํ๊ณผ ๋ณด๋๋ฅผ ํตํด ์๋ ค์ก์ต๋๋ค. ํ์ ์์ ๋ถ์ ๋ฐ๋ฅด๋ฉด 650๋ช ๋ถ์ ๊ณต๋ฌด์ ์ธ์ฆ์ ํ์ผ ์ ์ถ์ด ํ์ธ๋์๊ณ , ์ด ์ค 12๊ฑด์ GPKI ํค์ ๋น๋ฐ๋ฒํธ๊ฐ ํจ๊ป ํฌํจ๋ ์ฌ๋ก์์ต๋๋ค. ๋ค๋ง, ๋๋ถ๋ถ์ ์ด๋ฏธ ์ ํจ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋ ์ธ์ฆ์์๊ณ , ์ ํจ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋์ง ์์ 3๋ช ์ ์ธ์ฆ์์ ๋ํด์๋ 2025๋ 8์ 13์ผ ํ๊ธฐ ์กฐ์น๊ฐ ์ด๋ฃจ์ด์ก๋ค๊ณ ์ค๋ช ํ์ต๋๋ค.
๊ตญ๊ฐ์ ๋ณด์์ ์ฌ๊ฑด ์ค๋ช ๊ณผ์ ์์ ์๊ฒฉ์ ์ ์ธ์ฆ ์ฒด๊ณ์ ๋ฏธํก, ์จ๋๋ผ์์คํ ์ ์ธ์ฆ ๋ก์ง ๋ ธ์ถ ๊ฐ๋ฅ์ฑ, ์ผ๋ถ ๋ถ์ฒ ์ ์ฉ ์๋ฒ์ ๋ํ ์ ๊ทผํต์ ๋ฏธ๋น ๋ฑ ๊ตฌ์กฐ์ ์ทจ์ฝ์ ์ ์ธ๊ธํ๋ฉฐ ์ฌ๋ฐ ๋ฐฉ์ง์ ํ์์ฑ์ ๊ฐ์กฐํ์์ต๋๋ค. ํนํ G-VPN์ ํตํ ์๊ฒฉ์ ์ ์ดํ ์จ๋๋ผ์์คํ ์ ๊ทผ ๊ณผ์ ์์ ์ถ๊ฐ์ ์ธ ์ธ์ฆยทํ์ ๊ฒ์ฆ์ด ์ถฉ๋ถํ ์ด๋ฃจ์ด์ง์ง ์์๋ค๋ ์ ์, ์ฅ๊ธฐ๊ฐ์ ๊ฑธ์น ์๋ฃ ์ด๋์ด ๊ฐ๋ฅํ๋ ๋ฐฐ๊ฒฝ์ผ๋ก ๋ถ์๋์์ต๋๋ค.
๊ธฐ์ ์ ๊ด์ ์์ ๋ณธ ์ด๋ฒ ์ฌ๊ฑด์ ํต์ฌ ์์๋ ์๋์ ๊ฐ์ด ์ ๋ฆฌํ ์ ์์ต๋๋ค.
๊ณต๋ฌด์ ์ธ์ฆ์(GPKI) ์ ์ถ ๋ฐ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ์ฑ
G-VPN์ ๊ฒฝ์ ํ ์๊ฒฉ์ ์ ํ๊ฒฝ์์์ ์ธ์ฆ ๋จ๊ณ ๋จ์ํ
์จ๋๋ผ์์คํ ์ธ์ฆ ๋ก์ง ๋ฐ ์ ๊ทผ ์ ์ด ๊ตฌ์กฐ์ ๋ ธ์ถ
์ฅ๊ธฐ๊ฐ(์ฝ 3๋ )์ ๊ฑธ์น ๋น์ธ๊ฐ ์๋ฃ ์ด๋ ํ์ง ์คํจ
์ฌ๊ฑด ์ธ์ง ์ดํ ๋์ ๊ณผ์ ์์ ๋น๊ต์ ์ ์ํ ๊ธฐ์ ์ ์กฐ์น๊ฐ ๋ณํ๋์๋ค๋ ์ ์ ๊ธ์ ์ ์ธ ์ธก๋ฉด์ ๋๋ค. ํ์ ์์ ๋ถ๋ 2025๋ 7์ 28์ผ ์จ๋๋ผ์์คํ ๋ก๊ทธ์ธ ์ ๋ณด ์ฌ์ฌ์ฉ ์ฐจ๋จ ์กฐ์น๋ฅผ ์ค์๋ถ์ฒ ๋ฐ ์ง๋ฐฉ์์น๋จ์ฒด์ ์ ์ฉํ์๊ณ , 8์ 4์ผ๋ถํฐ๋ G-VPN ์ ์ ์ GPKI ์ธ์ฆ์ ๋ํด ์ ํ ๊ธฐ๋ฐ 2์ฐจ ์ธ์ฆ(ARS)์ ์๋ฌดํํ์์ต๋๋ค. ๋ํ, ๊ตญ๊ฐ์ ๋ณด์์ ์ ์ฉ๋ IP ์ ๋ณด๋ฅผ ์ ๊ตญ๊ฐยท๊ณต๊ณต๊ธฐ๊ด์ ์ ํํ์ฌ ์ฐจ๋จ ์กฐ์น๋ฅผ ์ ์ฉํ์์ผ๋ฉฐ, ์ผ๋ถ ๋ถ์ฒ์ ์ ์ฉ ์์คํ ๊ณต๊ฒฉ ์ฌ๋ถ๋ ์ถ๊ฐ๋ก ํ์ธํ์ฌ ์กฐ์ฌ ์ค์ด๋ผ๊ณ ๋ฐํ์ต๋๋ค.
ํํธ, ์ด์ ๊ฐ์ ์กฐ์น๊ฐ ์ด๋ฃจ์ด์ง๊ธฐ๊น์ง์ ์๊ฐ์ ๊ฒฝ๊ณผ์ ๋ํด์๋ ๋ค์ํ ๋ชฉ์๋ฆฌ๊ฐ ์กด์ฌํฉ๋๋ค. ๊ตญ๊ฐ์ ๋ณด์์ ๋ณด๊ณ ์ ๊ณต๊ฐ ์ด์ ์ธ 7์์ ๊ด๋ จ ์ ๋ณด๋ฅผ ๋ฐ๊ณ ๋ถ์์ ์งํํ์์ผ๋, ์ฌ๊ฑด์ ๋ํ ๊ณต์ ๋ฐํ๋ Phrack ๋ณด๊ณ ์ ๊ณต๊ฐ ์ดํ ์ฝ ๋ ๋ฌ์ด ์ง๋ ์์ ์ ์ด๋ฃจ์ด์ก์ต๋๋ค. ํด๋น ๋์์ ๊ณต๊ณต ๋ถ๋ฌธ ๋ณด์ ์ฌ๊ณ ๋์ ์ ์ฐจ์ ์ ๋ณด ๊ณต๊ฐ ์์ ์ ๋ํ ๋ ผ์๋ฅผ ๋ณ์์ผ๋ฉฐ, ์ด ๊ณผ์ ์์ ๋ฏผ๊ฐ ๊ธฐ์ ์ ์ ์ฉ๋๋ ์นจํด์ฌ๊ณ 24์๊ฐ ๋ด ๋ณด๊ณ ์์น๊ณผ์ ๋น๊ต๊ฐ ์ธ๊ธ๋๊ธฐ๋ ํ์ต๋๋ค.
์ด๋ฒ ์ฌ๊ฑด์ ๊ณต๋ฌด์ ํ์ ์ ๋ฌด ์ ๋ฐ์ ์ฒ๋ฆฌํ๋ ํต์ฌ ์ ๋ฌด์์คํ ์ผ๋ก ์๋ ค์ง ์จ๋๋ผ์์คํ ์ ๋ํ ์ฅ๊ธฐ๊ฐ(2022๋ 9์~2025๋ 7์)์ ๋ฌด๋จ ์ ๊ทผ ๋ฐ ์๋ฃ ์ด๋์ด ๊ณต์์ ์ผ๋ก ํ์ธ๋ ์ฌ๋ก๋ก, ๊ณต๋ฌด์์ ์ผ์์ ์ธ ํ์ ์ ๋ฌด๋ฅผ ์ฒ๋ฆฌํ๋ ์์คํ ์ด ๊ณต๊ฒฉ ํ๋ฉด์ด ๋ ์ ์์์ ๋ช ํํ ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค. ๋ํ, ์ด๋ฒ ์ฌ๊ฑด์ ์ธ์ฆ์ ๊ธฐ๋ฐ ์ ๊ทผ ๊ตฌ์กฐ์ ์๊ฒฉ๊ทผ๋ฌด ์ธํ๋ผ๊ฐ ์ผ์ํ๋ ํ๊ฒฝ์์ ๋ฐ์ํ ์ ์๋ ์ํ์ ๋ณด์ฌ์ฃผ๋ ์ฌ๋ก๋ก์, ํต์ฌ ์์คํ ์ ๋ํ ์ ๊ทผ ํต์ ์ ์ธ์ฆ ์ค๊ณ๋ฅผ ๋ณด๋ค ๋์ ์์ค์ผ๋ก ๊ด๋ฆฌํด์ผ ํ๋ค๋ ๋ฉ์์ง๋ฅผ ๋จ๊น๋๋ค.
References
2. NPM Supply Chain Attack
Javascript์ Node.js ์ํ๊ณ์ ์ค์ฌ์ธ npm(Node Package Manager) ๋ ์ง์คํธ๋ฆฌ๋ 2025๋ ๊ธฐ์ค ์๋ฐฑ๋ง ๊ฐ์ ํจํค์ง๋ฅผ ๋ณด์ ํ๊ณ ์์ผ๋ฉฐ, ์ฃผ๊ฐ ๋ค์ด๋ก๋ ์๊ฐ ์์ญ์ต ๊ฑด์ ๋ฌํ๋ ์ธ๊ณ ์ต๋์ ์ํํธ์จ์ด ์ ์ฅ์๋ก ์๋ฆฌ ์ก๊ณ ์์ต๋๋ค. ํ์ง๋ง ์ด๋ฌํ ๋ฐฉ๋ํ ์ฐ๊ฒฐ์ฑ์ ์ญ์ค์ ์ผ๋ก ๊ณต๊ฒฉ์์๊ฒ ํฐ ๊ท๋ชจ์ ๊ณต๊ฒฉ ํ๋ฉด์ ์ ๊ณตํ๊ณ ์์ต๋๋ค. 2025๋ 9์์ npm์์ ์ฌ๊ฐ๋ ๋์ ๊ณต๊ธ๋ง ๋ณด์ ์ฌ๊ณ ๋ค์ด ๋ฐ์ํ ์๊ธฐ์ ๋๋ค. ์ด ์๊ธฐ ๋ฐ์ํ ์ผ๋ จ์ ์ฌ๊ฑด๋ค์ ์คํ ์์ค ์ํ๊ณ์ ์๋ฌต์ ์ ๋ขฐ(Implicit Trust) ๋ชจ๋ธ์ ์ทจ์ฝ์ฑ์ ์ฌ์คํ ๋ณด์ฌ์ค๋๋ค.
npm ํจํค์ง ์ฐ์ ์นจํด
2025๋ 9์ 8์ผ, ์ ์ธ๊ณ์ ์ผ๋ก ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ค์ํ npm ํจํค์ง์ ์ ์ฑ ์ฝ๋๊ฐ ์ฃผ์ ๋๋ ์ฌ๊ฑด์ด ๋ฐ์ํ์ต๋๋ค. ํด๋น ์ฌ๊ฑด์ ๊ธฐ์ ์ ์ทจ์ฝ์ ์ด๋ ์ ๊ตํ APT ๊ณต๊ฒฉ์ด ์๋, ํจํค์ง ๋ฉ์ธํ ์ด๋๋ฅผ ๋ ธ๋ฆฐ ํผ์ฑ ๊ณต๊ฒฉ์ ์ํด ๋ฐ์ํ๋ค๋ ํน์ง์ ๊ฐ์ง๋๋ค.
qix๋ผ๋ ID๋ฅผ ์ฌ์ฉํ๋ ๋ฉ์ธํ
์ด๋๋ npm ์ง์ํ(support@npmjs.help)์ ์ฌ์นญํ ์ด๋ฉ์ผ์ ์์ ํ์ต๋๋ค. ํด๋น ์ด๋ฉ์ผ์ ๋ฉ์ธํ
์ด๋์ 2๋จ๊ณ ์ธ์ฆ(2FA) ์๊ฒฉ ์ฆ๋ช
์ ์
๋ฐ์ดํธํด์ผ ํ๋ค๋ ๋ช
๋ชฉ์ผ๋ก ๊ฐ์ง ๋ก๊ทธ์ธ ํ์ด์ง ์ ์์ ์ ๋ํ์ต๋๋ค. ๊ณต๊ฒฉ์๋ ์ด์ ๊ฐ์ ์ ํ์ ์ธ ์ค๊ฐ์ ๊ณต๊ฒฉ(AiTM, Adversary-in-the-Middle) ๊ธฐ๋ฒ์ ํตํด, ์ค์๊ฐ์ผ๋ก ๋ฉ์ธํ
์ด๋๊ฐ ์
๋ ฅํ ID, ๋น๋ฐ๋ฒํธ, OTP(One-Time Password) ์ฝ๋๋ฅผ ๊ฐ๋ก์ฑ์ด ์ค์ npm ์ธ์
์ ํ์ทจํ๋ ๋ฐ ์ฑ๊ณตํ์ต๋๋ค.
๊ณต๊ฒฉ์๋ ํ์ทจํ ์ธ์ ์ ํตํด 18๊ฐ์ ํต์ฌ ํจํค์ง์ ๋ํ ์ฐ๊ธฐ ๊ถํ์ ํ๋ํ์ต๋๋ค. ์ด๋ค์ npm ์ํ๊ณ์ ๊ธฐ์ด์ ์ธ ์ญํ ์ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ์ง์ ์ ์ผ๋ก ์ฌ์ฉ๋ ๋ฟ ์๋๋ผ ์๋ง ๊ฐ์ ๋ค๋ฅธ ํ๋ก์ ํธ์์ ์์กด์ฑ์ผ๋ก ์ฌ์ฉํ๊ณ ์์ด ๋ง๋ํ ์ฐ์์ ํ๊ธ ํจ๊ณผ๋ฅผ ๋ณ์์ต๋๋ค.
ํจํค์ง๋ช | ๋ฒ์ (์ ์ฑ) | ์ฃผ๊ฐ ๋ค์ด๋ก๋ ์ | ์ฃผ์ ๊ธฐ๋ฅ ๋ฐ ์ญํ |
|---|---|---|---|
| 5.6.1 | ์์ต ๊ฑด | ํฐ๋ฏธ๋ ๋ฌธ์์ด ์คํ์ผ๋ง (์ฌ์ค์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ) |
| 4.4.2 | ์์ต ๊ฑด | ๋๋ฒ๊น ์ ํธ๋ฆฌํฐ (๋๋ค์ ํ๋ ์์ํฌ์ ์์กด์ฑ) |
| 6.2.2 | ์์ฒ๋ง ๊ฑด | ANSI ์์ ์ฝ๋ ๊ด๋ฆฌ |
| 7.1.1 | ์์ฒ๋ง ๊ฑด | ANSI ์ด์ค์ผ์ดํ ์ฝ๋ ์ ๊ฑฐ |
| 10.2.1 | ์์ฒ๋ง ๊ฑด | ํฐ๋ฏธ๋ ์์ ์ง์ ๊ฐ์ง |
ํด๋น ํจํค์ง๋ค์ ์ฃผ๊ฐ ๋ค์ด๋ก๋ ์ ํฉ๊ณ๋ ์ฝ 26์ต๊ฑด์ ๋ฌํ์ผ๋ฉฐ, ์ด๋ npm ์ํ๊ณ ์ ์ฒด ํธ๋ํฝ์ ์๋น ๋ถ๋ถ์ ์ฐจ์งํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ณต๊ฒฉ์๋ ์ด์ ๊ฐ์ด ๋๋ฆฌ ์ฌ์ฉ๋๋ ํจํค์ง๋ฅผ ๊ฐ์ผ์ํด์ผ๋ก์จ, ๋ณ๋์ ํดํน ๊ณผ์ ์์ด๋ ์์ฝ๊ฒ ์ ์ธ๊ณ ์๋ฐฑ๋ง ๋์ ๊ฐ๋ฐ์ PC, CI/CD ์๋ฒ, ์ด์ฉ์์ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ ์ ์ฑ ์ฝ๋๋ฅผ ์ฃผ์ ํ ์ ์์์ต๋๋ค.
ํจํค์ง ์ ์ฑ ์ฝ๋ ๋ถ์
์ด๋ฒ ๊ณต๊ฒฉ์ ๊ธฐ์ ์ ํน์ง ์ค ๊ฐ์ฅ ์ฃผ๋ชฉํ ๋ถ๋ถ์ ์ ์ฑ ์ฝ๋์ ๋์ ํ๊ฒฝ๊ณผ ๋ชฉํ์ ๋๋ค. ์๋ฒ ์ธก ์ ธ ๊ถํ์ ํ๋ํ๊ฑฐ๋ ๋์ฌ์จ์ด๋ฅผ ๋ฐฐํฌํ๋ ์ ํต์ ์ธ ๊ณต๊ฒฉ ๋ฐฉ์๊ณผ ๋ฌ๋ฆฌ, ์ด๋ฒ ๊ณต๊ฒฉ์์๋ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ ์คํ๋๋ฉฐ ์ํธํํ ์ง๊ฐ์ ํ์ทจํ๋๋ก ์ค๊ณ๋ Crypto Wallet Drainer ํ์ด๋ก๋๊ฐ ์ฌ์ฉ๋์์ต๋๋ค.
ํด๋น ์ ์ฑ ์ฝ๋๋ ๋๋ ํ๋ Javascript ํํ๋ก ๋ฐฐํฌ๋์์ผ๋ฉฐ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฒ๋ค์ ํฌํจ๋ ์ํ๋ก ์ ๋ฌ๋์ด ์ต์ข ์ด์ฉ์์ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋ ๋ ํ์ฑํ๋๋๋ก ์ค๊ณ๋์์ต๋๋ค.
๋คํธ์ํฌ API ํํน: ๋ธ๋ผ์ฐ์ ์ API ์ค ํ๋์ธ
window.fetch์XMLHttpRequest.prototype.send๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ์ฌ, ๋ฐ์ํ๋ ๋ชจ๋ ๋น๋๊ธฐ ์น ์์ฒญ์ ๊ฐ๋ก์ฑ๊ณ ๊ฐ์ํ ์ ์๋ ๊ถํ์ ํ๋ณดํฉ๋๋ค.ํธ๋์ญ์ ๋ฐ์ดํฐ ์ค์บ: ์ด์ฉ์๊ฐ ์ํธํํ ์ง๊ฐ(์: Metamask, Coinbase Wallet)์ ์ด์ฉํด ํธ๋์ญ์ ์ ์๋ํ ๋, ์ ์ฑ ์ฝ๋๋ ํด๋น ํธ๋์ญ์ ์ ๋ณธ๋ฌธ(Payload)๋ฅผ ๊ฒ์ฌํฉ๋๋ค. ์ด๋, ์ด๋๋ฆฌ์์ด๋ ๋นํธ์ฝ์ธ๊ณผ ๊ฐ์ ์ฃผ์ ๋ธ๋ก์ฒด์ธ์ ์ฃผ์ ํจํด๊ณผ ์ผ์นํ๋ ๋ฌธ์์ด์ ํ์ธํฉ๋๋ค.
์ ๊ทํํ์๊ณผ ํจํด ๋งค์นญ: ๋ค์ํ ์ํธํํ ์ฃผ์ ํ์์ ์ํด ์ ๊ตํ ์ ๊ทํํ์์ ์ฌ์ฉํฉ๋๋ค. ๋ํ, ๋จ์ํ ์ฃผ์ ํ์ ์ธ์๋
rpc,api,wallet๋ฑ์ ํค์๋๊ฐ ํฌํจ๋ ์์ฒญ์ ํ๊ฒํ ํ์ฌ ํ์ง ํ๋ฅ ์ ๋ฎ์ท์ต๋๋ค.
ํด๋น ์ ์ฑ ์ฝ๋๋ ๋งค์ฐ ๊ต๋ชจํ ๋ฐฉ์์ผ๋ก ํธ๋์ญ์ ๋ชฉ์ ์ง ์ฃผ์๋ฅผ ๋ณ์กฐํ์ต๋๋ค. ๋ชฉ์ ์ง ์ฃผ์๋ฅผ ๋จ์ํ ๊ณต๊ฒฉ์์ ์ฃผ์๋ก ์ค์ ํ ๊ฒฝ์ฐ, ์ด์ฉ์๋ ์ก์์ผ๋ก ํด๋น ๋ณํ๋ฅผ ์ธ์งํ ์ ์์ ๊ฒ์ ๋๋ค. ์ด๋ฒ ๊ณต๊ฒฉ์์๋ ์ด๋ฅผ ํํผํ๊ธฐ ์ํด, ์ฌ์ ์ ๋๋์ ๊ณต๊ฒฉ์ ์ง๊ฐ ์ฃผ์๋ฅผ ์์ฑํ๊ณ ํด๋น ์ฃผ์์ ํ(Pool)์์ Levenshtein ๊ฑฐ๋ฆฌ(ํธ์ง ๊ฑฐ๋ฆฌ) ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด ๊ฐ ์ฐจ์ด๊ฐ ์ต์ํ๋๋ ์ฃผ์๋ฅผ ํ์ํ์ต๋๋ค. ์ด๋ฅผ ํตํด ํผํด์์ ๊ธฐ์กด ๋ชฉ์ ์ง ์ฃผ์์ ์๊ฐ์ ์ผ๋ก ๊ฐ์ฅ ์ ์ฌํ ์ฃผ์๋ฅผ ์ค์๊ฐ์ผ๋ก ์ ํํจ์ผ๋ก์จ, ์ด์ฉ์๊ฐ ํธ๋์ญ์ ์น์ธ ์ฐฝ์์ ์ ์ฌํ ๊ณต๊ฒฉ์์ ์ฃผ์๋ฅผ ํ์ธํ๊ณ ์ ์์ ์ธ ๊ฑฐ๋๋ก ์ค์ธํ์ฌ ์๋ช ์ ์งํํ๋๋ก ์ ๋ํ์ต๋๋ค. ์๋ช ์ด ์งํ๋๋ฉด, ์ด์ฉ์์ ์์ฐ์ ๊ณต๊ฒฉ์์ ์ง๊ฐ์ผ๋ก ์ ์ก๋ฉ๋๋ค.
์ถ๊ฐ๋ก, ์
์ฑ ์ฝ๋๋ ์ด์ฉ์๊ฐ ํธ๋์ญ์
์ ์๋ช
ํ๊ธฐ ์ง์ ๋ฐ์ดํฐ ์์ฒด๋ฅผ ๋ณ์กฐํ๋ ๊ธฐ๋ฅ์ ์ํ์ต๋๋ค. ์ด๋๋ฆฌ์์ด๋ ์๋ผ๋์ ๊ฐ์ ๋คํธ์ํฌ ํ๊ฒฝ์์๋ ๋จ์ํ ์ฃผ์ ๋ณ๊ฒฝ ๋์ ์ธ์๋, approve ํจ์ ํธ์ถ ๊ณผ์ ์์ ์น์ธ ๊ถํ์ ์กฐ์ํจ์ผ๋ก์จ ๊ณต๊ฒฉ์๊ฐ ํผํด์ ์ง๊ฐ์ ์๊ธ์ ์ง์์ ์ผ๋ก ์ ๊ทผํ ์ ์๋๋ก ๋ฐฑ๋์ด๋ฅผ ์ค์นํ๋ ํ์๊ฐ ํ์ธ๋์์ต๋๋ค. ์ด๋ ์ผํ์ฑ ์์ฐ ํ์ทจ๋ฅผ ๋์ด, ์ฅ๊ธฐ์ ์ธ ์๊ธ ํ์ทจ๊ฐ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ฅผ ํ์ฑํ๋ค๋ ์ ์์ ์ํ๋๊ฐ ๋์ต๋๋ค.
Shai-Hulud ์๊ณผ ์๋ํ๋ ์ ํ
2025๋
9์ 15์ผ์๋ ๊ฐ๋ฐ์ ํ๊ฒฝ์ ๊ณต๊ฒฉํ๋ Shai-Hulud ์์ด ๋ฑ์ฅํ์ต๋๋ค. ํด๋น ์์ ์์คํ
์๋ํ ๋ฉ์ปค๋์ฆ์ ์ญ์ผ๋ก ์ด์ฉํ์ฌ ์ค์ค๋ก ์ ํ๋๋ ๋ฐฉ๋ฒ์ ์ฑํํ์ฌ, npm ์ํ๊ณ์์ ์๊ฐ ๋ณต์ ์ ์ฑ๊ณตํ ์ต์ด์ ๊ณต๊ธ๋ง ํ ์ ๊ณต๊ฒฉ ์ฌ๋ก๋ก ํ๊ฐ๋ฉ๋๋ค.
Shai-Hulud์ ํต์ฌ ๋ชฉํ๋ ๊ฐ๋ฐ์์ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ CI/CD ํ์ดํ๋ผ์ธ์ ๊ฐ์ผ์ํจ ํ, ํด๋น ๊ฐ๋ฐ์๊ฐ ์ ์ง๋ณด์ํ๋ ๋ค๋ฅธ npm ํจํค์ง๋ก ๊ฐ์ผ์ ํ์ฐํ๋ ๊ฒ์
๋๋ค. ์ด๋ฅผ ํตํด ๊ณต๊ฒฉ์๋ ๊ฐ๋ณ ํจํค์ง๋ฅผ ํ๋์ฉ ์นจํดํ์ง ์๊ณ , ๋จ์ผ ๊ฐ๋ฐ์ ๊ณ์ ์ ๊ธฐ์ ์ผ๋ก ๋๊ท๋ชจ ํ์ฐ์ ์ ๋ํ ์ ์์ต๋๋ค. ์์ ๋์ ๊ณผ์ ์ ์๋์ ๊ฐ์ต๋๋ค.
์ด๊ธฐ ์นจํฌ: ์์ ๊ฐ์ผ๋ ํจํค์ง์
postinstallํน์preinstall์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์คํ๋ฉ๋๋ค. ํด๋น ์คํฌ๋ฆฝํธ๋ ์ฌ์ฉ์๊ฐnpm install๋ช ๋ น์ ์คํํ ๋ ๋ณ๋์ ํ์ธ ์ ์ฐจ ์์ด ์คํ๋ฉ๋๋ค.์๊ฒฉ ์ฆ๋ช ์ค์บ๋: ์คํ๋ ์์ ํ๊ฒฝ ๋ณ์(
env) ๋ฐ ํ ๋๋ ํฐ๋ฆฌ ์ค์ ํ์ผ(์:.npmrc,.aws/credentials,.git-credentials)์ ์ค์บํ์ฌ, ํฌ๋ฆฌ๋ด์ (์:NPM_TOKEN,GITHUB_TOKEN, ํด๋ผ์ฐ๋ ์๋น์ค์ API ํค)์ ์์งํฉ๋๋ค.์๊ฐ ๋ณต์ ๋ฐ ๋ฐฐํฌ: ์ ํจํ
NPM_TOKEN์ ๋ฐ๊ฒฌํ๋ฉด, ์์ ํด๋น ํ ํฐ์ ๊ถํ์ ํ์ธํฉ๋๋ค. ํจํค์ง ๋ฐฐํฌ ๊ถํ์ด ์๋ ๊ฒฝ์ฐ, ํด๋น ์ฌ์ฉ์๊ฐ ๋ฉ์ธํ ์ด๋๋ก ์๋ ๋ค๋ฅธ ํจํค์ง ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ดํ, ํด๋น ํจํค์ง์ ์ ์ฑ ์ฝ๋๋ฅผ ์ฃผ์ ํ๊ณ ๋ฒ์ ์ ์์ ํ์ฌ ๋ ์ง์คํธ๋ฆฌ์ ๋ฐฐํฌํจ์ผ๋ก์จ ๊ฐ์ผ์ ํ์ฐํฉ๋๋ค.
Shai-Hulud๋ ํนํ Github Actions์ ๊ฐ์ CI/CD ํ๊ฒฝ์ ์ฃผ์ ๊ณต๊ฒฉ ๋์์ผ๋ก ์ผ์์ต๋๋ค. CI/CD ํ๊ฒฝ์ ๋ฐฐํฌ ์๋ํ๋ฅผ ์ํด ๋์ ๊ถํ์ APIํค์ ์ํฌ๋ฆฟ์ ํ๊ฒฝ ๋ณ์๋ก ์ค์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์์ ์ด๋ฅผ ํ์ทจํ์ฌ ๊ณต๊ฒฉ์ ์ ์ด ์๋ฒ๋ก ์ ์กํ๊ณ , ๊ฐ์ผ๋ ์ ์ฅ์์ ์
์ฑ ์ํฌํ๋ก์ฐ ํ์ผ(์: .github/workflows/shai-hulud-workflow.yml)์ ์์ฑํ์ฌ ์ง์์ฑ์ ํ๋ณดํ์ต๋๋ค. ์ด๋ก ์ธํด, ๊ฐ๋ฐ์๊ฐ ๋ก์ปฌ์์ ์
์ฑ ํจํค์ง๋ฅผ ์ญ์ ํ๋๋ผ๋, ์๊ฒฉ ์ ์ฅ์์ ์ํฌํ๋ก์ฐ๊ฐ ๋ค์ ์
์ฑ ์ฝ๋๋ฅผ ์คํํ๊ฑฐ๋ ์ํฌ๋ฆฟ์ ์ ์ถํ๋ ๊ตฌ์กฐ๊ฐ ํ์ฑ๋์์ต๋๋ค.
2025๋
11์์ ๋ฐ๊ฒฌ๋ ๋ณ์ข
์ธ Shai-Hulud 2.0์ ๋์ฑ ๊ณต๊ฒฉ์ ์ธ ์ฑํฅ์ ๋ณด์์ต๋๋ค. ํด๋น ์์ C2์๋ฒ์ ํต์ ํ ์ ์๊ฑฐ๋ ํน์ ์กฐ๊ฑด์์ ์คํ์ด ์ฐจ๋จ๋ ๊ฒฝ์ฐ, ๊ฐ์ผ๋ ์์คํ
์ ํ ๋๋ ํฐ๋ฆฌ๋ ์ฃผ์ ํ์ผ ์์คํ
์ ์ญ์ (rm -rf ~/*)ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ด๋ ๋จ์ํ ์ ๋ณด ํ์ทจ๋ฅผ ๋์ด, ๊ฐ๋ฐ์์ ์์
๋ฌผ์ ํ๊ดดํ๊ฑฐ๋ ๋น๋ ์๋ฒ๋ฅผ ๋ง๋น์ํค๋ ๊ฐ์ฉ์ฑ ์นจํด(DoS) ๊ณต๊ฒฉ์ผ๋ก ๋ฐ์ ํ ์ ์์ต๋๋ค. ์ด์ฒ๋ผ Shai-Hulud๋ ๊ณต๊ธ๋ง ๊ณต๊ฒฉ์ด ๋ฐ์ดํฐ ํ์ทจ๋ฅผ ๋์ด ๋์ฌ์จ์ด์ ์ ์ฌํ ํ๊ดด์ ๊ณต๊ฒฉ์ผ๋ก ์งํํ ์ ์์์ ๋ณด์ฌ์ฃผ๋ ์ฌ๋ก์
๋๋ค.
๋ ์ด์ ์คํ ์์ค ์ํ๊ณ์์ ์๋ฌต์ ์ ๋ขฐ(Implicit Trust)๋ฅผ ์ ์งํ๊ธฐ๋ ์ด๋ ต์ต๋๋ค. qix ๊ณ์ ํ์ทจ ์ฌ๊ฑด์ 2FA ์ ๊ฐ์ ๊ธฐ์ ์ ์ธ ๋ณดํธ ์กฐ์น๊ฐ ์ธ๊ฐ์ ์ฌ๋ฆฌ๋ฅผ ํ๊ณ ๋๋ ์ฌํ๊ณตํ์ ๊ณต๊ฒฉ(AiTM) ์์์ ๋ฌด๋ ฅํ๋ ์ ์์์ ๋ณด์ฌ์ฃผ์๊ณ , Shai-Hulud ์์ ๊ฐ๋ฐ ํธ์๋ฅผ ์ํด ๊ตฌ์ถ๋ CI/CD ํ์ดํ๋ผ์ธ์ด ์น๋ช
์ ์ธ ๊ณต๊ฒฉ ๊ฒฝ๋ก๊ฐ ๋ ์ ์์์ ๋๋ฌ๋์ต๋๋ค. ๊ณต๊ฒฉ์๋ ์ด์ ํ๋ฉด์ ์ธ ์๋ฒ์ ๋ฐฉํ๋ฒฝ์ ๋ซ์ผ๋ ค ๋
ธ๋ ฅํ๊ธฐ๋ณด๋ค, ์์ญ์ต ๊ฑด์ ๋ค์ด๋ก๋๊ฐ ์ด๋ฃจ์ด์ง๋ ์ ๋ขฐ๋ ํจํค์ง ๋ค์ ์จ์ด ๊ฐ๋ฐ์์ ๋ก์ปฌ ํ๊ฒฝ, ์ด์ฉ์์ ๋ธ๋ผ์ฐ์ , ๊ธฐ์
์ ๋น๋ ์๋ฒ๋ฅผ ๊ฒจ๋ฅํ๊ณ ์์ต๋๋ค.
npm์ ๊ทธ ์ํฅ๋ ฅ์ ์ฝ๊ฒ ๋์ฒดํ ์ ์๋ ํ๋ ์น ๊ฐ๋ฐ์ ํต์ฌ ์ธํ๋ผ์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ์ฝ๋๊ฐ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์ฝ๋๋ณด๋ค ์ํํ ์ ์๋ค๋ ์ฌ์ค์ ์ธ์ํ์ง ์๋๋ค๋ฉด, ๊ณต๊ธ๋ง ๊ณต๊ฒฉ์ ๋ฐ๋ณต๋ ์๋ฐ์ ์์ต๋๋ค. ํธ๋ฆฌํจ ๋ค์ ์จ๊ฒจ์ง ์ฐ๊ฒฐ์ฑ์ ์ํ์ ๋์์์ด ๊ฒ์ฆํ๋ ์์ธ๋ง์ด ์คํ ์์ค ์ํ๊ณ์์ ๊ณต๊ธ๋ง ๊ณต๊ฒฉ์ ๋์ํ ์ ์๋ ์ค์ง์ ์ธ ๋ฐฉ์ด์ฑ ์ด ๋ ๊ฒ์ ๋๋ค.
References
https://www.paloaltonetworks.com/blog/cloud-security/npm-supply-chain-attack/
https://thehackernews.com/2025/09/20-popular-npm-packages-with-2-billion.html
https://www.paloaltonetworks.com/blog/cloud-security/npm-supply-chain-attack/
https://www.trendmicro.com/en_us/research/25/i/npm-supply-chain-attack.html
https://about.gitlab.com/blog/gitlab-discovers-widespread-npm-supply-chain-attack/
https://access.redhat.com/security/supply-chain-attacks-NPM-packages
3. Personal Credit Data Leakage at Lotte Card
2025๋ 9์ 18์ผ, ๋กฏ๋ฐ์นด๋๋ ํดํน์ ์ํ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ ์ถ ์ฌ๊ณ ๋ฅผ ๊ณต์ ๋ฐํํ๋ฉฐ ๋ค์์ ํดํน ์ด์๋ก ํผ๋์ค๋ฌ์ด ์ฌํ ์ ๋ฐ์ ์ถฉ๊ฒฉ์ ๋ํ์ต๋๋ค. ์ ์ถ๋ ๋ฐ์ดํฐ์๋ ๊ณ ๊ฐ์ ๊ธฐ๋ณธ์ ์ธ ๊ฐ์ธ์ ๋ณด๋ฅผ ํฌํจํ์ฌ ์จ๋ผ์ธ ๊ฒฐ์ ์ ๋ณด, CI(์จ๋ผ์ธ์ ๊ณ ์ ์๋ณ๋ฒํธ), ๋น๋ฐ๋ฒํธ, ์นด๋ ๋ฒํธ, CVC ๋ฑ ์ ์ถ ์ 2์ฐจ ํผํด๋ฅผ ์ผ๊ธฐํ ์ ์๋ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ๋ค๋ ํฌํจ๋์ด ์์์ต๋๋ค.
์ฌ๊ณ ์ ํ์๋ผ์ธ์ ์ดํด๋ณด๋ฉด, ๋กฏ๋ฐ์นด๋๋ 2025๋ 8์ 26์ผ ์ผ๋ถ ์๋ฒ๊ฐ ์ ์ฑ ์ฝ๋์ ๊ฐ์ผ๋ ์ฌ์ค์ ํ์ธํ๊ณ ์์ฒด์ ์ผ๋ก ์ ์ฌ์๋ฒ์ ๋ํ ์ ๋ฐ ์กฐ์ฌ๋ฅผ ์งํํ์์ต๋๋ค. ์กฐ์ฌ ๊ฒฐ๊ณผ, 3๊ฐ์ ์๋ฒ์์ 2์ข ์ ์ ์ฑ ์ฝ๋์ 5์ข ์ ์น์ ธ์ด ๋ฐ๊ฒฌ๋์์ต๋๋ค. ์ดํ 8์ 31์ผ, ์จ๋ผ์ธ ๊ฒฐ์ ์๋ฒ์์ ์ธ๋ถ ๊ณต๊ฒฉ์์ ๋ฐ์ดํฐ ์ ์ถ ์๋๋ฅผ ํ์ธํ์๊ณ , ๋ค์ ๋ ์ธ 9์ 1์ผ์ ์ฝ 1.7GB ๊ท๋ชจ์ ๋ฐ์ดํฐ๊ฐ ์ ์ถ๋์๋ค๋ ๋ด์ฉ์ผ๋ก ๊ธ์ต๋น๊ตญ์ ํดํน ํผํด ์ฌ์ค์ ์ ๊ณ ํ์ต๋๋ค. ๊ธ์ต๋น๊ตญ์ ์ ํํ ํดํน ์์ธ ๋ฐ ํผํด ๊ท๋ชจ๋ฅผ ํ์ธํ๊ธฐ ์ํด ์กฐ์ฌ์ ์ฐฉ์ํ์๊ณ , ์ด ๊ณผ์ ์์ ์ค์ ์ ์ถ๋ ๋ฐ์ดํฐ์ ๊ท๋ชจ๊ฐ ์ฝ 200GB์ ๋ฌํ๊ณ , ๊ณต๊ฒฉ์๊ฐ CVE-2017-10271 ์ทจ์ฝ์ ์ ์ ์ฉํ์ฌ ์๋ฒ์ ์นจํฌํ๋ค๋ ์ฌ์ค์ ํ์ธํ์ต๋๋ค.
CVE-2017-10271
๋กฏ๋ฐ์นด๋ ํดํน ์ฌ๊ณ ์ ์
์ฉ๋ CVE-2017-10271์ Oracle WebLogic Server์์ ์๊ฒฉ์ผ๋ก ์ฝ๋๋ฅผ ์คํํ ์ ์๋ ์ทจ์ฝ์ ์
๋๋ค. ๊ณต๊ฒฉ์๋ ํด๋น ์ทจ์ฝ์ ์ ์
์ฉํ์ฌ ํน์ํ๊ฒ ์กฐ์๋ XML ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๊ฒ์ผ๋ก ๋ณ๋์ ์ธ์ฆ์ด๋ ๊ถํ ์์ด ์๋ฒ๋ฅผ ์์ ํ ์ฅ์
ํ ์ ์์ต๋๋ค.
์ทจ์ฝ์ ์ ๊ทผ๋ณธ ์์ธ์ Java์ XMLDecoder ํด๋์ค์ ์์ต๋๋ค. XMLDecoder๋ ๋จ์ํ XML ๊ตฌ์กฐ๋ฅผ ํ์ฑํ๋ ๊ฒ์ด ์๋๋ผ, XML ์คํฌ๋ฆฝํธ(XML ํ์์ผ๋ก ํํ๋ ๊ฐ์ฒด์ ๋ฉ์๋ ํธ์ถ)๋ฅผ ์ค์ ๋ก ์คํํ๋ ์ธํฐํ๋ฆฌํฐ ์ญํ ์ ์ํํฉ๋๋ค. ๋ฐ๋ผ์ ์ ๋ขฐํ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ํด๋น ํด๋์ค๋ก ํ์ฑํ ๊ฒฝ์ฐ, ์ญ์ง๋ ฌํ ์ทจ์ฝ์ ์ด ๋ฐ์ํ์ฌ ์๊ฒฉ ์ฝ๋ ์คํ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. 10.3.6.0.0, 12.1.3.0.0, 12.2.1.1.0, 12.2.1.2.0 ๋ฒ์ ์ Oracle WebLogic Server๋ ํน์ ์๋ํฌ์ธํธ(์: /wls-wsat/CoordinatorPortType)์์ ์ ๋ฌ๋ฐ์ XML ๋ฐ์ดํฐ๋ฅผ XMLDecoder๋ก ๊ทธ๋๋ก ํ์ฑํ๋๋ก ์ค๊ณ๋์ด ์์ด, ์กฐ์๋ XML ์์ฒญ์ ์ ์กํ์ฌ ์๋ฒ๋ฅผ ์ฅ์
ํ ์ ์๋ ์ทจ์ฝ์ (CVE-2017-10271 )์ด ๋ฐ์ํ์ต๋๋ค.
๋กฏ๋ฐ์นด๋ ํดํน์ ํต์ฌ์ ์ธ ๊ฒฝ๋ก๋ฅผ ์ ๊ณตํ ์ทจ์ฝ์ ์ CVE-2017-10271์ด์ง๋ง, ์ฌ๊ณ ์ ๊ทผ๋ณธ ์์ธ์ ํ๋์ ์ทจ์ฝ์ ์ผ๋ก ํ์ ํ๊ธฐ๋ ์ด๋ ต์ต๋๋ค. ํจ์น ๊ฑฐ๋ฒ๋์ค ๋ฏธํก, ์์ฐ ์๋ณ ๋ถ์กฑ, ์นจ์
ํ์ง ์ฒด๊ณ์ ํ๊ณ ๋ฑ์ด ๋ณตํฉ์ ์ผ๋ก ์์ฉํ์ฌ ํด๋น ์ฌํ๊ฐ ๋ฐ์ํ๋ค๊ณ ๋ณด๋ ๊ฒ์ด ๋ณด๋ค ์ ์ ํฉ๋๋ค. ๋ง์ฝ ์๋ฒ๊ฐ ๋ณด์ ํจ์น๋ฅผ ํ์ฌ CVE-2017-10271์ ์ทจ์ฝํ์ง ์์๋๋ผ๋, ๋ค๋ฅธ ์๋ฒ๋ฅผ ํตํ ์นจํฌ๊ฐ ๊ฐ๋ฅํ๋ค๋ฉด ์ ์ฌํ ๋ฐ์ดํฐ ์ ์ถ ์๋๋ฆฌ์ค๊ฐ ์ฌํ๋ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
์ด๋ฌํ ์ด์ ๋ก, ์ด๋ฒ ์ฌ๋ก๋ ์ทจ์ฝ์ ํจ์น ๊ทธ ์์ฒด๋ณด๋ค ์ด์ ํ์ค์ ๊ธฐ๋ฐํ ๋ณด์ ๊ด๋ฆฌ๊ฐ ์ค์ํ๋ค๋ ๋ฉ์์ง๋ฅผ ์ ๋ฌํฉ๋๋ค. ์ธํฐ๋ท์ ๋ ธ์ถ๋ WAS์์ ํจ์น๊ฐ ๋๋ฝ๋ ์๋ฒ๊ฐ ํ๋๋ผ๋ ๋จ์ ์์ผ๋ฉด, ๊ทธ ์ง์ ์ ์ ์ฒด ์ธ์คํด์ค์ ๊ณต๊ฒฉ ํ๋ฉด์ด์ ๋ฐ์ดํฐ ์ ์ถ์ ์๋ฐ์ ์ด ๋ ์ ์์ต๋๋ค. ์ฒ์ ์นจํฌํ ์๋ฒ๊ฐ ํต์ฌ ์์คํ ์ด ์๋๋๋ผ๋, ๋ด๋ถ ์์คํ ๊ฐ ์ฐ๊ฒฐ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ผ ์นจํฌ ๋ฒ์๋ฅผ ํ์ฅํ ๊ฒฝ์ฐ ๊ณต๊ฒฉ์๋ ๋งค์ฐ ๋์ ํ๋ฅ ๋ก ๋ฏผ๊ฐ ์ ๋ณด๊ฐ ์ ์ฅ๋ ์๋ฒ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ํด๋น ์ฌํ์ ์์ธ์ ์๋์ ๊ฐ์ด ์ ๋ฆฌํ ์ ์์ต๋๋ค.
๋ณด์ ํจ์น ๋๋ฝ
์ธ์คํด์ค์ ์์๋ฐ์ด๋ ํธ๋ํฝ ํต์ ๋ฏธํก
์นจ์ ํ์ง ๋ฐ ์์ฐ ์๋ณ ๋ฏธํก
ํ์ค์ ์ผ๋ก ์์ ์ค์ธ ๋ชจ๋ ์ธ์คํด์ค์ ๋ํ ์๋ฒฝํ ๋ณด์ ํจ์น ์ ์ฉ, ๋ชจ๋ํฐ๋ง, ๋ชฉ์ ์ ๋ง๋ ํธ๋ํฝ ํต์ ๋ฅผ ์ํํ๋ ๊ฒ์ ์ด๋ ต์ต๋๋ค. ํ์ง๋ง ๋ณด์์ ๋จ์ํ ๊ณ ๊ฐ์ ์๋ฃจ์ ์ ๋์ ํ๊ณ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ์์ฑ๋์ง ์์ต๋๋ค. ์น๋ช ์ ์ธ ๋ณด์ ์ฌ๊ณ ๋ ์์ ์ค์๋ ๋ฌด๊ด์ฌ ๋ฑ์ด ๋ชจ์ฌ ์ด๋๋๊ธฐ ๋๋ฌธ์, ์ค์ง์ ์ธ ๋ฐฉ์ด ์ฒด๊ณ๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด์๋ ๊ฐ ๊ธฐ๋ฅ์ ์ด์ ์ ๋ชฉ์ , ํ๊ฒฝ๊ณผ ์ํ์ ์ ํํ ์ดํดํ๊ณ ํ์ํ ์ง์ ์ ์ ์ ํ๊ฒ ๋ฆฌ์์ค๋ฅผ ๋ฐฐ๋ถํด์ผ ํฉ๋๋ค.
References
https://news.tvchosun.com/site/data/html_dir/2025/09/19/2025091990300.html
https://www.industrynews.co.kr/news/articleView.html?idxno=71674
https://blog.78researchlab.com/262db461-3e5b-80ec-be96-fbd1d80578e6
4. RediShell
2025๋
10์ 6์ผ, ์ ์ธ๊ณ ์ธํ๋ผ ํ๊ฒฝ์์ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉ๋๋ Redis(Remote Dictionary Server)์ ์น๋ช
์ ์ธ ๋ณด์ ์ทจ์ฝ์ ์ด Wiz์ ์ํด ๊ณต๊ฐ๋์์ต๋๋ค. RediShell๋ก ๋ช
๋ช
๋ CVE-2025-49844๋ Redis์ ๋ด์ฅ๋ Lua ์คํฌ๋ฆฝํธ ์์ง์์ ๋ฐ์ํ๋ Use-After-Free(UAF) ๊ธฐ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์์ ์ทจ์ฝ์ ์
๋๋ค. ํด๋น ์ทจ์ฝ์ ์ CVSS v3.1 ๊ธฐ์ค 10.0์ (Critical)์ ๊ธฐ๋กํ์์ผ๋ฉฐ, ์
์ฉ ์ ์ธ์ฆ๋ ๊ณต๊ฒฉ์๊ฐ Lua ์๋๋ฐ์ค๋ฅผ ํ์ถํ์ฌ ํธ์คํธ ์์คํ
์์ ์์ ์ฝ๋๋ฅผ ์คํ(RCE)ํ ์ ์๋ ๊ฒ์ผ๋ก ์๋ ค์ก์ต๋๋ค.
CVE-2025-49844๋ Wiz Research ํ์ ์ํด ๋ฐ๊ฒฌ๋์์ผ๋ฉฐ, 2025๋
5์ 16์ผ Pwn2Own ๋ฒ ๋ฅผ๋ฆฐ์์ ๋ณด๊ณ ๋์์ต๋๋ค. ํด๋น ์ทจ์ฝ์ ์ Redis๊ฐ ์ฌ์ฉํ๋ Lua 5.1 ์ธํฐํ๋ฆฌํฐ์ ๊ตฌํ ๊ฒฐํจ์์ ๋น๋กฏ๋ ๊ฒ์ผ๋ก, Lua ์คํฌ๋ฆฝํธ๋ฅผ ํด์ํ๊ณ ์คํํ๋ ๊ณผ์ ์์ ํน์ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ฒด์ ์์ฑ๊ณผ ํด์ ์์ (์๋ช
์ฃผ๊ธฐ)์ด ์๋ชป ๊ด๋ฆฌ๋์ด ๋ฐ์ํฉ๋๋ค.
์ทจ์ฝ์ ์ ํต์ฌ์ UAF์
๋๋ค. UAF๋ ํ๋ก๊ทธ๋จ์ด ์ด๋ฏธ ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ ํ ์ ํจํ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ(Dangling Pointer)๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ทผํ ๋ ๋ฐ์ํ๋ ์ทจ์ฝ์ ์ผ๋ก, ์ผ๋ฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์์ ๋ฐ ์ ์ด ํ๋ฆ ํ์ทจ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. RediShell์ ๊ฒฝ์ฐ, Lua ์คํฌ๋ฆฝํธ ์คํ ์ค ๊ฐ๋น์ง ์ปฌ๋ ํฐ(Garbage Collection, GC)์ ๋์ ์์ ์ ๊ณต๊ฒฉ์๊ฐ ์กฐ์ํ์ฌ ์ฌ์ฉ ์ค์ธ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ๋ก ํด์ ํ๋ฉด ๋ฐ์ํฉ๋๋ค.
๊ณต๊ฒฉ์ ์งํ ๋จ๊ณ๋ ์๋์ ๊ฐ์ต๋๋ค.
์คํฌ๋ฆฝํธ ์ฃผ์ : ์ธ์ฆ๋ ๊ณต๊ฒฉ์๊ฐ
EVAL๋ช ๋ น์ด๋ฅผ ํตํด ์ ์ฑ Lua ์คํฌ๋ฆฝํธ๋ฅผ Redis์ ์ ์กํฉ๋๋ค.ํ ๊ทธ๋ฃจ๋ฐ(Heap Grooming): Lua ์คํฌ๋ฆฝํธ ๋ด์์ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ ์กฐ์ํ๊ธฐ ์ํด ๋ค์์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๊ณ ํด์ ํ๋ ๊ณผ์ ์ ์ํํฉ๋๋ค. ํด๋น ๊ณผ์ ์ UAF ๋ฐ์ ์ ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ณต๊ฒฉ์๊ฐ ์ํ๋ ๋ฐ์ดํฐ๋ก ๋ฎ์ด์ฐ๊ธฐ ์ํ ๋จ๊ณ์ ๋๋ค.
GC ์กฐ์ ๋ฐ UAF ์ ๋ฐ: ๊ณต๊ฒฉ์๋
luaY_parser์ ๋ฒ๊ทธ๋ฅผ ์ด์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ ์ค๋ฅ๋ฅผ ์ ๋ฐํฉ๋๋ค. ์คํฌ๋ฆฝํธ๋ฅผ ํตํด Lua์ ํ์๊ฐ ํน์ ๋ฌธ์์ด์ด๋ ๊ฐ์ฒด(์:TString) ์ฒ๋ฆฌ ์ค, ๊ฐ์ ๋ก GC๊ฐ ๋์(collectgarbage())ํ๋๋ก ํฉ๋๋ค. ์ด๋ Redis์ Lua ๊ตฌํ์ฒด์ ์กด์ฌํ๋ ๊ฒฐํจ์ผ๋ก ์ธํด, ํ์๊ฐ ์ฌ์ ํ ์ฐธ์กฐํ๊ณ ์๋ ๊ฐ์ฒด๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ก ์ค์ธ๋์ด ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋ฉ๋๋ค.๋ฉ๋ชจ๋ฆฌ ์ค์ผ(Memory Corruption): ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ(
TString๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ)์ ๊ณต๊ฒฉ์์ ๋ฐ์ดํฐ๊ฐ ์ฌํ ๋น๋๋ฉด, ํ์๋ ํด์ ๋ ์ด์ ๊ฐ์ฒด์ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ๋ฐ์ดํฐ์ ์ ๊ทผํฉ๋๋ค. ์ด๋ ๊ฒ ๊ณต๊ฒฉ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ์ฌ, ๋ด๋ถ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์์๋๋ ๋ฉ๋ชจ๋ฆฌ ์ค์ผ์ด ๋ฐ์ํฉ๋๋ค.์๋๋ฐ์ค ํ์ถ(Sandbox Escape): ๋ด๋ถ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์์์ ๋ฐํ์ผ๋ก ๊ณต๊ฒฉ์๋ Lua ์๋๋ฐ์ค ์ ์ฝ์ ์ฐํํฉ๋๋ค. ์ฐจ๋จ๋ ํจ์(์:
os.execute,io.popen)์ ์ ๊ทผํ๊ฑฐ๋, ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ง์ ์กฐ์ํ์ฌ ๊ธฐ๊ณ์ด ์ฝ๋๋ฅผ ์คํํ๊ณ ์๋๋ฐ์ค๋ฅผ ํ์ถํ ์ ์์ต๋๋ค.ํธ์คํธ ์ฅ์ : ์๋๋ฐ์ค๋ฅผ ํ์ถํ ๊ณต๊ฒฉ์๋ Redis ํ๋ก์ธ์ค ๊ถํ์ผ๋ก ํธ์คํธ ์ด์์ฒด์ ์์ ๋ช ๋ น์ด๋ฅผ ์คํํ ์ ์์ต๋๋ค.
ํด๋น ์ทจ์ฝ์ ์ d5728cb5795c966c5b5b1e0f0ac576a7e69af539 ์ปค๋ฐ์ ํตํด ์์ ๋์์ต๋๋ค. ํด๋น ํจ์น๋ Lua ํ์(lparser.c) ๋ด luaY_parser ํจ์์์ ๋ฌธ์์ด ๊ฐ์ฒด์ ์๋ช
์ฃผ๊ธฐ๋ฅผ GC๋ฅผ ํตํด ๊ด๋ฆฌํ๋ ๋์ , ๋ช
์์ ์ผ๋ก ๊ด๋ฆฌํ๋๋ก ๋ณ๊ฒฝํฉ๋๋ค.
/* lparser.c ๋ด๋ถ ํจ์น ์ */
luaX_setinput(L, &lexstate, z, luaS_new(L, name));
/* lparser.c ๋ด๋ถ ํจ์น ํ */
TString *tname = luaS_new(L, name);
setsvalue2s(L, L->top, tname);
incr_top(L);
luaX_setinput(L, &lexstate, z, tname);๊ธฐ์กด ์ฝ๋์์๋ luaS_new(L, name) ํธ์ถ๋ก ์์ฑ๋ ๋ฌธ์์ด ๊ฐ์ฒด๊ฐ ์คํ์ ๊ณ ์ (anchor)๋์ง ์์ ์ํ๋ก luaX_setinput ํจ์์ ์ ๋ฌ๋ฉ๋๋ค. ์ด๋ luaX_setinput ๋ด๋ถ ๋๋ ํ์ ํธ์ถ์์ GC๊ฐ ๋์ํ๋ค๋ฉด, luaS_new๋ก ์์ฑ๋ ๋ฌธ์์ด์ ๋๋ฌ ๋ถ๊ฐ๋ฅ(Unreachable)ํ ๊ฐ์ฒด๋ก ๊ฐ์ฃผ๋์ด ํด์ ๋ ์ ์์ต๋๋ค.
์์ ๋ ์ฝ๋์์๋ luaS_new ํจ์๋ก ์์ฑ๋ ๋ฌธ์์ด์ luaX_setinput ํจ์ ํธ์ถ ์ ์ ๋ช
์์ ์ผ๋ก Lua ์คํ(L->top)์ ํธ์(push)ํฉ๋๋ค. ์ด๋ก ์ธํด GC๊ฐ ๋์ํ๋๋ผ๋ ํด๋น ๊ฐ์ฒด๋ ์คํ์ ์ํด ์ฐธ์กฐ๋๊ณ ์๋ ์ํ๋ก ์ ์ง๋์ด ํด์ ๋์ง ์์ต๋๋ค.
RediShell ์ทจ์ฝ์ ์ ํ๊ธ๋ ฅ์ Redis์ ์ฌ์ฉ๋์ ๋น๋กํฉ๋๋ค. ํ์ฌ๋ ์ฝ 60,000์ฌ ๊ฐ์ Redis ์ธ์คํด์ค๊ฐ ๋ณ๋ ์ธ์ฆ ์์ด ์ธํฐ๋ท์ ๋
ธ์ถ๋์ด ์์ผ๋ฉฐ, ๊ณต๊ฒฉ์๋ ์ถ๊ฐ์ ์ธ ์๊ฒฉ ์ฆ๋ช
ํ์ทจ ๊ณผ์ ์์ด ์ธ์คํด์ค์ ์ ์ํ์ฌ EVAL ๋ช
๋ น๋ง์ผ๋ก ์๊ฒฉ ์ฝ๋ ์คํ์ ํ ์ ์์ต๋๋ค. ํด๋น ์ทจ์ฝ์ ์ ๊ทผ๋ณธ ์์ธ์ด ๋๋ ์ฝ๋๋ Redis ์์ค ์ฝ๋ ๋ด์ ์ฝ 13๋
๊ฐ ์กด์ฌํด ์์ผ๋ฉฐ, ์ด๋ ์ง๋ 10๋
๊ฐ ๋ฐฐํฌ๋ ๊ฑฐ์ ๋ชจ๋ Redis ์ธ์คํด์ค๊ฐ ์ ์ฌ์ ์ผ๋ก ๋์ผํ ์ํ์ ๋
ธ์ถ๋์ด ์์์ ์๋ฏธํฉ๋๋ค. ์๋๋ CVE๊ฐ ๋ฐ๊ธ๋ 2025๋
10์ 3์ผ ๊ณต๊ฐ๋ ๋ณด์ ํจ์น์
๋๋ค.
์ ํ๊ตฐ | ์ทจ์ฝํ ๋ฒ์ ๋ฒ์ | ํจ์น๋ ๋ฒ์ (Fixed Version) |
|---|---|---|
Redis OSS / Community | 6.2.20 ๋ฏธ๋ง | 6.2.20 |
| 7.0.0 ~ 7.2.10 | 7.2.11 |
| 7.4.0 ~ 7.4.5 | 7.4.6 |
| 8.0.0 ~ 8.0.3 | 8.0.4 |
| 8.2.0 ~ 8.2.1 | 8.2.2 |
Redis Software (Enterprise) | 6.4.2-131 ๋ฏธ๋ง | 6.4.2-131 |
| 7.2.4-138 ๋ฏธ๋ง | 7.2.4-138 |
| 7.4.6-272 ๋ฏธ๋ง | 7.4.6-272 |
Redis Stack | 7.2.0-v19 ๋ฏธ๋ง | 7.2.0-v19 |
| 7.4.0-v7 ๋ฏธ๋ง | 7.4.0-v7 |
Valkey (Fork Project) | 7.2.11 ๋ฏธ๋ง | 7.2.11 |
| 8.0.0 ~ 8.0.5 | 8.0.6 |
RediShell(CVE-2025-49844)์ ์คํ ์์ค ์ํ๊ณ์ ์ธํ๋ผ ๋ณด์์ ์ค์ํ ์์ฌ์ ์ ๋จ๊ฒผ์ต๋๋ค. ๋จผ์ , Lua ์๋๋ฐ์ค์ ๊ฐ์ ๊ฒฉ๋ฆฌ ๋ฉ์ปค๋์ฆ์ด ์กด์ฌํ๋๋ผ๋, ์ธํฐํ๋ฆฌํฐ ์์ฒด์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ฒฐํจ์ด ์๋ค๋ฉด ์๋๋ฐ์ค๊ฐ ๋ฌด๋ ฅํ๋ ์ ์๋ค๋ ํ๊ณ๋ฅผ ๋ณด์ฌ์ฃผ์์ต๋๋ค. ๋ํ, ํด๋น ์ทจ์ฝ์ ์ฝ๋๊ฐ 13๋
๋์์ด๋ ๋ฐ๊ฒฌ๋์ง ์๊ณ ์กด์ฌํ๋ค๋ ์ ์, ์ค๋๋ ์ฝ๋๊ฐ ์์ ํ ์ฝ๋๋ผ๋ ์ผ๋ฐ์ ์ธ ํต๋
์ ๊นจ๋จ๋ฆฝ๋๋ค. ์ด๋ฒ ์ฌ๋ก๋ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ฑ์ํ ํ๋ก์ ํธ์ผ์ง๋ผ๋, ์ฝ๋ ๊ฒ์(Audit)์ ํผ์ง(Fuzzing) ํ
์คํธ๊ฐ ์ง์์ ์ผ๋ก ์ด๋ฃจ์ด์ง ํ์๊ฐ ์์์ ๋ณด์ฌ์ค๋๋ค.
References
https://www.wiz.io/blog/wiz-research-redis-rce-cve-2025-49844
https://www.offsec.com/blog/recent-vulnerabilities-in-redis-servers-lua-scripting-engine/
5. Internal Data Breach at SK Shieldus
2025๋ 10์ 17์ผ, ํด์ปค ์กฐ์ง Black Shrantac์ด ๋คํฌ์น์ ํตํด ๊ตญ๋ด ๋ํ ํตํฉ ๋ณด์ ๊ธฐ์ ์ธ SK์ด๋์ค์ ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ํ์ทจํ๋ค๊ณ ์ฃผ์ฅํ์ต๋๋ค. Black Shrantac์ ๋คํฌ์น ๊ฒ์๊ธ์ ํตํด ์ฝ 24GB ๊ท๋ชจ์ ๋ด๋ถ ๋ฌธ์์ ๊ธฐ์ ์๋ฃ๋ฅผ ํ๋ณดํ์๋ค๊ณ ๋ฐํ๋ฉฐ, ํ์ทจํ ํ์ผ์ ์ผ๋ถ๋ฅผ ๊ณต๊ฐํ์ฌ ์ถ๊ฐ ๊ณต๊ฐ ๊ฐ๋ฅ์ฑ์ ์ธ๊ธํ์์ต๋๋ค. ์ด๋ ๊ฒ์๊ธ์ ํตํด ์ ๋ณด๋ฅผ ๋จ์ํ ๊ณต๊ฐํ๋ ๊ฒ์ ๊ทธ์น์ง ์๊ณ , ์ ๋ณด ์ ์ถ ์ํ์ ๋ฌด๊ธฐ๋ก ๊ธฐ์ ์ ์๋ฐํ๋ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ํ๋ฐ(extortion) ๋ฐฉ์์ผ๋ก ๋ณผ ์ ์์ต๋๋ค.
๊ณต๊ฐ๋ ์๋ฃ์๋ ๊ณ ๊ฐ์ฌ ๊ด๋ จ ์ ์์, ๋คํธ์ํฌ ๊ตฌ์ฑ ๋ฌธ์, ์์คํ ์ค๊ณ ์๋ฃ, ๋ด๋ถ ํ๋ก์ ํธ ๋ฌธ์ ๋ฑ์ด ํฌํจ๋์ด ์์๊ณ , ์ผ๋ถ ๋ฌธ์์๋ ์ค์ ์์ง์์ ์ด๋ฆ๊ณผ ์์คํ ๊ตฌ์กฐ๊ฐ ํ๋ฌธ์ผ๋ก ๋ ธ์ถ๋์ด ์์์ต๋๋ค.
์ ์ถ ์ฌ๊ฑด ๊ณต๋ก ํ ์ดํ ์ด๊ธฐ ๋์ ๊ณผ์ ์์, SK์ด๋์ค๋ ํด๋น ๋ฐ์ดํฐ๊ฐ ์ค์ ์ด์๋ง์ด ์๋ ํ๋ํ(Honeypot) ํ๊ฒฝ์์ ์ ์ถ๋ ๊ฒ์ด๋ผ๊ณ ๋ฐํ์ต๋๋ค. ํ๋ํ์ ๊ณต๊ฒฉ์์ ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ ๋ถ์ํ๊ธฐ ์ํด ์๋์ ์ผ๋ก ๊ณต๊ฒฉ์๋ฅผ ์ ์ธํ๋ ์์คํ ์ด๋ฏ๋ก, SK์ด๋์ค์ ์ด๊ธฐ ์ฃผ์ฅ์ ๋ฐ๋ฅด๋ฉด ์ ์ถ๋ ์ ๋ณด๋ ํ๋ํ์ ์กด์ฌํ๋ ๋ฏธ๋ผ ์ ๋ณด์ด๋ฏ๋ก ์ค์ ๊ณ ๊ฐ ์์คํ ๋ฐ ํต์ฌ ์ด์๋ง์ ์นจํด๋ ๋ฐ์ํ์ง ์์ ๊ฒ์ ๋๋ค.
ํ์ง๋ง ํ์ธ ๊ฒฐ๊ณผ, ์ ์ถ๋ ๋ฌธ์ ์๋น์๊ฐ ๋จ์ํ ๋๋ฏธ ๋ฐ์ดํฐ๊ฐ ์๋ ์ค์ ํ๋ก์ ํธ ์ํ ๊ณผ์ ์์ ์ฌ์ฉ๋ PoC ์๋ฃ, ๋คํธ์ํฌ ์ค๊ณ๋, ๋ด๋ถ ์ด์ ๋ฌธ์๋ก ๋ฐํ์ก์ต๋๋ค. ๋ํ, ์ค์ ์์ง์์ ๊ฐ์ธ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์๋ค๋ ์ ์์ ์ ์ถ๋ ์๋ฃ๋ฅผ ๋จ์ํ ๋ฏธ๋ผ ์ ๋ณด๋ก ๋ณด๊ธฐ ์ด๋ ต๋ค๋ ์ง์ ์ด ์์์ต๋๋ค.
์ดํ ์ถ๊ฐ ์กฐ์ฌ ๊ฒฐ๊ณผ, ํ๋ํ์ ์ฐ๊ฒฐ๋ ์ง์์ ๊ฐ์ธ ์ด๋ฉ์ผ ๊ณ์ ์ ํตํด ์ผ๋ถ ์ ๋ฌด ์๋ฃ๊ฐ ์ธ๋ถ๋ก ์ ์ถ๋ ์ ํฉ์ด ํ์ธ๋์์ต๋๋ค. SK์ด๋์ค๋ ํด๋น ์ํฉ์ ๋ํด ํ๋ํ ๊ตฌ์ถ์ฉ ๊ฐ์๋จธ์ (VM)์์ ์ฌ์ฉํ๋ ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ์ ์ค์ ๊ณ์ ์ผ๋ก ์๋ ๋ก๊ทธ์ธ์ด ๋์ด ์์ด, ์ด๋ฉ์ผ ๊ณ์ ์ ์ ๋ฌด ๊ด๋ จ ๋ฌธ์๊ฐ ํด์ปค์ ์นจํฌ์ ์ํด ์ ์ถ๋ ๊ฒ์ด๋ผ๋ ์ ์ฅ์ ๋ฐํ์ต๋๋ค. ์ด๋ ํ๋ํ ํ๊ฒฝ์ด ์ค์ ์ด์ ์ ๋ณด์ ์ถฉ๋ถํ ๋ถ๋ฆฌ๋์ง ์์์ ๊ฐ๋ฅ์ฑ์ ์์ฌํฉ๋๋ค. ๋ณด์ ์ฐ๊ตฌ๋ฅผ ๋ชฉ์ ์ผ๋ก ๊ตฌ์ฑ๋ ์์คํ ์ด๋ผ ํ๋๋ผ๋, ๊ทธ ์์ ์ค์ง์ ์ธ ๋ด๋ถ ์ ๋ณด๋ ๊ณ ๊ฐ ๊ด๋ จ ์๋ฃ๊ฐ ํฌํจ๋์ด ์๋ค๋ฉด, ๊ณต๊ฒฉ์ ๊ด์ ์์๋ ๊ทธ ์์ฒด๋ก ๊ฐ์น ์๋ ๊ณต๊ฒฉ ์์ฐ์ด ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๊ณต๊ฒฉ์๋ฅผ ์๋์ ์ผ๋ก ์ ์ธํ๋ ์ทจ์ฝํ ์์คํ ์ ํ๋ํ์ด๋ผ๊ณ ๋ถ๋ฅด์ง๋ง, ํ๋ํ์ ๊ฐ์ฅ ์ค์ํ ์ ์๋ โ์นจํด๊ฐ ๋ฐ์ํ๋๋ผ๋ ์กฐ์ง์ ์ค์ง์ ์ธ ํผํด๊ฐ ๋ฐ์ํ์ง ์๋ ์์คํ โ์ ๋๋ค. ๋ฐ๋ผ์, ์ด๋ฒ ์ฌ๊ฑด๊ณผ ๊ฐ์ด ์ค์ ํผํด๊ฐ ๋ฐ์ํ๋ค๋ฉด ํด๋น ์์คํ ์ ๋ ์ด์ ํ๋ํ์ด๋ผ๊ณ ๋ถ๋ฅผ ์ ์์ต๋๋ค.
๊ณผํ๊ธฐ์ ์ ๋ณดํต์ ๋ถ ์กฐ์ฌ ๊ฒฐ๊ณผ, ์ค์ ๋ก ์ ์ถ๋ ๋ฐ์ดํฐ๋ ํด์ปค๊ฐ ์ฃผ์ฅํ 24GB๋ณด๋ค ์ ์ 15.1GB๋ก ํ์ธ๋์์ต๋๋ค. ์ ์ถ๋ ๋ฐ์ดํฐ์๋ ๋จ์ ๋ก๊ทธ๋ ํ ์คํธ ๊ฒฐ๊ณผ๊ฐ ์๋๋ผ, ๋คํธ์ํฌ ๊ตฌ์กฐ, ๋ฐฉํ๋ฒฝ ์ ์ฑ , ํ๋ก์ ํธ ๋ฌธ์, ๋ด๋ถ API ์ค๋ช ์๋ฃ ๋ฑ์ด ํฌํจ๋์๊ณ , ์ด๋ ๋จ๋ ์ผ๋ก ๊ฐ์น๋ฅผ ์ง๋ ๋ฟ ์๋๋ผ, ํฅํ ์ถ๊ฐ ๊ณต๊ฒฉ์ ์ค๊ณํ๋ ๋ฐ ์ ์ฉํ ๊ธฐ๋ฐ ์๋ฃ๊ฐ ๋ฉ๋๋ค.
ํ์ฌ๊น์ง ๊ณต๊ฐ๋ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ๋ณด๋ฉด, ์ด๋ฒ ์ฌ๊ณ ๋ ํน์ ์ทจ์ฝ์ ํ๋๋ก ์ธํด ๋ฐ์ํ ๋ฌธ์ ๊ฐ ์๋ ํ๊ฒฝ ๋ถ๋ฆฌ ๋ฐ ์ ๋ณด ๊ด๋ฆฌ ๋ฏธํก์ผ๋ก ์ธํด ๋ฐ์ํ ๋ฌธ์ ๋ก ์์ฝํ ์ ์์ต๋๋ค. ํ๋ํยทPoCยทํ ์คํธ ํ๊ฒฝ์ ๋ณธ๋ ์ค์ ์ด์๋ง๊ณผ ๋ ผ๋ฆฌ์ ยท๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฐํ๊ฒ ๋ถ๋ฆฌ๋์ด์ผ ํ์ง๋ง, ์ ์ถ๋ ์๋ฃ์๋ ์ค์ ์ด์ ๊ตฌ์กฐ๋ฅผ ์ถ์ ํ ์ ์๋ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์์ต๋๋ค. ์ด๋ ํ๊ฒฝ ๋ถ๋ฆฌ๊ฐ ๋ฏธํกํ๋ค๋ ๊ทผ๊ฑฐ์ด๋ฉฐ, ๊ณต๊ฒฉ์๊ฐ ๋จ์ํ ๋ฏธ๋ผ ํ๊ฒฝ์ด ์๋ ์๋ฏธ ์๋ ๋ด๋ถ ์์คํ ์ ์ ๊ทผํ์๋ค๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค.
์ ์ถ๋ ์ ๋ณด ์ธ์ ๊ณต๊ฒฉ ๋ฐฉ์์๋ ์ฃผ๋ชฉํ ํ์๊ฐ ์์ต๋๋ค. ๊ธฐ์กด ๋คํฌ์น ๊ธฐ๋ฐ ๊ณต๊ฒฉ์๋ค์ ์๋ฒ๋ฅผ ์ฅ์ ํ ๋ค ๋ฐ์ดํฐ๋ฅผ ์ํธํํด ์๋น์ค ๊ฐ์ฉ์ฑ์ ์ํํ๋ ๋์ฌ์จ์ด ๋ฐฉ์์ ์ฃผ๋ก ์ฌ์ฉํด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฒ ๊ณต๊ฒฉ์ ์๋น์ค ๋ง๋น๊ฐ ์๋ ์ ๋ณด ์ ์ถ ๊ทธ ์์ฒด๋ฅผ ํ์ ์๋จ์ผ๋ก ํ์ฉํ๋ค๋ ์ ์์ ์ฐจ๋ณํ๋ฉ๋๋ค. ์ต๊ทผ ๊ตญ๋ด์์ ๋ค์์ ๋ณด์ ์ฌ๊ณ ๊ฐ ์ฐ์ด์ด ๋ฐ์ํ๋ฉฐ ์ ๋ณด ์ ์ถ์ ํ๊ธ๋ ฅ์ด ๋๋ฆฌ ์ธ์๋ ์ํฉ์์, ์ด๋ฌํ ๊ณต๊ฒฉ ๋ฐฉ์์ ํผํด ๊ท๋ชจ์ ์ํฅ์ด ์ง๊ด์ ์ผ๋ก ์ ๋ฌ๋๋ค๋ ์ ์์ ๋์ฑ ์ํ์ ์ ๋๋ค. ์ด๋ฒ ์ฌ๊ณ ๋ ๊ณต๊ฒฉ์๋ค์ด ๋จ์ํ ์์คํ ์ ์ค๋จ์ํค๋ ๋ฐ ๊ทธ์น์ง ์๊ณ , ๋ฐ์ดํฐ์ ๊ฐ์น๋ฅผ ์ ํํ ์ธ์ํ๊ณ ์ด๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ๊ณ ์์์ ๋ณด์ฌ์ค๋๋ค.
SK์ด๋์ค ํดํน ์ฌ๊ณ ๋ ๋ณด์ ๊ธฐ์ ์ด ์นจํด๋ ๊ฒฝ์ฐ, ๊ทธ ์ํฅ์ด ๋จ์ผ ์กฐ์ง์ ๊ตญํ๋์ง ์๊ณ ๊ด๋ จ๋ ๋ค์์ ๊ธฐ์ ์ผ๋ก ํ์ฐ๋ ์ ์์์ ๋ณด์ฌ์ฃผ์์ต๋๋ค. ๊ท๋ชจ๊ฐ ํฐ ๊ธฐ์ ์ ๋ณด์ ์ฌ๊ณ ๋ ๊ทธ ์์ฒด๋ก ์ํ์ด์ง๋ง, SK์ด๋์ค๋ ๋ณด์ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๊ธฐ์ ์ด๊ธฐ์ ๋ณด์ ์ฌ๊ณ ๋ฐ์ ์ ํ๊ธ๋ ฅ์ด ํฌ๋ค๋ ์ ๋ ์ฃผ๋ชฉํด์ผ ํฉ๋๋ค. ๋ณด์ ๊ธฐ์ ์ ๋ค์ ๊ณ ๊ฐ์ฌ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ค๋ฃจ๊ฒ ๋๊ณ , ๊ธฐ์ ์ ์ ๋ณด๊ฐ ์ ์ถ๋จ์ ๋ฐ๋ผ ๋ด๋ถ ๋ฌธ์, ๋คํธ์ํฌ ๊ตฌ์ฑ๋, ๊ณ ๊ฐ์ฌ ๊ด๋ จ ์๋ฃ๊ฐ ๊ณต๊ฒฉ์์๊ฒ ๋์ด๊ฐ ๊ฒฝ์ฐ ๋ณด์ ๊ธฐ์ ์ธ์๋ ๊ณ ๊ฐ์ฌ์ ์ ๋ขฐ๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ง์ ์กฐ์ง์ด ์์ค ์ฝ๋๋ ๊ฐ์ธ์ ๋ณด์๋ ๋์ ์์ค์ ๋ณด์์ ์ ์ฉํ๋ ๋ฐ๋ฉด, ์ค๊ณ ๋ฌธ์๋ ๋ด๋ถ ๊ธฐ์ ์๋ฃ์ ๋ํด์๋ ์๋์ ์ผ๋ก ๋์จํ ๊ด๋ฆฌ ๋ฐฉ์์ ์ทจํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ณต๊ฒฉ์์ ๊ด์ ์์ ์ด๋ฌํ ๋ฌธ์๋ค์ ์์คํ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ณ ์ฐํ ๊ณต๊ฒฉ์ ์ค๊ณํ๋ ๋ฐ ์์ด ๋งค์ฐ ๊ฐ์น ์๋ ์ ๋ณด ์์ฐ์ ํด๋นํฉ๋๋ค. ๋ด๋ถ ์๋ฃ ์ ์ถ์ ๋จ์ํ ์ ๋ณด ๋ ธ์ถ์ ๋์ด, ์ดํ ๊ณต๊ฒฉ์ ์ ๋ฐ๋๋ฅผ ๋์ด๋ ๊ธฐ๋ฐ์ด ๋ ์ ์์ต๋๋ค.
์ด๋ฒ ์นจํด๊ฐ ํ๋ํ ํ๊ฒฝ์์ ์์๋์๋ค๋ ์ ์, ํ ์คํธ ๋ฐ ์คํ ํ๊ฒฝ ๋ณด์์ ์ค์์ฑ์ ๋ค์ ํ ๋ฒ ๊ฐ์กฐํฉ๋๋ค. ์ค์ ๋ณด์ ์ ๊ฒ ํ์ฅ์์๋ ๋ ๊ฑฐ์ ํ๊ฒฝ์ด๋ ํ ์คํธ ํ๊ฒฝ์์ ๋ฐ๊ฒฌ๋ ๋ฌธ์ ๊ฐ ์ด์ ํ๊ฒฝ์์๋ ๋์ผํ๊ฒ ์ฌํ๋๊ฑฐ๋, ๋ ํฐ ๋ณด์ ์ฌ๊ณ ๋ก ์ด์ด์ง๋ ๊ฒฝ์ฐ๋ฅผ ์์ฃผ ํ์ธํ ์ ์์ต๋๋ค. ์ด๋ ํ ์คํธ ํ๊ฒฝ์ด ์คํ๋ ค ๊ด๋ฆฌ ์ฌ๊ฐ์ง๋์ ๋์ด๋ฉฐ, ์ํ์ฑ์ด ๋์ ๊ณต๊ฒฉ ํ๋ฉด์ผ๋ก ์์ฉํ ์ ์์์ ์์ฌํฉ๋๋ค.
์ด๋ฒ ์ฌ๊ฑด์ ๊ณ๊ธฐ๋ก, ๋ณด์์ ์์ฑํ๋ ๋ฐ ์์ด ๊ธฐ์ ์ ํต์ ๋ฟ ์๋๋ผ ์ด์๊ณผ ์ ์ฑ ์ด ์ค์ํ๋ค๋ ๊ฒ์ ๊ธฐ์ตํ ํ์๊ฐ ์์ต๋๋ค. ํ๋ํ์ ์ด๋ป๊ฒ ์ ์ํ๊ณ , ์ด๋ค ์ ๋ณด๋ฅผ ํฌํจ์ํค๋ฉฐ, ๋๊ตฌ์๊ฒ ์ ๊ทผ์ ํ์ฉํ ๊ฒ์ธ์ง๋ ๋ชจ๋ ์ด์์ ํ๋จ์ ์์ญ์ ์ํฉ๋๋ค. ๊ธฐ์ ์ ์ผ๋ก ์ ๊ตํ ๋ณด์ ์๋ฃจ์ ์ ๊ฐ์ถ๊ณ ์๋๋ผ๋, ์ด์ ๊ธฐ์ค์ด ๋ช ํํ์ง ์๊ฑฐ๋ ์ผ๊ด๋์ง ์๋ค๋ฉด ์ ์ฒด ๋ณด์ ๊ตฌ์กฐ๋ ์ฝ๊ฒ ๋ฌด๋์ง ์ ์์ต๋๋ค.
References
https://www.dailysecu.com/news/articleView.html?idxno=201475
https://www.dailysecu.com/news/articleView.html?idxno=201496
6. Cloudflare Outage
2025๋ 11์๊ณผ 12์, ์ ์ธ๊ณ ์ธํฐ๋ท์ ๊ด๋ฒ์ํ ์ํฅ์ ๋ฏธ์น ๋ ์ฐจ๋ก์ ๋๊ท๋ชจ ์๋น์ค ์ฅ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์ฅ์ ๋ ํ๊ตญ ์๊ฐ์ผ๋ก 11์ 18์ผ 20์ 20๋ถ๋ถํฐ 11์ 19์ผ 02์ 06๋ถ๊น์ง, ๋ ๋ฒ์งธ ์ฅ์ ๋ 12์ 5์ผ 17์ 47๋ถ๋ถํฐ 18์ 12๋ถ๊น์ง ๋ฐ์ํ์ต๋๋ค.
๋ ์ฌ๊ฑด์ ์์ธ์ ๋ชจ๋ ์ ์ธ๊ณ CDN(์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ) ๋ฐ ๋ณด์ ์ธํ๋ผ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ Cloudflare์ ์์คํ ๋ฌธ์ ๋ก ํ์ธ๋์์ต๋๋ค.
Cloudflare์ ์์ฒญ ์ฒ๋ฆฌ ๋ฐฉ์
Cloudflare๋ ์ ์ธ๊ณ ์๋ง์ ์น์ฌ์ดํธ์ ํธ๋ํฝ์ด ํต๊ณผํ๋ ๊ฑฐ๋ํ ๊ด๋ฌธ ์ญํ ์ ํฉ๋๋ค. ์ด์ฉ์๊ฐ ์น์ฌ์ดํธ ์ ์์ ์๋ํ๋ฉด, ํด๋น ์์ฒญ์ ๋จผ์ Cloudflare์ ๋คํธ์ํฌ๋ฅผ ๊ฑฐ์น๊ฒ ๋ฉ๋๋ค. ์ด ๊ณผ์ ์์ Cloudflare๋ HTTP/TLS ๊ณ์ธต์์ ์ฐ๊ฒฐ์ ์์ ํ๊ณ , ํต์ฌ ํ๋ก์ ์์คํ ์ธ 'Frontline(FL)'์ ํตํด ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค.
์ด ํ๋ก์ ์์คํ ๋ด๋ถ์์๋ ์๋์ ๊ฐ์ ๋ค์ํ ๋ณด์ ๊ธฐ๋ฅ์ด ๋ชจ๋ ํํ๋ก ๋์ํฉ๋๋ค.
WAF(์น ๋ฐฉํ๋ฒฝ): ์ ์ฑ ๊ณต๊ฒฉ ์ฐจ๋จ
DDoS ๋ฐฉ์ด ์์คํ : ๋๊ท๋ชจ ํธ๋ํฝ ๊ณต๊ฒฉ ๋ฐฉ์ด
Bot Management: ๋จธ์ ๋ฌ๋ ๊ธฐ๋ฐ ๋ด ํธ๋ํฝ ์๋ณ ๋ฐ ๊ด๋ฆฌ
์ด๋ค ๋ชจ๋์ ๊ฐ ์น์ฌ์ดํธ์ ์ค์ ๋ ๊ท์น์ ๋ฐ๋ผ ํธ๋ํฝ์ ๊ฒ์ฌํ ํ, ์ต์ข ์ ์ผ๋ก ์๋ณธ ์๋ฒ๋ก ์์ฒญ์ ์ ๋ฌํ๊ฑฐ๋ ์บ์๋ ์ฝํ ์ธ ๋ฅผ ์ด์ฉ์์๊ฒ ๋ฐํํฉ๋๋ค.
11์ 18์ผ ์ฒซ ๋ฒ์งธ ์ฅ์
11์ 18์ผ์ ๋ฐ์ํ ์ฒซ ๋ฒ์งธ ์ฅ์ ๋ Bot Management ์์คํ ์ ์ค์ ํ์ผ ๋ฌธ์ ์์ ์์๋์์ต๋๋ค. ๋น์ Cloudflare ์์ง๋์ด๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ๋ณด์ ๊ฐํ๋ฅผ ์ํด ๊ถํ ์ค์ ์ ๋ณ๊ฒฝํ๋ ์์ ์ ์งํํ์๊ณ , ์ด ๊ณผ์ ์์ ์์ํ์ง ๋ชปํ ๋ถ์์ฉ์ด ๋ฐ์ํ์ต๋๋ค.
Bot Management๋ ๋จธ์ ๋ฌ๋์ ๊ธฐ๋ฐ์ผ๋ก ๋ด์ ํ์งํ๋ฉฐ, ์ด๋ฅผ ์ํด 'ํผ์ฒ ํ์ผ(Feature file)'์ด๋ผ๋ ์ค์ ํ์ผ์ ์ฌ์ฉํฉ๋๋ค. ํด๋น ํ์ผ์ 5๋ถ๋ง๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ฅผ ํตํด ์๋์ผ๋ก ์์ฑ๋์ด ์ ์ฒด ๋คํธ์ํฌ์ ๋ฐฐํฌ๋ฉ๋๋ค. ํ์ง๋ง ๊ถํ ๋ณ๊ฒฝ ์์ ์ ์ํฅ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๊ฐ ์ค๋ณต๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๊ฒ ๋์๊ณ , ๊ทธ ๊ฒฐ๊ณผ ๋์ผํ ์ค์ ํญ๋ชฉ์ด ํ์ผ ๋ด์ ์ค๋ณต ์์ฑ๋์ด ํ์ผ ํฌ๊ธฐ๊ฐ 2๋ฐฐ ์ด์ ์ปค์ก์ต๋๋ค.
์ด ๊ฒฐ๊ณผ๋ ์์คํ ์ด ์ฒ๋ฆฌํ ์ ์๋ ํผ์ฒ์ ์ต๋ ๊ฐ์๊ฐ 200๊ฐ๋ก ์ ํ๋์ด ์์ด ๋ฌธ์ ๊ฐ ๋์์ต๋๋ค. ํ์์๋ ์ฝ 60๊ฐ ์์ค์ ํผ์ฒ๋ง ์ฌ์ฉํ๊ณ ์์๊ธฐ์ ์ด๋ ์ฌ์ ์๋ ์์น์์ง๋ง, ์ค๋ณต ๋ฐ์ดํฐ๋ก ์ธํด ํด๋น ์ ํ์ ์ด๊ณผํ์ ํ๋ก์ ์์คํ ์ํํธ์จ์ด๊ฐ ํจ๋(panic) ์ํ์ ๋น ์ง๋ฉฐ ์ค๋จ๋์ด ๋๊ท๋ชจ ์ฅ์ ๋ก ์ด์ด์ก์ต๋๋ค.
Cloudflare ํ์ ๋ฌธ์ ์์ธ์ ํ์ ํ ํ ํ๊ตญ ์๊ฐ ๊ธฐ์ค 11์ 18์ผ 23์ 30๋ถ๊ฒฝ๋ถํฐ ๋ณต๊ตฌ ์์ ์ ์์ํ์ต๋๋ค. ๊ตฌ์ฒด์ ์ธ ์กฐ์น๋ ์๋์ ๊ฐ์ต๋๋ค.
๋ฌธ์ ๊ฐ ๋๋ ํผ์ฒ ํ์ผ์ ์๋ ์์ฑ ๋ฐ ๋ฐฐํฌ ์ค๋จ
์ด์ ์ ์ ์ ๋์ํ๋ ๊ตฌ๋ฒ์ ํ์ผ์ ๋คํธ์ํฌ ์ ์ฒด์ ์๋ ์ฌ๋ฐฐํฌ
์ํฅ์ ๋ฐ์ ํ๋ก์ ์์คํ ์ ์์ฐจ์ ์ผ๋ก ์ฌ์์ํ์ฌ ์ ์ ํ์ผ ๋ก๋
์ ์กฐ์น ๊ฒฐ๊ณผ, ํ๊ตญ ์๊ฐ์ผ๋ก 11์ 19์ผ ์๋ฒฝ 2์ 6๋ถ๊ฒฝ ๋ชจ๋ ์์คํ ์ด ์ ์ํ๋์์ต๋๋ค.
12์ 5์ผ ๋ ๋ฒ์งธ ์ฅ์
12์ 5์ผ์ ๋ฐ์ํ ๋ ๋ฒ์งธ ์ฅ์ ๋ React ํ๋ ์์ํฌ์ ๋ณด์ ์ทจ์ฝ์ (CVE-2025-55182) ๊ธด๊ธ ๋์ ๊ณผ์ ์์ ๋ฐ์ํ์ต๋๋ค. Cloudflare๋ React Server Components์์ ๋ฐ๊ฒฌ๋ ์ทจ์ฝ์ ์ ๋ฐฉ์ดํ๊ธฐ ์ํด, WAF๊ฐ ๊ฒ์ฌํ๋ ์์ฒญ ๋ณธ๋ฌธ(body)์ ์ต๋ ํฌ๊ธฐ ์ ํ์ ๊ธฐ์กด 128KB์์ Next.js์ ๊ธฐ๋ณธ๊ฐ์ธ 1MB๋ก ์ํฅํ๋ ์์
์ ์งํํ์ต๋๋ค.
ํด๋น ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐฐํฌํ๋ ๊ณผ์ ์์, ๋ด๋ถ์์ ์ฌ์ฉํ๋ WAF ํ ์คํธ ๋๊ตฌ๊ฐ ๋์ด๋ ๋ฒํผ ํฌ๊ธฐ๋ฅผ ์ ๋๋ก ์ฒ๋ฆฌํ์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ๋ฐ๊ฒฌ๋์์ต๋๋ค. ํ ์คํธ ๋๊ตฌ๋ ๊ณ ๊ฐ ํธ๋ํฝ์ ์ํฅ์ ์ฃผ์ง ์๋ ๋ด๋ถ ๋๊ตฌ์๊ธฐ์ ์์ง๋์ด๋ค์ ์ฆ์ ํด๋น ๋๊ตฌ๋ฅผ ๋นํ์ฑํํ์์ต๋๋ค. ํ์ง๋ง ์ด '๋นํ์ฑํ' ์กฐ์น๊ฐ ์๋ ๊ฐ ์ฝ๋ ๋ด๋ถ์ ์ ์ฌ๋์ด ์๋ ๋ฒ๊ทธ๋ฅผ ์ด๋ฐํ์์ต๋๋ค. ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ฝ๋๋ ์๋์ ๊ฐ์ต๋๋ค.
if rule_result.action == "execute" then
rule_result.execute.results = ruleset_results[tonumber(rule_result.execute.results_index)]
end์ ์ฝ๋๋ ๊ท์น ์งํฉ(Ruleset)์ ํ๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ก์ง์
๋๋ค. ์ฝ๋๋ ๊ท์น์ ๋์์ด '์คํ(execute)'์ธ ๊ฒฝ์ฐ, ๊ด๋ จ ๊ฒฐ๊ณผ ๊ฐ์ฒด(rule_result.execute)๊ฐ ํญ์ ์กด์ฌํ ๊ฒ์ด๋ผ๋ ๊ฐ์ ํ์ ์์ฑ๋์ด ์์์ต๋๋ค. ํ์ง๋ง WAF ํ
์คํธ ๋๊ตฌ ๊ท์น์ด ๋นํ์ฑํ๋๋ฉฐ ๋ถ๊ธฐ๋ก ์ธํด ํด๋น ๊ท์น์ด ์คํ๋์ง ์์, rule_result.execute ๊ฐ์ฒด๊ฐ ์์ฑ๋์ง ์์์ต๋๋ค. ์ด ์ํ์์ ์ฝ๋๋ ์กด์ฌํ์ง ์๋ ๊ฐ์ฒด(nil) ์ ๊ทผ์ ์๋ํ์๊ณ , ์ด๋ก ์ธํด nil ๊ฐ ์ฐธ์กฐ ์ค๋ฅ(Attempt to index a nil value)๊ฐ ๋ฐ์ํ์ต๋๋ค.
์ด ์ค๋ฅ๋ก ์ธํด ์ํฅ์ ๋ฐ์ ์๋ฒ๋ค์ ์ฆ์ HTTP 500 ์ค๋ฅ๋ฅผ ๋ฐํํ์์ผ๋ฉฐ, ๋คํํ Cloudflare ์ธก์์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ํ๊ฒ ๋กค๋ฐฑ(์์๋ณต๊ตฌ)ํ์ฌ, ์ฅ์ ๋ฐ์ ์ฝ 25๋ถ ๋ง์(ํ๊ตญ ์๊ฐ 18์ 12๋ถ) ์๋น์ค๋ ์ ์ํ๋์์ต๋๋ค.
์ด๋ฒ ๋ ์ฐจ๋ก์ ์ฅ์ ๋ ํ๋ ์น ์ํ๊ณ๊ฐ Cloudflare๋ผ๋ ํ๋์ ํ๋ซํผ์ ์ผ๋ง๋ ๊น์ด ์์กดํ๊ณ ์๋์ง ๋ค์ ํ ๋ฒ ํ์ธ์์ผ ์ฃผ๋ ์ฌ๋ก์ ๋๋ค. ์๋ฌด๋ฆฌ ๊ท๋ชจ๊ฐ ํฌ๊ณ ์์ ์ ์ธ ์๋น์ค๋ผ๋, '๋จ์ผ ์คํจ ์ง์ (SPOF)'์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์๋น์ค์ ์์ ์ฑ์ ์ํด์๋ ๋ง์ฝ์ ์ํฉ์ ๋๋นํ ์ธํ๋ผ ๋ค์คํ ๋ฐ ์์กด์ฑ ๋ถ์ฐ์ด ํ์ํฉ๋๋ค.
References
7. Personal Information Breach at Coupang
2025๋ 11์ 19์ผ, ๊ตญ๋ด ๋ํ ์ด์ปค๋จธ์ค ํ๋ซํผ์ธ ์ฟ ํก์ ๊ฐ์ธ์ ๋ณด ์ ์ถ ์์ฌ ์ ํฉ์ ํ์ธํ๊ณ ์ด๋ฅผ ๊ฒฝ์ฐฐ์ ์ ๊ณ ํ์์ต๋๋ค. ์ฌ๊ฑด ์ด๊ธฐ ์ฟ ํก์ ๋น์ ์์ ์ธ ์ ๊ทผ ์๋๋ฅผ ๊ฐ์งํ๊ณ ์ฆ๊ฐ์ ์ธ ๊ฒฝ๋ก ์ฐจ๋จ ๋ฐ ๋ด๋ถ ๋ณด์ ์ ๊ฒ์ ์ฐฉ์ํ์์ผ๋ฉฐ, ์ ํํ ํผํด ๊ท๋ชจ๋ฅผ ํ์ ํ๊ธฐ ์ํด ์์ฒด ์กฐ์ฌ์ ํจ๊ป ์์ฌ ๊ธฐ๊ด์ ์๋ขฐ๋ฅผ ์งํํ์ต๋๋ค. ์ ๋ฐ ๋ถ์ ํ 11์ 29์ผ, ์ฟ ํก์ ๊ฐ์ธ์ ๋ณด ์ ์ถ์ ํผํด ๋ฒ์๊ฐ ์ฝ 3,370๋ง ๋ช ์ ์ด๋ฅด๋ ๊ฒ์ผ๋ก ํ์ธ๋์๋ค๊ณ ๊ณต์ ๋ฐํํ์ต๋๋ค. ์ด๋ ๊ตญ๋ด ์ต๋ ๊ท๋ชจ์ ๊ฐ์ธ์ ๋ณด ์ ์ถ ์ฌ๊ฑด์ ๋๋ค.
ํ์ฌ๊น์ง ์๋ ค์ง ์ ๋ณด์ ๋ฐ๋ฅด๋ฉด, ์ด๋ฒ ์ฌ๊ณ ๋ ์ธ๋ถ ์นจ์ ๋ณด๋ค๋ ๋ด๋ถ ์์คํ ์ ์ค๊ณ์ ํน์ฑ๊ณผ ๊ถํ ๊ด๋ฆฌ์ ์ด์๊ฐ ๋ณตํฉ์ ์ผ๋ก ์์ฉํ ๊ฒฐ๊ณผ๋ก ์ถ์ ๋ฉ๋๋ค. ๊ณต๊ฒฉ์ 2025๋ 6์ 24์ผ๋ถํฐ 11์ ๋ง๊น์ง ์ฝ 5๊ฐ์๊ฐ ์ง์๋์์ผ๋ฉฐ, ๊ณต๊ฒฉ์๋ ํด์ธ ์๋ฒ๋ฅผ ๊ฒฝ์ ํ์ฌ ์ฅ๊ธฐ๊ฐ์ ๊ฑธ์ณ ์๋ฐํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๊ฒ์ผ๋ก ํ์ ๋ฉ๋๋ค. ์ค๊ตญ ๊ตญ์ ์ผ๋ก ์ถ์ ๋๋ ์ ์ง ์ง์์ด ํด์ฌ ์ดํ์๋ ํ์๋์ง ์์ API ์ ๊ทผ ํค(Access Key)์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ด์ฉํด ์ธ๋ถ์์ ๋ฌด๋จ ์ ์ํ ๊ฒ์ผ๋ก ๋ณด๊ณ ์์ต๋๋ค.
์ด๋ฒ ๊ณต๊ฒฉ์ ์์ธก ๊ฐ๋ฅํ ์๋ณ์ ์ฌ์ฉ๊ณผ ๋ด๋ถ API์ ๋ถ์ ์ ํ ๋ ธ์ถ์ด๋ผ๋ ๋ ๊ฐ์ง์ ์น๋ช ์ ์ธ ๊ฒฐํจ์ ์ ์ฉํ ์ฌ๋ก๋ก ๋ถ์๋ฉ๋๋ค. ์ฒซ์งธ, ์ฟ ํก์ ๋ด๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ด์ฉ์ ์๋ณ๊ฐ(Primary Key)์ ๋์๊ฐ ์๋, 1์ฉ ์ฆ๊ฐํ๋ ์ ์ ํํ๋ก ์ค๊ณ๋์ด ์์๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ํด๋น ๊ตฌ์กฐ์์ ๊ณต๊ฒฉ์๋ ์ซ์๋ฅผ ์์ฐจ์ ์ผ๋ก ๋์ ํ๋ ๊ฒ๋ง์ผ๋ก๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์์งํ ์ ์์ต๋๋ค. ๋์งธ, ๋ด๋ถ์์๋ง ์ฌ์ฉ๋์ด์ผ ํ๋ API๊ฐ ์ธ๋ถ๋ง์ ๋ ธ์ถ๋์ด ์์์ต๋๋ค. ํด๋น API๋ ์์ฐจ์ ์ธ ์ ์๊ฐ์ ๋งค๊ฐ๋ก ์ธ์ฆ ํ ํฐ์ ๋ฐ๊ธํ๋ ๋ก์ง์ ๊ฐ๊ณ ์์์ผ๋ฉฐ, ์ด๋ก ์ธํด ๊ณต๊ฒฉ์๋ ๋ณต์กํ ์ฐํ ๊ธฐ๋ฒ ์์ด๋ ๋จ์ ๋ฐ๋ณต ์์ฒญ๋ง์ผ๋ก ๋ฐฉ๋ํ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์์์ต๋๋ค.
์ด๋ฒ ์ฌ๊ณ ๋ ๋จ์ํ ๊ด๋ฆฌ ๋ถ์ค์ ๋์ด, ์์คํ ์ค๊ณ ๋จ๊ณ์์์ ๋ณด์ ๊ณ ๋ ค(Security by Design) ๋ถ์ฌ๊ฐ ๊ธฐ์ ๊ณผ ์ด์ฉ์ ์ ์ฒด์ ์ด๋ค ์ํฅ์ ๊ฐ์ ธ์ค๋์ง ๋ณด์ฌ์ฃผ๋ ์ฌ๋ก๋ก ํ๊ฐ๋ฉ๋๋ค. ํนํ ์ฟ ํก๊ณผ ๊ฐ์ด ๋ฐฉ๋ํ ๋ฐ์ดํฐ์ ๋ณต์กํ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ฅผ ์ด์ํ๋ ํ๊ฒฝ์์๋, ๊ฐ๋ฐ ํธ์์ฑ์ ์ํด ์ค๊ณ๋ ๋ด๋ถ ๋ก์ง์ด ์๋์น ์๊ฒ ์ธ๋ถ ์ํ์ ๋ ธ์ถ๋ ์ ์์ผ๋ฉฐ, ์ด๋ ๊ณง ์๋น์ค์ ์ ์ฌ์ ์ทจ์ฝ์ ์ผ๋ก ์์ฉํ ์ ์์์ ์์ฌํฉ๋๋ค.
๋ฐ์ดํฐ ์๋ณ์๋ ์์ธก ๋ถ๊ฐ๋ฅํ ๋์(์: UUID)๋ก ์ค๊ณ๋์ด์ผ ํ๋ฉฐ, ๋ด๋ถ API๋ ์ฒ ์ ํ ๋ง ๋ถ๋ฆฌ์ ์ ๊ทผ ์ ์ด๋ฅผ ํตํด ์ธ๋ถ ์ ๊ทผ์ ์์ฒ ์ฐจ๋จํด์ผ ํฉ๋๋ค. ๊ธฐ์ ์ ํธ์๋ฅผ ์ํด ๋จ๊ฒจ๋ ์์ ๊ตฌ๋ฉ์ ๊ฒฐ๊ตญ ๋ณด์์ ๋ฌด๋๋จ๋ฆฌ๋ ๋๊ท๋ชจ ํผํด๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์ด์ ์จ๋ผ์ธ ๊ธฐ๋ฐ ๋น์ฆ๋์ค ํ๊ฒฝ์์๋ ๋ณด์์ ๋จ์ํ IT ์ด์์ ์ผ๋ถ๊ฐ ์๋๋ผ, ๋น์ฆ๋์ค ์ฐ์์ฑ๊ณผ ๋ธ๋๋์ ์์กด์ ์ข์ฐํ๋ ํต์ฌ ๋ฆฌ์คํฌ ์์๋ก ์ธ์ํด์ผ ํฉ๋๋ค. ๋ณด์์ ์์คํ ์ ๋ณดํธํ๋ ๊ธฐ์ ์ธ ๋์์, ๊ณ ๊ฐ๊ณผ์ ์ ๋ขฐ๋ฅผ ์งํค๋ ๋ง์ง๋ง ๋ฐฉ์ด์ ์ด๋ผ๋ ์ ์ ๊ธฐ์ตํด์ผ ํฉ๋๋ค.
References
https://www.pipc.go.kr/np/cop/bbs/selectBoardArticle.do?bbsId=BS074&mCode=C020010000&nttId=11642
https://www.donga.com/news/Economy/article/all/20251202/132880891/2
8. React2Shell
2025๋ 12์ 3์ผ, React2Shell๋ก ์๋ ค์ง CVE-2025-55182 ์ทจ์ฝ์ ์ด ๊ณต๊ฐ๋์์ต๋๋ค. ํด๋น ์ทจ์ฝ์ ์ React Server Components(RSC) Flight Protocol์ ์์ ํ์ง ์์ ์ญ์ง๋ ฌํ๋ก ์ธํด ๋ฐ์ํ๋ฉฐ, ํ๋กํ ํ์ ์ค์ผ(Prototype Pollution) ๊ณต๊ฒฉ์ ์ํด ์๊ฒฉ ์ฝ๋ ์คํ(RCE)๊น์ง ์ด์ด์ง ์ ์์ต๋๋ค. ํนํ, ๊ณต๊ฒฉ์๊ฐ ์กฐ์๋ HTTP ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ๋ง์ผ๋ก ๋ณ๋์ ์ค์ ์์ด ๊ณต๊ฒฉ์ ์ํํ ์ ์์ด ์ํ๋๊ฐ ๋์ต๋๋ค. React์ ์์กดํ๋ ํ๋ ์์ํฌ์ธ Next.js ์ญ์ ๋์ผํ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ณ ์์ด ๊ฐ์ ์ทจ์ฝ์ ์ ์ํฅ์ ๋ฐ์ต๋๋ค.
Theori์์ ๋ง๋ ReactGuard๋ฅผ ํตํด ํ์ฌ ์ด์ ์ค์ธ ์๋ฒ๊ฐ ํด๋น ์ทจ์ฝ์ ์ ์ํฅ์ ๋ฐ๋์ง ํ์ธํ ์ ์์ต๋๋ค.
React Server Components
RSC๊ฐ ๋ฑ์ฅํ๊ธฐ ์ด์ ์ React ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ JavaScript ๋ฒ๋ค ํ์ผ์ ๋ชจ๋ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ ํ, ๋ธ๋ผ์ฐ์ ์์ ์ฝ๋๋ฅผ ๋ก๋ฉํ๊ณ ์คํํ๋ ๊ตฌ์กฐ์์ต๋๋ค. ํด๋น ๋ฐฉ์์ ๋ฒ๋ค ํฌ๊ธฐ์ ๋ฐ๋ผ ์๋นํ ๋น์ฉ์ด ๋ฐ์ํ์๊ณ , ๋ฐฑ์๋์ ํต์ ํ๊ธฐ ์ํ ๋ฏผ๊ฐํ ๋ก์ง์ด ํด๋ผ์ด์ธํธ ๋ฒ๋ค์ ๋ ธ์ถ๋ ์ ์๋ค๋ ๋ฌธ์ ๋ ๋ดํฌํ๊ณ ์์์ต๋๋ค.
์ด๋ฌํ ํ๊ณ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด RSC ๊ฐ๋ ์ด ๋์ ๋์์ต๋๋ค. RSC๋ ์๋ฒ์์๋ง ์คํํ๋ React ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๊ณ , Flight Protocol์ ํตํด ์ฝ๋์ ๋ํ ๋ ธ์ถ ์์ด ์๋ฒ์ ์คํ ๊ฒฐ๊ณผ๋ง์ ํด๋ผ์ด์ธํธ๋ก ์ ๋ฌํฉ๋๋ค. RSC ํ๊ฒฝ์์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ ๋ก์ง์ ํธ์ถํ๋ ์ฃผ์ ์๋จ์ Server Action์ด๋ฉฐ, ํด๋ผ์ด์ธํธ๊ฐ HTTP ์์ฒญ์ ์ ์กํ์ฌ Server Action์ ํธ์ถํ๋ฉด ์๋ฒ๋ ์์ฒญ ๋ณธ๋ฌธ์ Flight Protocol ๊ท์น์ ๋ฐ๋ผ ๋ค์ ํ์ฑํ ํ ์๋ฒ ํจ์๋ฅผ ์คํํฉ๋๋ค.
์๋๋ Server Action์ ์์์ ๋๋ค. ์ด์ฉ์๊ฐ Next.js๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ์ฌ ๋ฒํผ์ ํด๋ฆญํ๋ฉด, ์๋ฒ๋ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ๋ฐํํฉ๋๋ค.
// app/pages.tsx
"use client";
import { pingpong } from "./actions";
export default function Page() {
return (
<form action={pingpong}>
<input type="text" name="ping" placeholder="๋ฉ์์ง๋ฅผ ์
๋ ฅํ์ธ์" />
<button type="submit">์ ์ก</button>
</form>
);
}// app/actions.ts
"use server";
export async function pingpong(formData: FormData) {
console.log("Server received:", formData);
const ping = formData.get("ping");
return {
success: true,
ping,
};
}์ด์ ๋ํ ์์ฒญ ๋ฐ ์๋ต์ ์๋์ ๊ฐ์ต๋๋ค.
[Request]
POST / HTTP/1.1
Host: localhost
Content-Length: 377
next-action: 4067cee7ffcfc30860beeb78f35dd3cec02d4084ac
x-nextjs-request-id: 92c675a9
next-router-state-tree: %5B%22%22%2C%7B%22children%22%3A%5B%22__PAGE__%22%2C%7B%7D%2Cnull%2Cnull%5D%7D%2Cnull%2Cnull%2Ctrue%5D
Accept: text/x-component
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarydKf562tVKmAb3SAf
x-nextjs-html-request-id: Fdgu0NxeBjN_wsjojB9Nk
Accept-Encoding: gzip, deflate, br
------WebKitFormBoundarydKf562tVKmAb3SAf
Content-Disposition: form-data; name="1_$ACTION_ID_4067cee7ffcfc30860beeb78f35dd3cec02d4084ac"
------WebKitFormBoundarydKf562tVKmAb3SAf
Content-Disposition: form-data; name="1_ping"
123
------WebKitFormBoundarydKf562tVKmAb3SAf
Content-Disposition: form-data; name="0"
["$K1"]
------WebKitFormBoundarydKf562tVKmAb3SAf--
[Response]
:N1766324207396.7583
0:{"a":"$@1","f":"","b":"development"}
1:D{"time":0.37404199999946286}
1:{"success":true,"ping":"123"}์๋ฒ๋ ์ด์ฉ์๊ฐ ์ ๋ฌํ ์์ฒญ์ ํ์ฑํ์ฌ Server Action์ ์คํํ๊ณ , ์คํ ๊ฒฐ๊ณผ๋ฅผ Flight Protocol ํ์์ผ๋ก ์ง๋ ฌํํ์ฌ ํด๋ผ์ด์ธํธ์ ์๋ตํฉ๋๋ค. ์๋๋ Flight Protocol ํ์ฑ ๋ก์ง์ ์ํํ๋ parseModelString() ํจ์์
๋๋ค.
// <https://github.com/facebook/react/blob/88ee1f595572b1dcf8f45897cb115b4bbd1aefb8/packages/react-server/src/ReactFlightReplyServer.js#L1311-L1335>
function parseModelString(
response: Response,
obj: Object,
key: string,
value: string,
reference: void | string,
): any {
if (value[0] === '$') {
switch (value[1]) {
case '$': {
// This was an escaped string value.
return value.slice(1);
}
case '@': {
// Promise
const id = parseInt(value.slice(2), 16);
const chunk = getChunk(response, id);
return chunk;
}
case 'h': {
// Server Reference
const ref = value.slice(2);
return getOutlinedModel(response, ref, obj, key, loadServerReference);
}
case 'T': {
...์๋ ์์๋ multipart/form-data ์์ฒญ์ผ๋ก ๋ ๊ฐ์ chunk๋ฅผ ์ ๋ฌํ ๊ฒ์
๋๋ค. ์ฒซ ๋ฒ์งธ chunk์ bar ํ๋๋ $1:bar ํํ์ ์ฐธ์กฐ๋ฅผ ํฌํจํ๊ณ , ์ด๋ Flight Protocol์ ๋ฐ๋ผ ๋ ๋ฒ์งธ chunk์ bar ํ๋๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
------WebKitFormBoundaryv77gZrFCS37c0Dkg
Content-Disposition: form-data; name="0"
{"foo":"1","bar":"$1:bar"}
------WebKitFormBoundaryv77gZrFCS37c0Dkg
Content-Disposition: form-data; name="1"
{"test":1,"bar":"zz"}
------WebKitFormBoundaryv77gZrFCS37c0Dkg--์๋ฒ์์ Flight ์๋ต์ ์ญ์ง๋ ฌํํ๋ ๊ณผ์ ์์ ์ด ์ฐธ์กฐ๋ ์ค์ ๊ฐ์ผ๋ก ํด์๋๊ณ , ์ต์ข ์ ์ผ๋ก ์๋์ ๊ฐ์ ํํ์ ๊ฐ์ฒด๊ฐ ์์ฑ๋ฉ๋๋ค.
{ foo: "1", bar: "zz" }ํ์ง๋ง ์ด ์ฐธ์กฐ ํด์ ๊ณผ์ ์์ ์
๋ ฅ๊ฐ์ ๋ํ ๊ฒ์ฆ์ด ์ถฉ๋ถํ ์ด๋ฃจ์ด์ง์ง ์๊ธฐ ๋๋ฌธ์, ๊ณต๊ฒฉ์๊ฐ Object prototype์ ์ ๊ทผํ์ฌ prototype pollution์ ๋ฐ์์ํฌ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์๋์ ๊ฐ์ด ์์ฒญ์ ์ ๋ฌํ ๊ฒฝ์ฐ, Flight Protocol์ ์ฐธ์กฐ ํด์ ๊ณผ์ ์์ prototype chain์ ๋ฐ๋ผ constructor.constructor์ ์ ๊ทผํ๊ฒ ๋ฉ๋๋ค.
------WebKitFormBoundaryv77gZrFCS37c0Dkg
Content-Disposition: form-data; name="0"
{"foo":"1","bar":"$1:__proto__:constructor:constructor"}
------WebKitFormBoundaryv77gZrFCS37c0Dkg
Content-Disposition: form-data; name="1"
{}
------WebKitFormBoundaryv77gZrFCS37c0Dkg--
{ foo: "1", bar: [Function: Function] }prototype pollution์ผ๋ก ์์ ์ฝ๋๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
chunk ํ์ฑ ๊ฒฐ๊ณผ๋ action-handler.ts ํ์ผ์ decodeReplyFromBusboy() ํจ์์์ ๋ฐํํ๋ ๊ฐ์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค. Content Type์ด Multipart์ผ ๊ฒฝ์ฐ[1], decodeReplyFromBusboy() ํจ์๋ form data๋ฅผ ํ์ฑ[2]ํฉ๋๋ค.
// <https://github.com/vercel/next.js/blob/aab1edcb8d7a57a6f7a1637d0f87be84ea62edc8/packages/next/src/server/app-render/action-handler.ts#L867-L893>
// -- [1]
if (isMultipartAction) {
if (isFetchAction) {
// A fetch action with a multipart body.
const busboy = (
require('next/dist/compiled/busboy') as typeof import('next/dist/compiled/busboy')
)({
defParamCharset: 'utf8',
headers: req.headers,
limits: { fieldSize: bodySizeLimitBytes },
})
// We need to use `pipeline(one, two)` instead of `one.pipe(two)` to propagate size limit errors correctly.
pipeline(
sizeLimitedBody,
busboy,
// Avoid unhandled errors from `pipeline()` by passing an empty completion callback.
// We'll propagate the errors properly when consuming the stream.
() => {}
)
// -- [2]
boundActionArguments = await decodeReplyFromBusboy(
busboy,
serverModuleMap,
{ temporaryReferences }
)
}
...
์ด๋ JavaScript์ await ์ฐ์ฐ์๋ ๋ฐํ๊ฐ์ด Promise๊ฐ ์๋๋๋ผ๋ then property๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ thenable๋ก ์ธ์ํฉ๋๋ค. ์ฆ, await value ๊ตฌ๋ฌธ์์ value.then์ด ํจ์๋ก ์กด์ฌํ ๊ฒฝ์ฐ, JavaScript ๋ฐํ์์ ์ด๋ฅผ Promise์ฒ๋ผ ์ทจ๊ธํ์ฌ then ํจ์๋ฅผ ์๋์ผ๋ก ํธ์ถํฉ๋๋ค.
foo = {}
foo.then = function(resolve, reject) {
resolve(1);
}
await foo
// output
// 1๊ฒฐ๊ณผ์ ์ผ๋ก ๊ณต๊ฒฉ์๋ prototype pollution์ ํตํด then ํจ์๋ฅผ ์ฃผ์
ํจ์ผ๋ก์จ, await ๊ตฌ๋ฌธ์์ ์์ ์ฝ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค. ์ด์ ๋ํ ์ต์ข
payload๋ ๊ณต๊ฐ๋ React2Shell PoC์์ ํ์ธํ ์ ์์ต๋๋ค.
ํด๋น ์ทจ์ฝ์ ์ root cause๋ ์ด์ฉ์์ ์
๋ ฅ ๊ฐ์ ๋ํ ๊ฒ์ฆ ๋ถ์ฌ์
๋๋ค. React๋ 7dc903cd29dac55efb4424853fd0442fef3a8700 ์ปค๋ฐ์ ํตํด ReactFlightReplyServer.jsโ ํ์ผ์ getOutlinedModel() ํจ์์์ ์ฐธ์กฐ ๋์์ด ๊ฐ์ฒด ์์ ์ property ์ธ์ง ํ์ธํ๋๋ก hasOwnProperty() ํจ์ ๊ธฐ๋ฐ ๊ฒ์ฆ์ ์ถ๊ฐํ์์ต๋๋ค. ํจ์น์ ๋ํ ์์ธ ์ค๋ช
์ React ๋ธ๋ก๊ทธ ๋ฐ Next.js ๊ณต์ ๋ณด์ ๊ถ๊ณ ์์ ํ์ธํ ์ ์์ต๋๋ค.
์ด๋ฒ ์ทจ์ฝ์ ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ์คํ ๊ฒฝ๊ณ๊ฐ ํ๋ ค์ง ํ๋ ์น ์ํคํ ์ฒ์์ ์ ๋ ฅ ํด์๊ณผ ์คํ ํ๋ฆ์ ์ฐ๊ฒฐํ๋ ๊ณผ์ ์ ์ค์์ฑ์ ๋ณด์ฌ์ค๋๋ค. ํนํ ์๋ฒ ์ธก์์ ์ด์ฉ์์ ์ ๋ ฅ์ ๊ตฌ์กฐ์ ์ผ๋ก ์ฌ์กฐ๋ฆฝํ๊ณ ์ด๋ฅผ ์คํ ํ๋ฆ์ ๋ฐ์ํ๋ ๊ตฌ์กฐ์์๋, ๊ธฐ๋ณธ์ ์ธ ๊ฒ์ฆ ๋ถ์ฌ๊ฐ ์ง์ ์ ์ธ ์ฝ๋ ์คํ์ผ๋ก ์ด์ด์ง ์ ์๊ธฐ์ ๋์ฑ ์ฃผ์ํ ํ์๊ฐ ์์ต๋๋ค.
References
https://www.wiz.io/blog/critical-vulnerability-in-react-cve-2025-55182
https://github.com/lachlan2k/React2Shell-CVE-2025-55182-original-poc
https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components
๋ง์น๋ฉฐ
2025๋ ํ๋ฐ๊ธฐ์ ๋ณด์ ์ฌ๊ฑด๋ค์ ๋ ์ด์ ๋ณด์์ด ์กฐ์ฉํ ์์คํ ๋ค์์๋ง ์๋ํ๋ ๋ฌธ์ ๊ฐ ์๋๋ผ, ๋๊ตฌ๋ ์ฒด๊ฐํ ์ ์๋ ํ์ค์ ์ธ ์ํ ์์๋ก ๋๋ฌ๋ฌ์์ ๋ณด์ฌ์ฃผ์์ต๋๋ค. ์ด์ ๊น์ง๋ ๋ณด์ ์ฌ๊ณ ๊ฐ ์ผ๋ถ ์์คํ ์ด๋ ํน์ ์กฐ์ง ๋ด๋ถ์ ๋ฌธ์ ๋ก ์ธ์๋์๋ค๋ฉด, ์ด์ ๋ ์๋น์ค ์ฅ์ , ๋ฐ์ดํฐ ์ ์ถ, ์ ๋ขฐ ๋ถ๊ดด์ ๊ฐ์ ์ฆ๊ฐ์ ์ธ ๋ฌธ์ ๋ก ์ด์ด์ ธ ๊ธฐ์ ๊ณผ ์ผ๋ฐ ๋์ค ๋ชจ๋๊ฐ ๊ทธ ์ํฅ์ ์ฒด๊ฐํ๊ฒ ๋์์ต๋๋ค. ๋ณด์์ ๋ ์ด์ โ์ ๋์๊ฐ๊ณ ์์ผ๋ ๊ด์ฐฎ์ ๊ฒโ์ด ์๋๋ผ, ํญ์ ์กฐ์ฌํ์ง ์์ผ๋ฉด ์ธ์ ๋ ๋ฌธ์ ๋ก ๋ํ๋ ์ ์๋ ์์ญ์ด ๋์์ต๋๋ค.
์ฌ๊ฑด๋ค์ ํตํด ์ ์ ์๋ฏ์ด, ๋ณด์์ ๊ฐ๋ณ ๊ธฐ์ ์ ๋ฌธ์ ๊ฐ ์๋๋ผ ์ฐ๊ฒฐ๋ ๊ตฌ์กฐ ์ ์ฒด์ ๋ฌธ์ ์ ๋๋ค. ๋ณด์์ ์ฌ์ฌ๊ณผ ๊ฐ์์, ๊ฐ์ฅ ๊ฐํ ๋ถ๋ถ์ด ์๋๋ผ ๊ฐ์ฅ ์ฝํ ๊ณ ๋ฆฌ๋งํผ ์์ ํฉ๋๋ค. ํ๋ ์์ํฌ, ์คํ ์์ค, ๋ด๋ถ API, ํ ์คํธ ํ๊ฒฝ, ์๋ํ๋ ์ด์ ๊ณผ์ ๊ณผ ๊ฐ์ ๋ค์ํ ์์ญ ์ค ์ด๋ ํ ์ง์ ์ด๋ผ๋ ์ทจ์ฝํ๋ค๋ฉด, ๊ทธ ์ง์ ์ด ๊ณง ์ ์ฒด ์์คํ ์ ์นจํฌ ๊ฒฝ๋ก๊ฐ ๋ฉ๋๋ค. ๊ณต๊ฒฉ์๋ค์ ๊ฐ์ฅ ์ทจ์ฝํ ์ฝํ ๊ณ ๋ฆฌ๋ฅผ ์ง์ํ๊ฒ ์ฐพ์๋ด ํ์ฉํ๊ณ ์์ต๋๋ค.
๋ณด์์ ํน์ ์๋ฃจ์ ์ด๋ ๋ด๋น์์ ์ฑ ์์ผ๋ก ๋ถ๋ฆฌํ ์ ์๋ ๋ฌธ์ ๊ฐ ์๋๋ผ, ์ค๊ณ์ ์ด์ ์ ๋ฐ์์ ์ง์์ ์ผ๋ก ์ ๊ฒํ๊ณ ์กฐ์ฌํด์ผ ํ๋ ๊ธฐ๋ณธ ์ ์ ์ ๋๋ค. โ์ง๊ธ์ ์์คํ ์ ๋ฌด์์ ์ ๋ขฐํ๊ณ ์๋๊ฐโ, โ์ ๋ขฐ๋ ์ด๋ค ์กฐ๊ฑด์์ ๊นจ์ง ์ ์๋๊ฐโ, โ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฌํ ์ํฉ์ ๋๋นํด ์ด๋ค ๊ตฌ์กฐ์ ๊ธฐ์ค์ ์ค๋นํด ๋์๋๊ฐโ๋ผ๋ ์ง๋ฌธ์ ๋ตํ์ง ๋ชปํ๋ค๋ฉด, ๋ณด์ ์ฌ๊ณ ๋ ์ธ์ ๋ ๋ฐ๋ณต๋ ์ ์์ต๋๋ค.
์ด๋ฒ ํ ํด ๋์ Frontier Squad ํ์ ๋ค์ํ ๊ณ ๊ฐ ํ๊ฒฝ์์์ ์์คํ ์ ๊ฒ๊ณผ ์นจํด์ฌ๊ณ ์กฐ์ฌ๋ฅผ ํตํด, ๋น์ฅ์ ์ํ๋ฟ๋ง ์๋๋ผ ์ ์ฌ์ ์ธ ์ํ ์์๊น์ง ๊ณ ๋ คํ๋ฉฐ ๋์ํด ์์ต๋๋ค. 2026๋ ์๋ ์ด๋ฌํ ๊ฒฝํ์ ํ ๋๋ก ํ๋์ ์ง์ํ๋ฉฐ, ์๋ก์ด ๊ธฐ์ ๊ณผ ์ํ ํ๊ฒฝ์ ๋ํ ์ฌ๋ก ์กฐ์ฌ์ ๊ธฐ์ ์ฐ๊ตฌ๋ฅผ ๋ฐํ์ผ๋ก ์ค์ ๊ณต๊ฒฉ ์๋๋ฆฌ์ค์ ์ด์ ํ๊ฒฝ์ ๋ฐ์ํ ๋ถ์์ ์ํํ ์์ ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋ณด๋ค ํ์ค์ ์ด๊ณ ์คํ ๊ฐ๋ฅํ ๋์ ๋ฐฉํฅ์ ์ ์ํจ์ผ๋ก์จ, ๋ณด์์ ์ค์ง์ ์ธ ํฅ์์ ๊ธฐ์ฌํ๊ณ ์ ํฉ๋๋ค.
๐ About Theori Frontier Squad
Theori์ Frontier Squad ํ์ ์ค์ ํด์ปค๋ค์ ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ ๊ธฐ๋ฐ์ผ๋ก ๊ณ ๊ฐ์ ์๋น์ค์ ์ธํ๋ผ๋ฅผ ์ง๋จํ๊ณ , ํ์ค์ ์ธ ๊ณต๊ฒฉ ์๋๋ฆฌ์ค๋ฅผ ๋ฐํ์ผ๋ก ๋ณด์์ ์ฌ๊ฐ์ง๋๋ฅผ ๋ฐ๊ฒฌํ๋ ์คํ์๋ธ ๋ณด์ ์ ๋ฌธ ์กฐ์ง์ ๋๋ค. ์ค๊ณ ๋จ๊ณ ์ํ ๋ชจ๋ธ๋ง๋ถํฐ ์ฝ๋ ์์ค์ ์ทจ์ฝ์ ๋ฆฌ๋ทฐ, ์ค์ ์นจํฌ ํ ์คํธ๊น์ง ๋ค์ํ ๋ฐฉ์์ผ๋ก ๋ณด์ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ํด๊ฒฐํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ณต๊ฒฉ์๋ณด๋ค ํ๋ฐ ์์ ๋์ํ๊ณ , ๋ถ๊ฐ๋ฅํด ๋ณด์ด๋ ๋ฌธ์ ๋ฅผ ๊ธฐ์ ์ ์ผ๋ก ํด๊ฒฐํ๋ ์คํ์๋ธ ์ฌ์ด๋ฒ๋ณด์์ ๋ฆฌ๋๋ก์, ๋ ์์ ํ ๋์งํธ ์ธ๊ณ๋ฅผ ๋ง๋ค๊ณ ์ ํฉ๋๋ค.