SVG 文件和十亿笑声攻击

信息安全 svg
2021-08-24 14:39:48

SVG 文件容易受到十亿笑攻击。我们的网站允许用户上传/提交markdown文件,我们在渲染之前通过marked.js运行.md文件。现在降价中的图像被渲染为,

<img src="https://evilsite.com/badsvg.svg"/>

在网页中。浏览器将阻止任何<script>inbadsvg.svg执行。

现在evilsite.com可以提供badsvg.svg包含亿笑有效载荷的服务。这就是不同浏览器的处理方式,

Edge/IE - 不受影响,因为它对实体扩展有限制(您可以在控制台的日志中看到它)

Firefox - 似乎对实体扩展也有限制

Chrome - 没有限制,它会尝试扩展所有实体并最终耗尽内存,除了关闭/杀死标签别无选择

Chrome 上的这个相关错误被标记为“无法修复” - https://bugs.chromium.org/p/chromium/issues/detail?id=617891

这是客户端 DOS,该站点基本上对 Chrome 上的任何用户都无法使用。您建议我们如何防止此类攻击?禁止用户引用外部域的资源似乎是一种极端的措施。

1个回答

作为一种解决方法,您可以在您的服务器上实现类似 SVG 代理的东西,它拒绝触发 dos 的 SVG 文件并通过代理链接所有 SVG 文件,例如/svgproxy?f=https://evilsite.com/badsvg.svg. 但是,即使仅对 chrome 用户进行检查可以限制性能,当然也会有性能劣势。

检测坏 SVG 的一种不太昂贵的方法是尝试使用具有内存限制的进程渲染 SVG。如果渲染失败,它是一个坏的 SVG。你可以试试 ImageMagick,它至少有时也会自己拒绝坏的 SVG。