基于 CSS 的攻击

信息安全 反恶意软件 css
2021-08-20 20:04:32

我目前正在为 CMS 开发一个插件,它应该允许内容编辑器编写内联样式标签。

我正在寻找有关如何滥用内联样式的建议/链接。

该插件的部分原因是允许严格的内容安全策略(不允许内联 javascript,但允许内联样式) - 这应该可以减轻可能添加到页面中的任何令人讨厌的内容的影响,但不适用于旧浏览器。

Microsoft 行为是否适用于内联样式?

我知道完成这项工作的最佳解决方案是根据白名单验证/清理 CSS - 但这需要实现 CSS 解析器并生成/维护属性白名单。属性/模式的黑名单是否可行?(我知道白名单/黑名单的相对优点 - 但这里有点歪曲,因为应该只有有限数量的攻击向量)。

更新

澄清一下,由于内容编辑者在某种程度上应该受到信任,因此缓解攻击可能是比预防更实用的解决方案。

此外,刚刚在CVE-2011-0232中找到了一个特定示例,尽管我对实现中没有内在漏洞而是设计缺陷的情况更感兴趣。

1个回答

关于 JavaScript:

在 Internet Explorer 和一些非常旧的浏览器中,可以将 JavaScript 注入到样式表中。XSS Filter Evasion Cheat Sheet中描述了几种方法来做到这一点三个主要问题是:

  1. 背景图像和类似的: background-image: url('javascript:alert(/XSS/);')
  2. JavaScript 表达式:width: expression(alert(/XSS/))- 确认在 IE 7 中工作
  3. 加载 .htc 文件:behavior: url(/evil.htc)- 确认在 IE 7 到 9 中工作

CSS 的其他问题:

基本上,每个可下载的资源(图像、字体等)都可以占用访问者的网络容量,并可用于运行 CSRF 攻击、监视访问者或在较小的网站上运行 DDOS 攻击。

可能有一些方法可以使用 CSS 来使浏览器崩溃、占用大量内存或在一段时间内以 99% 的速度旋转 CPU。CSS 3 将支持许多您想要禁止的奇怪事物,包括 3d 内容和过渡。

网站的布局可以自由更改。这包括有趣的事情,比如交换搜索位置和密码输入。可能会使用内嵌样式是不可能的,只是意识到这一点。

关于黑名单:

模式黑名单是一个非常糟糕的主意。编码 CSS 的方法有很多种,但浏览器的做法各不相同。CSS 解析器通常遵循“垃圾输入 - CSS 输出”的原则。此外,需要注意的是,CSS 解析器一般不会因错误而停止,而是会尝试继续解析文本。

在一个简短的测试中,我可以找到一大堆有效的background-color定义:\62ackground-color:, \062ackground-color:, \000062ackground-color:, \62 ackground-color:, bac\k\g\r\o\u\nd-c\o\l\or:.

务实的解决方案:

  1. 编写自己的解析器。不要让它成熟或符合标准,保持简单并拥有属性白名单。您不想要的属性比您想要的属性要多得多。扔掉任何垃圾。

  2. 远离在 CSS 中运行 JavaScript 的浏览器。您必须在这里做一些研究,但是 IE 8 及更高版本不再支持 JS 表达式。其他问题依然存在。