击败Magento安全机制:现实世界中使用的攻击

 洋养碟安全 DefenSecode最近发现并报告了多个存储的跨站点脚本和跨站点请求在Magento 1和2中的伪造伪造漏洞,其中将在未来的一个补丁中解决。

鉴于这些发现,本文介绍了现实世界中使用的几种攻击的示例,这些攻击将常见的漏洞与Magento中的错误安全机制结合起来,导致不利的结果。例子将针对magento 2,但大多数也可以应用于magento 1。

通过他们的错误赏金计划向安全社区达到安全社区并努力迅速回应并评估最近的漏洞报告,所以这是一个巨大的漏洞报告,所以这是一个很好的工作而是提高意识。 DECENSECODE同意对所有目前报告的漏洞进行协调披露,直到邮政释放之前没有公开提供细节。

密钥(in)安全

玛托托 DC-2017-04-003咨询建议强制使用“将秘密密钥添加到URL”减轻CSRF攻击向量。由于默认情况下启用了秘密密钥,因此有些人使用此事实来淡化漏洞的严重性,这表明缺乏关于这种情况如何通过经验丰富的攻击者利用这种缺陷的安全意识。在大多数情况下,这涉及更复杂的攻击与其他漏洞相结合。

秘密密钥对于每个URL路径和会话都是不同的,因此应该提供一个体面的跨站点请求伪造保护。但是那些秘密钥匙和他们真正的秘密是什么?第一个(并正确)猜测,基于其固定长度为64个字符/ 32字节,是它是SHA-256哈希。但是如何生成秘密密钥的数据是什么?要回答这个问题,我们需要挖一点代码。让我们来看看以下代码段:

 洋养碟安全

我们可以看到哈希数据或“secret”随着变量的表明,它是一个刚刚具有附加盐值的URL路径片段的连接字符串。如果是DC-2017-04-003任意文件上传漏洞,基于漏洞中使用的路径(Product_video / Product_Gallery / Redrievage),秘密数据看起来像以下内容:

product_videoproduct_galleryretrieveImageXXXXXXXXXXXXXXXX

在哪里‘X’代表盐。现在这是事情变得有趣的地方。盐是随机生成的16字符字母数字串。完全相同的值用作form_key参数,它在管理面板中的所有表单上用作(附加)CSRF令牌。在Magento 2.x中,此键在管理面板中的每个动态生成的页面中找到。这是什么意思?

当相同的原始策略约束不是障碍物时,例如在XSS漏洞中,所需的只是一个HTTP请求(XHR) /行政/ 攻击者拥有您的表单密钥。 XHR将遵循重定向 管理/仪表板/索引/键/秘密 并读取服务器响应。一旦攻击者拥有您的表单密钥,他就可以根据不需要密码确认的任何形式构建CSRF攻击。其中包括DC-2017-04-003咨询中描述的CSRF攻击。

概念证明剥削了将所有这些链接在一起:

 洋养碟安全

密钥散列PHP脚本:

 洋养碟安全

另一种用于在任何URL /路径中获取密钥的方法是将管理仪表板页面解析为其他页面的密钥,并重复该过程,直到找到目标URL。

利用DC-2017-04-003任意文件上传漏洞使用的更简单 / admin /目录/产品/编辑/ id / 1 / as it is both a page that can be accessed without a secret key and a page that contains the secret key for Product_video / Product_Gallery / Redrievage. 概念证明漏洞:

 洋养碟安全

因此,它在同一个域中需要一个XSS漏洞(比您认为的更常见)升级到任意文件上传和可能的远程代码执行。

不安全管理会话ID

先前描述的方法也可用于劫持管理员会话。虽然管理员会话ID(SID)通常是Cookie - 包含并受HttpOnly标志的保护(意味着它无法通过客户端脚本访问),但是Magento通过URL传递会话ID的情况,特别是与可下载相关的功能产品和示例以及编辑内容页面。

第一个方法涉及通过发出请求来检索SID URL / admin /目录/产品/编辑/ id / 1 / and parsing the response. The only catch is that when the secure keys are enabled, Magento will use them instead of SID. To circumvent this the attack chain should be the following: retrieve the form key -> use it to disable secret keys -> retrieve the session ID from a product page. 概念证明漏洞 that retrieves admin session ID using this method is presented below:

 洋养碟安全

密钥散列PHP脚本:

 洋养碟安全

第二种方法从中检索SID / admin / cms / page / 首先从仪表板页面获取该页面的完整密钥URL,然后解析SID的响应。这里’S概念证明利用:

 洋养碟安全

提出的解决方案

直接请求在没有Magento管理面板内部的秘密密钥的所有URL路径应导致错误或注销用户而不是重定向到管理仪表板。在没有密钥的情况下,不应该请求的路径。

代替 h(消息||键) 方法,秘密密钥应该使用HMAC构造来导出,即 h(key1 || h(key2 ||消息)) 其中key1应该是magento实例设置期间设置的唯一值。这样,即使攻击者获得表格键值(key2),他将无法在不知道主键(key1)的情况下构建CSRF攻击。

会话ID不应在HttpOnly Cookie之外使用。

结论

I’通过指出所描述的攻击需要管理URL和XSS漏洞作为起点,可以尝试向自己和其他人努力保证自己。我们留下了两个重要的想法。自定义URL是通过默默无闻的安全性,这对专用攻击者无济于事。

就跨站点脚本漏洞而且,DefenSecode报告了多种介质风险存储在Magento 1和2中的XSS漏洞,这将在未来的未来修补程序中解决。弱势群体的第三方扩展和店面主题是常见的。您仍然对商店的安全感到安全吗?

分享这个