๐ Introduction
SSJI(Server Side Javascript Injection)๋ ์๋ฒ๊ฐ ์์ฒด์ ์ผ๋ก Javascript๋ฅผ ์ฒ๋ฆฌํ๋ ์์ง์ ๊ฐ์ง๊ฑฐ๋, ๋ฐฑ์๋์์ Headless browser ๋ฑ์ ํตํด ์ฒ๋ฆฌํ๋ ๋ก์ง์ด ์๋ ๊ฒฝ์ฐ ๊ณต๊ฒฉ์๊ฐ ์ด๋ฅผ ์ ์ดํ์ฌ ์๋ฒ์ฌ์ด๋์์ ์ํ๋ Javascirpt๋ฅผ ์คํํ๋๋ก ํ๋ ๊ณต๊ฒฉ์ ๋๋ค.
๐ก Offensive techniques
Detect
eval()
, setTimeout()
, setInterval()
๋ฑ์ JS ํจ์๋ฅผ ํฌํจํ ์์ฒญ์ ์ ๋ฌํ์ฌ ์๋ฒ ์ฌ์ด๋์์ ์ด๋ฅผ ์ฒ๋ฆฌํ๋์ง ์๋ณํ๋ฉด ๋ฉ๋๋ค. ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ผ๋ก setTimeout๊ณผ setInterval์ ์ด์ฉํ ๋๋ ์ด ์ฒดํฌ์
๋๋ค.
Request
|
|
Response
|
|
๋ํ์ ์ผ๋ก ๋ง์ด ์ฌ์ฉ๋๋ Payloads๋ ์๋์ ๊ฐ์ต๋๋ค.
|
|
Exploitation
RCE (Remote Code Execution)
๋๋๋ก Javascript๋ NodeJS, JVM(Java Virtual Machine) ์์์ ๋์ํ๋ Javascript ์์ง์ธ Nashorn์ด๋ Graal ๋ฑ ์๋ฒ ์ฌ์ด๋ ๋ง์ ๊ถํ์ ๊ฐ์ง๊ณ ๋์ํ๊ธฐ๋ ํฉ๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ SSJI๊ฐ ๊ฐ๋ฅํ ๋ RCE ๋ฑ ํฐ ๋ฆฌ์คํฌ์ ์ด์๋ก ์ฐ๊ฒฐ๋ ์ ์์ต๋๋ค.
NodeJS
|
|
Nashron
|
|
Inforamtion Leakage
๋ฐฑ์๋ Javascript ๊ฐ ์ฌ์ฉํ๋ DOM์ด๋ Memory์ ์๋ ๋ฐ์ดํฐ๋ค์ ์๋ฒ์ ๋ฆฌ์์ค์ ๋๋ค. ์ด๋ฅผ ํตํด์ DOM ๊ตฌ์กฐ์ ์์ค์ฝ๋๋ฅผ ํ์ํ๊ณ ์ค์ํ ์ ๋ณด๋ฅผ ํ์ทจํ ์ ์์ต๋๋ค.
|
|
SSRF
Javascript๊ฐ Server-side์์ ๋์ํ๊ธฐ ๋๋ฌธ์ ACL์ ๋์ด ๋ด๋ถ๋ง์์์ ์น ์์ฒญ์ด ๊ฐ๋ฅํด์ง๋๋ค.
|
|
์ดํ ์ฃผ์ ํ์ด์ง ์ ๊ทผ์ด๋ ์ฐํ ํจํด์ SSRF์ ๋์ผํ๋ ์ฐธ๊ณ ํด์ฃผ์ธ์.
Other
์ด์ธ DOM Clobbering์ด๋ Prototype Pollution ๋ฑ JS ๊ธฐ๋ฐ์ ํ ํฌ๋์ ๋ชจ๋ ๋์ผํ๊ฒ ์ฌ์ฉํ ์ ์์ด ์ํฅ๋ ฅ์ ๋์ผ ์ ์์ต๋๋ค.
๐ก Defensive techniques
์๋ฒ๋จ์์ ๋์ํ๋ Javascript๋ Ruby, Python ๋ฑ ์คํฌ๋ฆฝํธ์ ๋์ผํ ๊ถํ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ข์ต๋๋ค. ๊ฐ๊ธ์ ์ฌ์ฉ์์๊ฒ์ ๋ถํฐ ์ ๋ ฅ ๊ฐ์ ๋ฐ์ง ์๋๋ก ํ๊ณ ํน์ฌ๋ ๋ฐ์์ผ ํ๋ค๋ฉด ์๋๋ ์ก์ ์ด์ธ์๋ ์ํํ ์ ์๋๋ก ์ ํํ๊ฒ ๊ฒ์ฆ์ด ํ์ํฉ๋๋ค.