有没有办法在带有 SVG 的 HTML img 标签中执行 XSS?

信息安全 xss 图片 svg
2021-09-01 10:08:42

是否有一种可行的技术可以在现代浏览器中使用显示在带有<img src="">标签的网页上的 SVG 文件来执行 XSS?

我知道一种不带<script>标签执行的方法,但我不知道如何使用 SVG 或其他任何东西加载文件,因为当我尝试使用不同的标签来让我的 XSS 工作时,XML 会中断。

这真的可能吗?

2个回答

不,这不对。尽管 SVG 文件可以包含 JS(请参阅this),但只有在以下情况下才会执行这些文件:

  1. 用户直接.svg在浏览器中访问文件
  2. 图像嵌入<embed>标签中。

如果 SVG 在<img>标签内,现代浏览器将永远不会执行脚本。

即使在上述两种情况下,服务器也可以提供停止执行此类脚本的 CSP 标头。

SVG 图像可以包含 CSS,CSS 是 XSS 的可能注入点

请参阅https://stackoverflow.com/questions/3607894/cross-site-scripting-in-css-stylesheetshttps://code.google.com/archive/p/browsersec/wikis/Part1.wiki#Cascading_stylesheets

两者都指出

作为一个鲜为人知的特性,一些 CSS 实现允许将 JavaScript 代码嵌入到样式表中。至少有三种方法可以实现这一目标: 使用 expression(...) 指令,它可以评估任意 JavaScript 语句并将它们的值用作 CSS 参数;通过在支持它的属性上使用 url('javascript:...') 指令;或者通过调用特定于浏览器的功能,例如 Firefox 的 -moz-binding 机制。

所以,是的,您可以使用用户控制的 SVG 在主机页面的域中执行脚本。

使用 Content-Security-Policy 您可以限制您希望找到样式或脚本的位置。您可以尝试的另一件事是在沙盒跨域 iframe 中提供这些 SVG。