Fastjson 1.x RCE, ํจ์น๊ฐ ์๋๋ผ ์ด๊ด์ด ๋ต์ธ ์ด์
์ฌ๋ด ์์ฐ ๋ชฉ๋ก์ ํ๋ค๊ฐ fastjson 1.2.x ๋ฌธ์์ด์ ๋ฐ๊ฒฌํ๋ ์๊ฐ์ด ์๋ค. ๋ช ๋ ์ ์ ๋ง๋ ์ ์ฐ API, ์๋ฌด๋ ์๋์ง ์์์ ์ ๋์๊ฐ๋ ๊ทธ ๋ชจ๋์ด๋ค. ์ด๋ฒ์ ๋ฌธ์ ๊ฐ ๋ Fastjson 1.x ์ญ์ง๋ ฌํ RCE๋ ์ ํํ ๊ทธ๋ฐ ์ฝ๋๋ฅผ ๋ ธ๋ฆฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์ทจ์ฝ์ ์ ์ง์ง ๊ณค๋ํ ์ง์ ์ ์ฌ๊ฐ๋๊ฐ ์๋๋ผ, ์ฌ๋ ค ๋ถ์ผ ํจ์น ๋ฒ์ ์ด ์กด์ฌํ์ง ์๋๋ค๋ ๊ฒ์ด๋ค.
- Fastjson 1.x์ autoType ๊ณ์ด ์ญ์ง๋ ฌํ ๊ฒฐํจ์ด ์ค์ ๊ณต๊ฒฉ์ ์ฐ์ด๊ณ ์์ผ๋, 1.x ๋ผ์ธ์ ์ด๋ฏธ ์๋ช ์ด ๋๋ ๋ณด์ ํจ์น๊ฐ ์ ๊ณต๋์ง ์์
- ๋น์ฅ์ ๋์์ safeMode ๊ฐ์ , JNDI ์๊ฒฉ ์ฝ๋๋ฒ ์ด์ค ์ฐจ๋จ, ์์๋ฐ์ด๋ ์ด๊ทธ๋ ์ค ํต์ ์ธ ๊ฐ์ง๊ฐ ํต์ฌ
- ํ์ง๋ ์์ฒญ ๋ณธ๋ฌธ์ ํ์ ์ง์ ํค์ ์๋ฐ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค·์ธ๋ถ LDAP/RMI ์ฐ๊ฒฐ์ ํจ๊ป ๋ณด๋ ๋ฐฉ์์ด ๊ฐ์ฅ ์ ํํจ
๋ฌด์จ ์ผ์ด ๋ฒ์ด์ง๊ณ ์๋
Fastjson์ ๊ตญ๋ด์ธ ์๋ฐ ํ๋ก์ ํธ์์ ์ค๋ ์ฐ์ธ JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ๋ฐ, ๋ฌธ์ ๋ ํธ์ ๊ธฐ๋ฅ์ผ๋ก ๋ฃ์ด๋ autoType์์ ์์ํจ. JSON ์์ "์ด ๋ฐ์ดํฐ๋ฅผ ์ด๋ค ํด๋์ค๋ก ๋ง๋ค์ด๋ผ"๋ ํ์ ์ ๋ณด๋ฅผ ๋ด์ ์ ์๊ฒ ํ ๊ธฐ๋ฅ์. ์๋ฒ๋ ๊ทธ ์ง์๋๋ก ํด๋์ค๋ฅผ ์ฐพ์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ณ setter๋ฅผ ํธ์ถํจ.
- ๊ณต๊ฒฉ์๋ ๋ฐ์ดํฐ๊ฐ ์๋๋ผ ์ด๋ค ํด๋์ค๋ฅผ ๋ง๋ค์ง๋ฅผ ์กฐ์ข ํจ
- ์ธ์คํด์คํ ๊ณผ์ ์์ ์ธ๋ถ ์์์ ์กฐํํ๋ ํด๋์ค๋ฅผ ๊ณ ๋ฅด๋ฉด, ์ญ์ง๋ ฌํ๊ฐ ๊ณง ์๊ฒฉ ์กฐํ๊ฐ ๋จ
- ๊ทธ ์กฐํ ๊ฒฐ๊ณผ๊ฐ ์ฝ๋๋ก ์คํ๋๋ ์๊ฐ ์ธ์ฆ ์๋ RCE๊ฐ ์ฑ๋ฆฝํจ
๊ณผ๊ฑฐ ์ฌ๋ฌ ์ฐจ๋ก ๋ธ๋๋ฆฌ์คํธ๋ก ๋ง๊ณ , ์ฐํ ํด๋์ค๊ฐ ๋ฐ๊ฒฌ๋๊ณ , ๋ค์ ๋ง๋ ๊ณต๋ฐฉ์ด ๋ฐ๋ณต๋์. ์ด๋ฒ ๊ฑด๋ ๊ทธ ์ฐ์ฅ์ ์์ ๊ธฐ์กด ์ฐจ๋จ ๋ชฉ๋ก์ ๋น๊ปด๊ฐ๋ ๊ฒฝ๋ก๊ฐ ๋ค์ ๋ฐ๊ฒฌ๋ ํํ์. ๊ฐ๋ ์์ค์์๋ง ์ง์๋ฉด "ํ์ ์ ์ง์ ํ ์ ์๋ค"๋ ์ค๊ณ ์์ฒด๊ฐ ๋ฟ๋ฆฌ์ด๊ณ , ๊ฐ๋ณ ํด๋์ค๋ฅผ ์๋ฌด๋ฆฌ ์ง์๋ ๊ทผ๋ณธ์ ๋จ์.
์ ์ด๋ฒ์ ํจ์น๋ฅผ ๊ธฐ๋ค๋ฆด ์ ์๋
Fastjson 1.x๋ ์ด๋ฏธ ์ ์ง๋ณด์ ์ข ๋ฃ ์ ์ธ์ด ๋ ๋ผ์ธ์. ๊ฐ๋ฐ ์ธก์ ์๋ก ์ค๊ณํ 2.x๋ก ์ฎ๊ธฐ๋ผ๋ ์ ์ฅ์ด๊ณ , 1.x์๋ ๋ ์ด์ ๋ณด์ ์์ ์ด ์ฌ๋ผ์ค์ง ์์. ์ฆ ๋ฒ์ ์ฌ๋ฆฌ๊ธฐ๋ก ๋๋๋ ๋ฌธ์ ๊ฐ ์๋. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐ๊พธ๊ฑฐ๋, ๋ฐ๊ฟ ๋๊น์ง ๊ธฐ๋ฅ์ ๊ฐ์ ๋ก ์ ๊ฐ๋๋ ๊ฒ ๋ง๊ณ ์ ํ์ง๊ฐ ์์.
์ด๊ฒ ๋ฐฉ์ด์ ์ ์ฅ์์ ๊ฝค ์ฑ๊ฐ์ ์ด์ ๋, ์ทจ์ฝํ ์ฝ๋๊ฐ ๋๊ฐ ์ค๋๋ ๋ชจ๋์ ๋ฐํ ์์ด์ ๋ด๋น์๊ฐ ํด์ฌํ๊ฑฐ๋ ํ ์คํธ ์ฝ๋๊ฐ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์. "์ ๋์๊ฐ๋๊น ๊ทธ๋ฅ ๋์"๊ฐ ํตํ๋ ์์ญ์ ๊ฐ์๊ธฐ ๋ง๊ฐ ์ํ์ด ์๊ธด ์ .
1๋จ๊ณ: ์ฐ๋ฆฌ ํ๊ฒฝ์ ์๋์ง๋ถํฐ ํ์ ํ๊ธฐ
- ๋น๋ ๋๊ตฌ๋ก ์์กด์ฑ ํธ๋ฆฌ๋ฅผ ์ ๋ถ ๋ฝ์๋ณด๊ธฐ. ์ง์ ์ ์ธํ์ง ์์๋ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋๊ณ ์จ ์ ์ด ์์กด์ฑ์ผ๋ก ๋ค์ด์ ์๋ ๊ฒฝ์ฐ๊ฐ ํํจ
- ์ด์ ์๋ฒ์ ๋ฐฐํฌ ์ฐ์ถ๋ฌผ์์ fastjson ๊ณ์ด JAR ํ์ผ๋ช ์ ์ง์ ๊ฒ์. ๋น๋ ์คํฌ๋ฆฝํธ์ ์ค์ ๋ฐฐํฌ๋ฌผ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ๊ฐ ์๊ฐ๋ณด๋ค ๋ง์
- SBOM์ ๊ด๋ฆฌ ์ค์ด๋ผ๋ฉด ์ปดํฌ๋ํธ ๋ชฉ๋ก์์ ๋ฒ์ ๋๊น์ง ํ์ธํ๊ณ , ์๋ค๋ฉด ์ด๋ฒ ๊ธฐํ์ ํ ๋ฒ ๋ง๋ค์ด๋๊ธธ ๊ฐ์ธ์ ์ผ๋ก๋ ์ถ์ฒํจ
- ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ ์ด์ด ์์ ๋ค์ด๊ฐ ๊ฒ๋ ์ค์บ ๋์์ ํฌํจ. ์ด๋ฏธ์ง ์บ์์ ์๋ JAR์ด ๋จ์ ์๋ ์ฌ๋ก๊ฐ ๋ง์
2๋จ๊ณ: ์ํ — ๋น์ฅ ํ ๊ฒ๊ณผ ๊ฒฐ๊ตญ ํ ๊ฒ
์ง๊ธ ๋ฐ๋ก ์ ์ฉํ ์ ์๋ ๊ฒ๋ค๋ถํฐ ์ ๋ฆฌํจ.
- safeMode ๊ฐ์ : 1.x ํ๊ธฐ ๋ฒ์ ์๋ autoType์ ์ ๋ฉด ์ฐจ๋จํ๋ ์์ ๋ชจ๋๊ฐ ์์. ๋ธ๋๋ฆฌ์คํธ ๋ฐฉ์๊ณผ ๋ฌ๋ฆฌ ํ์ ์ง์ ์์ฒด๋ฅผ ๋ฌด์ํ๋ฏ๋ก ์ฐํ ๊ณต๋ฐฉ์์ ๋ฒ์ด๋จ. ๋ค๋ง @type ํ๊ธฐ์ ์์กดํ๋ ๊ธฐ๋ฅ์ด ์๋ค๋ฉด ๊นจ์ง ์ ์์ผ๋ ์คํ ์ด์ง์์ ํ๊ท ํ ์คํธ ๋จผ์
- JNDI ์๊ฒฉ ์ฝ๋๋ฒ ์ด์ค ์ ๋ขฐ ํด์ : ์๊ฒฉ์์ ๋ฐ์์จ ๊ฐ์ฒด๋ฅผ ์ฝ๋๋ก ์ ๋ขฐํ์ง ์๋๋ก JVM ์ต์ ์ ๋ช ์์ ์ผ๋ก ๋๊ธฐ. ์ต์ JDK๋ ๊ธฐ๋ณธ ์ฐจ๋จ์ด์ง๋ง ์ค๋๋ ๋ฐํ์์ ์ฐ๋ ํ๊ฒฝ์ด๋ผ๋ฉด ๋ฐ๋์ ํ์ธ
- ์์๋ฐ์ด๋ ์ด๊ทธ๋ ์ค ํต์ : ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ ์์์ ์ธ๋ถ ์ฃผ์๋ก LDAP·RMI·HTTP๋ฅผ ๋๊ฐ์ง ๋ชปํ๊ฒ ๋ง๊ธฐ. ์ด ๊ณ์ด ๊ณต๊ฒฉ์ ๋๋ถ๋ถ ์ธ๋ถ ์กฐํ ํ ๋ฒ์ ๋ฐ๋์ ๊ฑฐ์น๋ฏ๋ก, ๋๊ฐ๋ ๊ธธ๋ง ๋์ด๋ ์ฒด์ธ์ด ๋๊น
- ์ ๋ ฅ ๊ฒฝ๊ณ ์ขํ๊ธฐ: ์ธ๋ถ์์ ๋ค์ด์จ JSON์ ๊ทธ๋๋ก ์ญ์ง๋ ฌํํ๋ ์๋ํฌ์ธํธ๊ฐ ์ธ์ฆ ์์ด ์ด๋ ค ์๋์ง ์ ๊ฒ. ํนํ ์นํ ์์ , ์ฝ๋ฐฑ, ๋ฐฐ์น ์ฐ๋ API๊ฐ ์ฌ๊ฐ์ง๋
๊ทธ๋ฆฌ๊ณ ๊ฒฐ๊ตญ ํด์ผ ํ ๊ฒ์ ํ๋์. Fastjson 2๋ก ์ด๊ดํ๊ฑฐ๋ Jackson·Gson ๊ฐ์ ๋์ฒด๋ก ์ฎ๊ธฐ๋ ๊ฒ. ์ ์ํ์ฑ ๋ค์ ์ด๊ด๊น์ง ๋ฒํฐ๋ ์๊ฐ์ ๋ฒ์ด์ฃผ๋ ์ฅ์น์ด์ง ์ข ์ฐฉ์ ์ด ์๋.
3๋จ๊ณ: ํ์ง — ์ด๋๋ฅผ ๋ณด๋ฉด ๊ฑธ๋ฆฌ๋
๋จ์ผ ์งํ๋ง ๋ณด๋ฉด ์คํ์ด ๋ง์์, ์์ฒญ ๊ณ์ธต๊ณผ ํธ์คํธ ๊ณ์ธต์ ๊ฒน์ณ ๋ณด๋ ๊ฒ ์ข์.
- ์์ฒญ ๋ณธ๋ฌธ: JSON ๋ณธ๋ฌธ์ ํด๋์ค ํ์ ์ ์ง์ ํ๋ ํค๊ฐ ๋ฑ์ฅํ๋ ์์ฒญ์ WAF๋ ํ๋ก์ ๋ก๊ทธ์์ ๋ณ๋ ํ๊น . ์ ์ ํธ๋ํฝ์ ์ด๋ฐ ํค๊ฐ ๊ฑฐ์ ์๋ ์๋น์ค๋ผ๋ฉด ๊ทธ ์์ฒด๋ก ๊ฐํ ์ ํธ์
- ํ๋ก์ธ์ค ๊ณ๋ณด: ์๋ฐ ํ๋ก์ธ์ค๊ฐ ์ ธ์ด๋ ๋ช ๋ น ํด์๊ธฐ๋ฅผ ์์์ผ๋ก ์์ฑํ๋ ์ด๋ฒคํธ. ์ญ์ง๋ ฌํ ๊ณต๊ฒฉ์ ์ฌํ ๋จ๊ณ์์ ๊ฐ์ฅ ์ ๋ช ํ๊ฒ ๋จ๋ ํ์ ์ด๋ผ EDR ๋ฃฐ๋ก ์ก๊ธฐ ์ข์
- ๋คํธ์ํฌ: ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์์ ๋๊ฐ๋ LDAP·RMI ๊ณ์ด ์ฐ๊ฒฐ, ๊ทธ๋ฆฌ๊ณ ํ์ ํต์ ์ด๋ ฅ์ด ์๋ ์ธ๋ถ IP๋ก์ ์ ๊ท ์์๋ฐ์ด๋ ์ธ์
- ํ์ผ ์์ฑ: ์์ ๋๋ ํฐ๋ฆฌ๋ ์น ๋ฃจํธ์ ํด๋์ค·JAR ํ์ผ์ด ์๋ก ๋จ์ด์ง๋ ๊ฒฝ์ฐ
- ์๋ต ์ฝ๋ ํจํด: ๊ฐ์ ์๋ํฌ์ธํธ์ ํ์ ์ค๋ฅ ์๋ต์ด ์งง์ ์๊ฐ์ ๋ฐ๋ณต๋๋ค๊ฐ ์ด๋ ์๊ฐ ์ ์ ์๋ต์ผ๋ก ๋ฐ๋๋ ํ๋ฆ. ์ฐํ ํด๋์ค๋ฅผ ๊ฐ์ ๋ผ์ฐ๋ฉฐ ์๋ํ๋ ์ ํฉ์ผ ์ ์์
ํ์ง ๋ฃฐ์ ๋ง๋ค ๋๋ ์ ์ ํธ๋ํฝ ๊ธฐ์ค์ ์ ๋จผ์ ๋ฉฐ์น ์์๋๋ ํธ์ด ๋ซ๋ค๊ณ ๋ด. ๊ธฐ์ค์ ์์ด ๋ฃฐ๋ถํฐ ์ฌ๋ฆฌ๋ฉด ์๋์ ์ง์ณ์ ๊ฒฐ๊ตญ ๊บผ๋ฒ๋ฆฌ๊ฒ ๋๋๋ผ.
์ ๋ฆฌํ๋ฉฐ
์ด๋ฒ ์ฌ์์ด ์ฃผ๋ ๊ตํ์ ์ทจ์ฝ์ ์์ฒด๋ณด๋ค "ํจ์น๊ฐ ๋์ค์ง ์๋ ์ํฉ"์ ๋ํ ๋๋น์ ๊ฐ๊น๋ค๊ณ ์๊ฐํจ. ์ฐ๋ฆฌ๊ฐ ์ฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์ ์ด๋ฏธ ์๋ช ์ด ๋๋ฌ๋๋ฐ ์์ง ์ด์์ ๋จ์ ์๋ ๊ฒ์ด ๋ฌด์์ธ์ง, ๋ชฉ๋ก์ผ๋ก ๋ตํ ์ ์๋ ์กฐ์ง์ ์์ธ๋ก ์ ์. ์ด๋ฒ ์ฃผ๋ง์ ์์กด์ฑ ํธ๋ฆฌ ํ ๋ฒ ๋ฝ์๋ณด๊ณ EOL ํ์๊ฐ ๋ถ์ ๊ฒ๋ค๋ง ๋ฐ๋ก ๋ชจ์๋๋ฉด, ๋ค์์ ๋น์ทํ ์์์ด ์์ ๋ ๋์ ์๊ฐ์ด ํ์ฐํ ์ค์ด๋ค ๊ฑฐ์์.
ํน์ safeMode๋ฅผ ์ผฐ๋ค๊ฐ ๊นจ์ง ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ์ฐํํ๋์ง, ์ด๊ด ๊ณผ์ ์์ ๊ฑธ๋ฆฐ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋๊ธ๋ก ๊ณต์ ํด ์ฃผ์ธ์. ์ ๋ ์ ๋ฆฌํด์ ๋ค์ ๊ธ์ ๋ฐ์ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ฐ์ด ์์ ํ๊ฒ ๋ฒํ จ๋ด์.
# ๋๊ธ