描述
SuiteCRM号称全球CRM排名第一,SuiteCRM 是一种开源客户关系管理(CRM) 软件解决方案,可提供客户和业务的 360 度全方位视图。
SuiteCRM存在一系列安全漏洞,包括命令注入,文件包含、权限提升、SQL注入等等。
环境搭建
准备
安装PHP、composer
下载
官网地址:https://suitecrm.com/download/
发布地址:https://github.com/salesagility/SuiteCRM/releases
官网只能下载最新版本,GitHub可以下载历史版本。
安装
解压压缩包到web根目录。在项目跟目录运行composer install,等待命令完成。
然后来到浏览器,访问http://地址/install.php,按照提示一步步安装即可。
漏洞说明
SuiteCRM各个系列版本的漏洞都会在其官网版本发布的位置留下记录
7.12.x系列:https://docs.suitecrm.com/admin/releases/7.12.x/
7.11.x系列:https://docs.suitecrm.com/admin/releases/7.11.x/
CVE-2022-23940- 远程代码执行
CVE-2022-23940
影响版本
< 7.12.1
8.x - 8.0.1
漏洞描述
漏洞成因是因为没有对创建预约报告时的Email Recipients参数做任何过滤,导致反序列化命令执行。
入口点在预约报告创建处,涉及参数Email Recipients。
触发点在报告查看处,每当有人查看携带了Payload的预约报告时,便会在服务器触发一次。
漏洞位置
漏洞位于Scheduled Reports模块。我在复现的时候,浏览器页面中没有找到这个模块。以下是当前可跳转的所有模块:
由此猜测,漏洞作者很有可能采用的通读全文法来审计代码。
那么,怎么来到这个模块呢?还是要回去看代码。
在项目modules目录下找到AOR_Scheduled_Reports模块
我们知道,SuiteCRM采用的MVC架构,构造urlhttp://ip:port/index.php?module=AOR_Scheduled_Reports&action=index,来到这个模块。
接着来到创建页面,发现创建计划报告时,除了Email Recipients参数还有几个必填参数。其他几项都还好可以随便填。Reports项必须选择系统已有的报告,所以只能创建一个报告或者利用工具直接发包了。
漏洞入口
直接遍历http请求过来的数据,没有进行任何过滤,直接把post请求的数据赋值给$this->bean。
把创建的计划报告保存到数据库
思考
从这里可以看出来,开发者对于安全方面的思考几乎没有。抛开这个反序列化问题不谈,这里不进行任何过滤存入数据库,还会存在其他问题:比如sql注入、XSS等问题。
漏洞触发点
遍历Scheduled Reports的每一个参数,对其渲染。
调用modules/AOR_Scheduled_Reports/emailRecipients.php::display_email_lines对邮箱进行处理。
对邮箱的值进行反序列化触发漏洞
用到的php反序列化链
思考
同样的,从数据库取出来的数据也没有进行任何安全处理。反序列化的数据同样是不可信的。
漏洞修复
1.对传入的数据进行严格的格式校验
2.采用其他方式存储数据。
3.升级新版本。
下图为官方修复方法
原文始发于微信公众号(云智信安云窟实验室):CVE-2022-23940-SuiteCRM问题分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论