在2019年6月,Fortinet的FortiGuard实验室发现了LiveZilla的Live Chat中的7个漏洞,并进行了相关报告撰写。LiveZilla是一家拥有众多财富500强企业和顶尖大学用户的软件公司,拥有超过15,000名用户。

我们可以在8.0.1.0及更低版本中找到这些漏洞。 在撰写此博客时,这些问题已得到修复,并且供应商已发布了这些漏洞的修复程序。 FortiGuard Labs对供应商的快速响应和及时修复表示赞赏。

以下是漏洞的摘要:

  1. LiveZilla Server before 8.0.1.1 is vulnerable to SQL Injection in server.php via the p_ext_rse parameter
  2. LiveZilla Server before 8.0.1.1 is vulnerable to XSS in mobile/index.php via the Accept-Language HTTP header
  3. LiveZilla Server before 8.0.1.1 is vulnerable to Denial of Service (memory consumption) in knowledgebase.php via a large integer value of the depth parameter
  4. LiveZilla Server before 8.0.1.2 is vulnerable to XSS in the chat.php Create Ticket Action
  5. LiveZilla Server before 8.0.1.1 is vulnerable to SQL Injection in functions.internal.build.inc.php via the parameter p_dt_s_d.
  6. LiveZilla Server before 8.0.1.1 is vulnerable to XSS in the ticket.php Subject
  7. LiveZilla Server before 8.0.1.1 is vulnerable to CSV Injection in the Export Function

漏洞细节

1. FG-VD-19-082 8.0.1.1之前的LiveZilla Server通过p_ext_rse参数进行server.php的SQL注入攻击

在审核\livezilla\server.php中的源代码文件时,第76行处表示server.php将导入intern.php文件。

当我们查看\livezilla\intern.php时,我们看到它在第29行调用类OperatorRequestListen()方法。该类派生自\livezilla\_lib\objects.internal.inc.php

正如我们在图中看到的,它然后在第302行调用同一类中的Build()方法:

深入研究Build(),第405行处我们可以看到它调用了buildResources()

正如在图5中的第59行所见,它执行以下SQL查询:

在列表中,使用DBManager::RealEscape过滤器函数清理参数以避免SQL注入。 然而,这里缺少对引用清理,这使得过滤功能变得无效。 因此,我们只需要在SQL查询中输入没有任何引号的值,以便利用此漏洞。

$_POST[POST_INTERN_XMLCLIP_RESOURCES_END_TIME])被定义在\livezilla\_definitions\definitions.protocol.inc.php中:

因此,该漏洞的最终payload如下所示:

  • p_ext_rse=(select*from(select(if((substr(123,1,1) like 1),2,sleep(5))))a)

  • p_ext_rse=(select*from(select(if((substr(123,1,1) like 2),2,sleep(5))))a)

图7显示了供应商提供的补丁情况:

2. LiveZilla Server通过Accept-Language HTTP头受到mobile/index.php中的XSS攻击

在分析第84行的\livezilla\mobile\index.php中的源代码文件时,我们发现服务器在没有进行清理的情况下回应了$language,这可能导致跨站点脚本(XSS)漏洞。

$language的值取自$ _SERVER ['HTTP_ACCEPT_LANGUAGE'],这是HTTP请求标头中的Accept-Language字段。

通过使用Man-in-The-Middle(MiTM)攻击方法,或者任何扩展来修改标头,攻击者可以在用户的浏览器中运行javascript代码。

图10显示了供应商提供的补丁:

3.FG-VD-19-084 LiveZilla Server很容易受到knowledgebase.php中的拒绝服务的影响

这个拒绝服务被发现在\livezilla\knowledgebase.php,第39到51行:

第39行的条件结构确定是否打开了搜索引擎优URL选项。 如果是,则查找GET参数深度,然后对其值执行基于循环的操作,该操作可由攻击者控制。 换句话说,如果我们提供输入,比如“?depth = 2200000”,它将循环2200000次。 正如我们在图11中的第46-47行所示,循环指令将字符串“../”连接到$path变量中,这可能导致内存溢出。

图12显示了供应商提供的补丁:

4. LiveZilla Server在chat.php创建故障单操作中容易受到XSS攻击

这是另一个可以从Guest Live Chat窗口触发的XSS漏洞。 攻击者可以在实时聊天中输入XSS的payload。

在管理面板中,如果管理员在聊天窗口中创建了一个故障单,则该聊天内容将呈现为一个新的聊天记录弹出窗口而不进行清理,这可能导致在用户的浏览器中执行任意javascript。

在验证供应商的补丁后,我们意识到版本8.0.1.1中的补丁不完整。 我们通知了开发人员,并为他们提供了可以绕过8.0.1.1版补丁的额外payload,他们为此问题提供了完整的解决方案。 图15显示了供应商版本8.0.1.2中的补丁:

5. LiveZilla Server很容易通过参数p_dt_s_d在functions.internal.build.inc.php中进行SQL注入

另一个SQL注入漏洞可以在 \livezilla_lib\functions.internal.build.inc.php,中的第596到605行找到。

服务器确定参数p_dt_s_d是否通过POST HTTP请求发送,然后将其值直接输入到查询而不清除该值。 这导致了经典的SQL注入。

图17和18显示了供应商提供的补丁:

6. LiveZilla Server易受ticket.php中的XSS攻击

在第109行的\livezilla\ticket.php中发现了另一个XSS。对于此漏洞,服务器使用我们制作的内容替换了$subject持有者,而没有进行适当的清理。

图21显示了供应商提供的补丁:

7. LiveZilla Server易受导出功能中的CSV注入攻击

我们还在源代码文件\livezilla\_lib\functions.internal.man.inc.php中发现了逗号分隔值(CSV)文件注入。 从图22中的第736行到第744行,我们可以看到服务器尝试以CSV格式导出数据而不进行清理。

图23显示了供应商提供的补丁:

漏洞发现时间点

2019年6月22日:Fortinet向LiveZilla报告了FG-VD-19-082和FG-VD-19-084的漏洞
2019年6月24日:Fortinet报告了漏洞FG-VD-19-086
2019年6月25日:Fortinet向LiveZilla报告了FG-VD-19-083,FG-VD-19-085,FG-VD-19-087和FG-VD-19-088的漏洞
2019年6月26日:LiveZilla确认了漏洞,发布了针对这些漏洞的补丁
2019年6月27日:Fortinet确认了这些漏洞的修复,但FG-VD-19-085除外
2019年7月1日:LiveZilla确认FG-VD-19-085的修复不正确,等待8.0.1.2版本
2019年7月23日:LiveZilla发布了8.0.1.2补丁漏洞,Fortinet确认修复了FG-VD-19-085

结论

总之,所有这些漏洞的根本原因是缺乏简单的输入清理。 因此,FortiGuard Labs在LiveZilla Live Chat软件中发现了多个漏洞,范围从中等严重级到严重级。

Live Chat用户立即应用LiveZilla提供的修补程序至关重要,因为某些漏洞(例如启用SQL注入的漏洞)将允许攻击者在成功利用后从数据库中提取机密信息。

本文为翻译稿件,来自:https://www.fortinet.com/blog/threat-research/livezilla-live-chat-technical-advisory.html

点击收藏 | 0 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖