滥用文档模式继承:EasyXDM 2.4.19 DOMXSS漏洞
在这篇文章中,我将解释EasyXDM 2.4.19版本中的一个XSS问题。我向开发者报告了此问题,并已得到修复。
如果您是用户,应该将其更新到EasyXDM 2.4.20版本。
安全更新版本2.4.20 · oyvindkinsey/easyXDM · GitHub https://github.com/oyvindkinsey/easyXDM/releases/tag/2.4.20
这个bug与以下@kkotowicz发现的bug不同:
http://blog.kotowicz.net/2013/09/exploiting-easyxdm-part-1-not-usual.html http://blog.kotowicz.net/2013/10/exploiting-easyxdm-part-2-considered.html http://blog.kotowicz.net/2014/01/xssing-with-shakespeare-name-calling.html
技术细节
要复现这个bug,我们需要一些不寻常的技巧。这个bug仅在MSIE浏览器上有效,且文档模式需要为旧版本(IE7或5)。这是因为XSS存在于只有有缺陷的浏览器才能通过的部分,而只有旧的文档模式才能满足这个条件。
让我们看一下代码。XSS发生在以下createElement()部分:
https://github.com/oyvindkinsey/easyXDM/blob/2.4.19/src/Core.js#L507-509
|
|
if语句条件中的HAS_NAME_PROPERTY_BUG变量只在有缺陷的浏览器上变为true。它在以下函数中被赋值:
https://github.com/oyvindkinsey/easyXDM/blob/2.4.19/src/Core.js#L474-482
|
|
这段代码创建一个表单元素和一个带有name属性的输入元素,并尝试通过name访问输入元素。似乎IE7模式无法通过name访问使用JavaScript动态创建的元素。这段代码就是用于测试这一点的。
我创建了一个页面来测试这个部分。您可以从MSIE确认HAS_NAME_PROPERTY_BUG变量变为true。
http://vulnerabledoma.in/easyxdm/name_property_test.html
现在,让我们使用易受攻击的EasyXDM来确认这个XSS。
访问以下URL并通过F12开发者工具更改IE7模式(F12 -> 仿真选项卡)。您应该会看到一个警告对话框。
好的,我们知道它确实有效。但到目前为止,它只在IE7模式下工作。这意味着攻击机会非常有限。
因此,我们使用我最近在幻灯片中提到的"文档模式继承"技巧。
使用这个技巧!
|
|
您仍然看不到警告对话框。父窗口通过meta标签运行在IE5模式下,但iframe运行在IE8模式下。这是因为iframe页面有。如果存在此声明,IE11可以将文档模式降至IE8模式。要实现XSS,我们必须以某种方式将文档模式降至IE7模式。
不用担心!最近我发现IE在特定位置具有强大的继承能力。您可以从以下地址测试:
最后,您可以看到一个警告对话框。前者与此页面之间的区别在于,该页面是Content-Type: message/rfc822格式,而不是text/html。正如我在以下幻灯片中展示的那样,IE/Edge仍然可以在浏览器中打开message/rfc822文档。
似乎message/rfc822文档默认在IE5模式下渲染,并且其文档模式继承能力比text/html页面更强。即使页面有,我们也可以将文档模式降至IE7模式。因此,我们可以到达易受攻击的代码。太棒了!:)
使用这种技术,可以扩大影响范围。原本仅影响IE7模式的问题变成了影响所有IE11用户的问题,而无需用户手动更改为旧文档模式。这是非常有用的技术,不是吗?:)
我写了关于EasyXDM 2.4.19中的XSS问题。 就这样。感谢阅读我的文章!
发布日期: 2016年4月10日,星期日,上午6:30
作者: Masato Kinugawa
标签: IE, OSS, Security, XSS