自包含 XSS 攻击有多严重?

信息安全 Web应用程序 攻击 javascript xss
2021-08-13 03:06:35

你们中的一些人可能熟悉这种称为自包含 XSS 的攻击。我最近偶然发现了一篇文章关于它。那么这种攻击有多糟糕,即使它无法访问当前的 DOM 元素?有人在野外见过这个吗?

这也会影响移动浏览器吗?

另一个有用的链接

3个回答

自包含的 XSS,与 XSS 本身一样糟糕。这只是提供有效载荷的方式之一。您问题中的链接描述了两个不同的向量:

  1. data: URLs - 所有现代浏览器(包括移动设备)目前都支持各种上下文中的数据 URL,当然,这提供了另一个提供 XSS 有效负载的向量 - 并且有机会绕过许多旧的反 XSS 过滤器。最常见的方法是例如添加一个<iframe>with srcof data:text/html,<html><script>alert(/xss/)</script></html>,但是还有很多很多其他方法可以将数据 URL 用于 XSS。您可以通过查看HTML5 安全备忘单data:来查看其中的一些

有没有在野外使用过?是的,例如我用它来利用Piwik XSS 漏洞

  1. 另一个链接描述了植入 XSS 'shell-like' 有效载荷。因此,攻击者没有提供最终的漏洞利用,而是插入了一个有效载荷,该有效载荷将请求并执行来自攻击者的进一步命令。给定的例子是:with(location)with(hash)eval(substring(1))但是有很多相似的向量。

因此,总而言之 - 自包含 XSS 不是另一种 XSS 类型(如存储型 XSS 或基于 DOM 的 XSS),它们只是有效负载外观的方式。你真的不能说它比 XSS 本身更危险。

这其实是个老问题了。data您可以使用URI对任何媒体类型进行编码。使用它在单个标记文件中嵌入图像是很常见的。

<img src="data:image/png;base64,ABCdefghIjKlmNoPqrSTuvwxyZ01d" />

这很危险的原因是任何 XSS 攻击都可能允许攻击者嵌入dataURI。如果用户下载它,他们可能正在访问任何类型的文件。更糟糕的是,这是一种从用户信任的站点嵌入可以利用浏览器或底层渲染组件中的其他漏洞的数据的方法。

例如,假设 Bob 的 Crazy Discount Spoons 发生了 XSS 攻击,其中src可以操纵图像:

http://bobscrazydiscountspoons.com/foo/bar.php?xss=data:image/png;base64,ABCdefghIjKlmNoPqrSTuvwxyZ01d

用户现在利用浏览器的 PNG 渲染器中的漏洞得到了一个讨厌的有效载荷,而不是他想要的那些疯狂的折扣勺。

当然,这不仅限于图像。任何可以注入对象源或链接的地方,都可以使用。这同样适用于能够将此类数据注入到完整的 HTML 注入攻击中。

那么这种攻击有多糟糕,即使它无法访问当前的 DOM 元素?

它比链接文章中相当有限的示例更糟糕:在 Firefox 和 Opera 中,data:URI确实在与包含它们的文档相同的安全上下文中运行,因此可以访问域中的 DOM 元素。这在 Chrome/Safari 或 IE9 中不会发生(故意只支持部分data:URI)。

在可以包含 HTML 文档的情况下,这会带来与传统 XSS 相同的风险。这主要是框架和链接,但其他攻击是可能的(*)。

示例: http: //jsbin.com/ukoqot/2/ - 创建一个链接和一个 iframe,将您键入的 HTML 文档注入数据:两者中的 URL。链接/框架文档中的代码获取 jsbin.com 的安全上下文,使其能够提醒 jsbin 索引页面的源代码。

因此,您应该认为data:URI 与 URI 一样有风险javascript:,并且在您的 webapp 允许提交 URI 的任何地方都不允许使用它们。(实际上,将已知良好的 URI 方案列入白名单以坚持有限的选择,例如http/https是最好的。)

(*: 例如:将攻击者提交的data:text/html...URI 放入 an 中<img src>,图像将不起作用。但如果用户可以被骗到右键单击视图图像中,他们会将资源加载为 HTML,从而导致 XSS .)