๐ Introduction
CSTI(Client-Side Template Injection)์ ๊ณต๊ฒฉ์๊ฐ Template ์ฝ๋๋ฅผ ๊ธฐ์กด template์ include ์์ผ์ ์ํ๋ ์ก์ ์ ์ํํ๋๋ก ํ๋ ๊ณต๊ฒฉ์ ๋๋ค. ์ด ๋ template injection์ด ๋ฐ์ํ๋ ์์น๊ฐ client-side์ธ ๊ฒฝ์ฐ CSTI๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
CSTI๋ Client-Side์์ Javascript code๋ฅผ ์คํํ ์ ์๋๋ฐ, ์ด๋ XSS์ ๋์ผํ ๊ณต๊ฒฉ ๋ฒกํฐ์ ๋ฆฌ์คํฌ๋ฅผ ๊ฐ์ง๋ฉฐ ์ฌ์ค์ ๊ฑฐ์ ๊ฐ์ ๊ณต๊ฒฉ์ด๋ผ๊ณ ๋ด๋ ๋ฌด๋ฐฉํ๊ธด ํฉ๋๋ค. ๋ค๋ง CSTI์์๋ง ์ํฅ์๋ ํ์ด๋ก๋๋ค์ด ์์ด ๋ณ๋๋ก Cullinan ๋ฌธ์๋ก ์ ๋ฆฌํฉ๋๋ค.
๐ก Offensive techniques
Detect
CSTI๋ SSTI์ ๋น์ทํ๊ฒ Template Engine์ด ์๋น์ค์ ๊ฐ์ด ์กด์ฌํด์ผ ๋ฐ์ํ ์ ์๋ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ์ด์ผ๊ธฐํ๋ Template Engine์ ์ผ๋ฐ์ ์ผ๋ก ์น FE ๊ตฌ์ฑ์์ ๋ง์ด ์ฌ์ฉ๋๋ VueJS, AngularJS, React ๋ฑ์ ์๋ฏธํ๋ฉฐ ์ฌ์ฉ์์ ์ ๋ ฅ๊ฐ์ด ๊ฐ ํ๋ ์์ํฌ์์ ์ฌ์ฉํ๋ Template ๋ฌธ๋ฒ์ ์ํฅ์ ์ค ์ ์์ ๋ CSTI ๊ณต๊ฒฉ์ด ์ฑ๊ณตํ ์ ์์ต๋๋ค.
SSTI์ ์ ์ฌํ๊ฒ Template ๋ฌธ๋ฒ ๋ด ๊ฐ๋จํ ์ซ์ ๊ณ์ฐ์ผ๋ก ํตํด์ ์ํฅ๋ ฅ์ ๊ฒ์ฆํฉ๋๋ค.
|
|
๋ฏธ์ทจ์ฝ
|
|
์ทจ์ฝ
|
|
Exploitation
Vue
|
|
Angular
|
|
Mavo
|
|
Bypass protection
Vue
|
|
Minimized
|
|
Angular
|
|
๐ก Defensive techniques
CSTI๋ ๋๋ค์ Injection ๊ณต๊ฒฉ๊ณผ ๋์ผํ๊ฒ Sanitization, Input validation์ ์ด์ค์ผ๋ก ์ ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ํํ์ ๋์๋ฐฉ์์ด๊ณ ์ด๋ ค์ด ๊ฒฝ์ฐ ํ๊ฐ์ง์ ๋์ ๋ฐฉ์์ ํํ๊ฑฐ๋ Sandboxing์ ๊ฒธํด์ ์ฒ๋ฆฌํ๋ ํํ๋ก ๋์์ด ๊ฐ๋ฅํฉ๋๋ค.
Sanitization
์ฌ์ฉ์ ์ ๋ ฅ์ผ๋ก ๋ถํฐ Template์ ์์ฑํ์ง ์๋๋ก ์ฒ๋ฆฌํด์ผํฉ๋๋ค. ์ฌ์ฉ์ ์ ๋ ฅ์ด ํ์ํ ๊ฒฝ์ฐ Template ์์ฒด์์ ์ ๊ณตํ๋ Parameter๋ฅผ ํตํด ๋ฐ์ ์ฒ๋ฆฌํ๋๋ก ๊ตฌ์ฑํ์ฌ Template ์์ฒด์ ์ํฅ์ ์ค ์ ์๋๋ก ์ ํํด์ผ ํฉ๋๋ค.
Input Validation
๋ง์ง๋ง์ผ๋ก ์ฌ์ฉ์ ์ ๋ ฅ์์ { } [ ] ๊ณผ ๊ฐ์ ํน์๋ฌธ์ ์์ฒด๋ฅผ ๋ฐ์ง ๋ชปํ๋๋ก Escape ์ฒ๋ฆฌํ๋ ๋ก์ง์ ์ ์ฉํ์ฌ ๋์ํ ์ ์์ต๋๋ค. ์ด๋ ์ผ๋ถ XSS, SQLi์์ ๋์ํ๋ ๋ฐฉ์๊ณผ ๋์ผํฉ๋๋ค.
|
|
Sandboxing
์ฌ์ฉ์ ์ ๋ ฅ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก Template์ ์์ฑํ๊ณ ๋ ๋๋งํด์ผ ํ๋ ๊ฒฝ์ฐ ์ด์ฉ ์ ์์ด ์ฌ์ฉ์ ์ ๋ ฅ์ผ๋ก Template์ ์ฒ๋ฆฌํ ์ ๋ฐ์ ์์ต๋๋ค. ์ด ๋ ์ฌ์ฉ์ ์ ๋ ฅ์ผ๋ก ๋ถํฐ ๋ฐ๋ Template์ Sandboxing ํ์ฌ ๊ณต๊ฒฉ์ฝ๋๊ฐ ์ค์ ๋ก ์ํฅ์ ๋ผ์น ์ ์๋๋ก ์ ํํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋์ํ ์ ์์ต๋๋ค.
๋ค๋ง Sandboxing์ ๊ฒฝ์ฐ ์ฐํํ ์ฌ์ง๊ฐ ์ถฉ๋ถํ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๊ธ์ ๋จ๋ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ ๋ณด๋จ ์ 2๊ฐ์ ํผ์ฉํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.
๐น Tools
๐ Articles
๐ References
- https://book.hacktricks.xyz/pentesting-web/client-side-template-injection-csti
- https://portswigger.net/kb/issues/00200308_client-side-template-injection
- https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/XSS Injection/XSS in Angular.md
- https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets