防御SVG中的XSS攻击
2018年8月16日 星期四
这项研究始于我为客户进行测试时,客户要求允许SVG文件上传并在网站上显示。大多数人认为SVG文件与PNG或GIF类似是图像文件,但实际上它们是描述图像的XML文件。安全人员关注的是它们还可以包含JavaScript,在图像渲染时执行。w3schools.com对此有很好的介绍。
由于能够包含JavaScript,SVG成为跨站脚本(XSS)的完美攻击向量,适用于允许任意文件上传或限制文件类型为图像并接受SVG的网站。以下是一些受此问题影响的网站示例:
- Ubuquiti Networks
- Paragon Initiative Enterprises
- Lutim
由于客户需求是固定的,我必须提出一些建议,以在允许功能的同时防御XSS攻击(记住,安全应该启用功能,而不是简单地说“不”)。在SANS GPWN列表上进行一些讨论后,我们提出了以下文件访问或显示方式,如您所见,有些是安全的,但有些不是,JavaScript被执行了。
-
直接查看 - 易受攻击:文件直接链接。
-
带有content-disposition: attachment的直接查看 - 不易受攻击:发送标头以强制文件下载。
-
带有CSP的直接查看 - 不易受攻击:内容安全策略设置为不允许内联JavaScript。
-
图像标签 - 不易受攻击:SVG通过图像标签引用,防止脚本。
-
带有CSP的标签 - 不易受攻击:图像标签和相同的CSP,提供双重保护。
-
通过Inkscape清理 - 易受攻击:这是直接查看,但文件已通过以下命令处理:
inkscape --file="xss.svg" --verb="FileVacuum" --export-plain-svg="sanitised.svg"预期这会删除JavaScript,但并未实现。 -
iframe中的图像 - 易受攻击:SVG作为iframe的源加载,未设置特殊属性。
-
沙盒iframe中的图像 - 不易受攻击:SVG作为iframe的源加载,但沙盒属性设置为阻止脚本。
如您所见,有多种选项允许安全上传和显示文件,这意味着客户可以愉快地保持其功能,同时保护自己和用户的安全。
如果您想查看这些场景的实际效果,我准备了以下演示:SVG XSS防御场景,实现了所有上述场景。您还可以从我的GitHub仓库获取完整代码副本。
最近存档
- SteelCon Ninja Run 2022
- Cracked Flask Lab
- WSL2 DNS Oddness
- Splitting XSS payloads
- Alert Function Hijacking
- The CORS Demos
- Entering a new community
- Out running with friends at SteelCon 2019
- An odd quirk with XSS through JavaScript URI
- Becoming More Accessible
- Using HTTP Pipelining to hide requests
- Domain Fronting with Cloudflare
- Domain Fronting with CloudFront
- A 101 on Domain Fronting
- More …
支持本站
本站上的任何项目均未获得报酬,因此如果您想支持我的工作,可以通过使用下面的联盟链接来实现,我会获得账户积分或现金返还。通常只有几分钱,但它们会积少成多。
所有内容均由Robin Wood创建,除非另有说明。