在2019年6月,Fortinet的FortiGuard实验室发现了LiveZilla的Live Chat中的7个漏洞,并进行了相关报告撰写。LiveZilla是一家拥有众多财富500强企业和顶尖大学用户的软件公司,拥有超过15,000名用户。
我们可以在8.0.1.0及更低版本中找到这些漏洞。 在撰写此博客时,这些问题已得到修复,并且供应商已发布了这些漏洞的修复程序。 FortiGuard Labs对供应商的快速响应和及时修复表示赞赏。
以下是漏洞的摘要:
在审核\livezilla\server.php
中的源代码文件时,第76行处表示server.php将导入intern.php文件。
当我们查看\livezilla\intern.php
时,我们看到它在第29行调用类OperatorRequest
的Listen()
方法。该类派生自\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显示了供应商提供的补丁情况:
在分析第84行的\livezilla\mobile\index.php
中的源代码文件时,我们发现服务器在没有进行清理的情况下回应了$language
,这可能导致跨站点脚本(XSS)漏洞。
$language
的值取自$ _SERVER ['HTTP_ACCEPT_LANGUAGE']
,这是HTTP请求标头中的Accept-Language字段。
通过使用Man-in-The-Middle(MiTM)
攻击方法,或者任何扩展来修改标头,攻击者可以在用户的浏览器中运行javascript代码。
图10显示了供应商提供的补丁:
这个拒绝服务被发现在\livezilla\knowledgebase.php
,第39到51行:
第39行的条件结构确定是否打开了搜索引擎优URL选项。 如果是,则查找GET参数深度,然后对其值执行基于循环的操作,该操作可由攻击者控制。 换句话说,如果我们提供输入,比如“?depth = 2200000”
,它将循环2200000次。 正如我们在图11中的第46-47行所示,循环指令将字符串“../”
连接到$path
变量中,这可能导致内存溢出。
图12显示了供应商提供的补丁:
这是另一个可以从Guest Live Chat窗口触发的XSS漏洞。 攻击者可以在实时聊天中输入XSS的payload。
在管理面板中,如果管理员在聊天窗口中创建了一个故障单,则该聊天内容将呈现为一个新的聊天记录弹出窗口而不进行清理,这可能导致在用户的浏览器中执行任意javascript。
在验证供应商的补丁后,我们意识到版本8.0.1.1中的补丁不完整。 我们通知了开发人员,并为他们提供了可以绕过8.0.1.1版补丁的额外payload,他们为此问题提供了完整的解决方案。 图15显示了供应商版本8.0.1.2中的补丁:
另一个SQL注入漏洞可以在 \livezilla_lib\functions.internal.build.inc.php,中的第596到605行找到。
服务器确定参数p_dt_s_d
是否通过POST HTTP请求发送,然后将其值直接输入到查询而不清除该值。 这导致了经典的SQL注入。
图17和18显示了供应商提供的补丁:
在第109行的\livezilla\ticket.php
中发现了另一个XSS。对于此漏洞,服务器使用我们制作的内容替换了$subject
持有者,而没有进行适当的清理。
图21显示了供应商提供的补丁:
我们还在源代码文件\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