๐ Introduction
CSS Injection์ ๊ณต๊ฒฉ์๊ฐ ์ฝ์ ํ ๊ฐ์ ํตํด์ ์น ํ์ด์ง ๋ด ๋ก๋๋ CSS(์คํ์ผ์ํธ) ๋๋ Style ํ๊ทธ์ ์์ฑ ๋ฑ ํ์ด์ง์ CSS๋ฅผ ํต์ ํ๋ ์ทจ์ฝ์ ์ ๋๋ค. ๋ํ์ ์ผ๋ก ํผ์ฑ์ ํ์ฉ๋ ์ ์์ผ๋ฉฐ ๋ค๋ฅธ XSS๋ CSRF ์ทจ์ฝ์ ์ด ์ฝ๊ฒ ํธ๋ฆฌ๊ฑฐ๋ ์ ์๋๋ก ์ฌ์ฉ์๋ฅผ ์์ด๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๐ก Offensive techniques
Detect
Allowed HTML in Service
HTML ์ฌ์ฉ์ด ํ์ฉ๋ ์๋น์ค์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก CSS Injection์ ์ํฅ์ ๋ฐ์ต๋๋ค. ์ด ๋ ์๋น์ค์์ ์ํฅ๋ ฅ์ ์ค์ด๊ธฐ ์ํด position ๋ฑ ํ์ฉ๋ ์์ญ ์ด์ธ๋ฅผ ํต์ ํ ์ ์๋ CSS ๊ท์น์ ์ ํํ๊ณ ์์ ๊ฐ๋ฅ์ฑ์ด ๋์๋ฐ, ์๋ค๋ฉด CSS Injection์ผ๋ก ์๋น์ค ํ์ด์ง์ ์ ์ฒด ์์ญ์ ์ปจํธ๋กคํ ์ ์๊ธฐ ๋๋ฌธ์ ์ทจ์ฝํ๊ณ , ์ ํ ๋ก์ง์ด ์์ด๋ ์ด๋ฅผ ์ฐํํ์ฌ CSS๋ฅผ ์๋ฒฝํ๊ฒ ํต์ ํ ์ ์์ต๋๋ค.
HTML Injection
XSS์ ์ ์ฌํ์ง๋ง Javascript๋ฅผ ์คํํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ HTML Injection ์ผ๋ก ํํํ๊ณค ํฉ๋๋ค. ์ด ๋ style ํ๊ทธ ๋ฑ์ด ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ CSS Injection์ผ๋ก ํ์ฅ๋ ์ ์์ต๋๋ค.
|
|
CSS received from User
์ฌ์ฉ์์๊ฒ ๊พธ๋ฏธ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฒฝ์ฐ Font์ ํฌ๊ธฐ ๋ฐ ์์, ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง, ๋ฐฐ๊ฒฝ ์ ๋ฑ CSS์ ๊ฐ์ ์ ์ผ๋ก ๊ด์ฌํ ์ ์๋ ๊ธฐ๋ฅ๋ค์ด ์กด์ฌํ ์ ์์ต๋๋ค. ์ด ๋ CSS ๊ตฌ๋ฌธ์ ์ด์ฉํ์ฌ ๊ฐ๋ฐ์๊ฐ ์์ธกํ์ง ๋ชปํ CSS ์ ์ธํ๋ ํํ๋ก Injection ํ ์ ์์ต๋๋ค.
Original
|
|
Injection
|
|
Response
|
|
Exploitation
CSS Injection์ ํตํ ๋ชฉ์ ๊ณผ ๋ฐฉ๋ฒ์ ๊ฐ๋จํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์๊ธฐ ์ฌ์ด ํ์ด์ง๋ฅผ ๋ง๋ค์ด ํผ์ฑํ๊ฑฐ๋ ์ ์ ์ธํฐ๋ ์ ์ด ํ์ํ XSS, CSRF ๋ฑ์ ์ธํฐ๋ ์ ์ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๊พธ๋ฐ ์ ์์ต๋๋ค.
Overwirte UI
๋ํ์ ์ผ๋ก ์๋น์ค์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ๋ํ ๋ฒํผ์ Overwrite ํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ด๋ position: fixed์ ์ด๋ฅผ ๊พธ๋ฉฐ์ฃผ๋ CSS๋ฅผ ๊ธฐ๋ฐ์ ํตํด ๋ก๊ทธ์ธ, ์๋น์ค ํ์ด์ง ๋ฑ์ ๋ฒํผ์ ๊ณต๊ฒฉ์๊ฐ ์๋ํ Element๋ก ๋ฎ์ด์ ์ฌ์ฉ์๊ฐ ์ฝ๊ฒ ํผ์ฑ ๋ฑ์ ๋นํ ์ ์๋๋ก ๊ตฌ์ฑ์ด ๊ฐ๋ฅํฉ๋๋ค.
Reduce of Interaction
CSS Injection์ผ๋ก Interaction์ด ํ์ํ ๋ค๋ฅธ ์ทจ์ฝ์ ์ ๋์ด๋๋ฅผ ์๋ฑํ ๋ฎ์ถ ์ ์์ต๋๋ค. ๋ง์ฝ ํน์ ์ด๋ฏธ์ง๋ฅผ ํด๋ฆญํด์ผ ๋์ํ๋ XSS๊ฐ ์๋ค๊ณ ํ๋ค๋ฉด ์๋์ ๊ฐ์ด CSS๋ฅผ ๋ฎ์ด์จ์ ํ๋ฉด ์ ์์ญ์ ๋ ธ์ถ์์ผ ์ฌ์ฉ์๊ฐ ์ฝ๊ฒ ํด๋ฆญํ ์ ์๋๋ก ์ ๋๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
|
|
Sequential Import Chaining
Sequential Import Chaining์ d0nutptr์ด ์ ์ํ ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ผ๋ก CSS Injection์ด๋ RPO(Relative Path Overwrite) ์ ์ํฅ์ ์ฌ๋ฆฌ๊ธฐ ์ํ Exploit ๋ฐฉ๋ฒ ์ค ํ๋์ ๋๋ค. ์ด๋ฅผ ํตํด์ ํ์ด์ง์ ๋ ธ์ถ๋๋ ์ค์์ ๋ณด๋ฅผ CSS๋ฅผ ํตํด ๊ณต๊ฒฉ์์ ์๋ฒ๋ก ํ์ทจํ ์ ์์ต๋๋ค.
|
|
์์ธํ ๋ด์ฉ์ โSequential Import Chaining์ ์ด์ฉํ CSS ๊ธฐ๋ฐ ๋ฐ์ดํฐ ํ์ทจโ ๊ธ์ ์ฐธ๊ณ ํด์ฃผ์ธ์.
Bypass protection
Upper case
CSS ์์ฑ์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ณํ์ง ์์ต๋๋ค. ์ด๋ฅผ ์ด์ฉํ์ฌ ๋์๋ฌธ์๋ฅผ ์์ด ๋จ์ ๋ฌธ์์ด ๊ฒ์ฆ์ ์ฐํํ ์ ์์ต๋๋ค.
|
|
With var()
CSS์์๋ ๋ณ์๋ฅผ ์ ์ธํ๊ณ ๊ฐ์ ์ฝ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด position: fixed ๋ ๋ฌธ์์ด ํํ๋ก ๊ฒ์ฆํ๋ ๊ฒฝ์ฐ ์ฐํ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
|
|
๐ก Defensive techniques
๊ฐ๊ธ์ ์ฌ์ฉ์์๊ฒ CSS ํต์ ๊ถ์ ์ฃผ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ง์ฝ ์๋น์ค ํน์ฑ ์ CSS๋ฅผ ํต์ ํ ์ ์๋๋ก ์ ๊ณต๋์ด์ผ ํ๋ค๋ฉด position: fixed์ ๊ฐ์ด ์ ์ฒด ํ์ด์ง ์์ญ์ ์ปจํธ๋กค ํ ์ ์๋๋ก ์ ํํด์ผ ํฉ๋๋ค.
- style ํ๊ทธ์ style ์์ฑ
- ํ์ด์ง์ ๋ก๋๋ CSS์์ position ๋ฑ์ด ์ ์ฉ๋ selector
๐น Tools
- https://github.com/d0nutptr/sic (for sequential import chaining)
- https://github.com/m—/onsen (for sequential import chaining)
๐ Articles
- https://www.hahwul.com/2021/06/16/css-injection-bypassing-trick/
- https://www.hahwul.com/2022/02/28/sequential-import-chaining/