阅读: 21
一、漏洞概述
近日,绿盟科技CERT监测到Cacti官方修复了一个命令注入漏洞(CVE-2022-46169)。由于“remote_agent.php”文件存在验证缺陷,未经身份验证的攻击者通过设置HTTP_开头变量的值为Cacti的服务器主机名来实现身份验证绕过,之后控制get_nfilter_request_var()函数中的检索参数$poller_id,当poller_item设置为POLLER_ACTION_SCRIPT_PHP时,导致proc_open()函数被触发,最终可实现在目标系统上执行任意命令。CVSS评分为9.8,目前该漏洞细节已被公开披露,请相关用户尽快采取措施进行防护。
Cacti是一个开源平台,它为用户提供了一个健壮的、可扩展的操作监视和故障管理框架,也是一个完整的网络绘图解决方案,利用RRDTool的数据存储和绘图功能提供服务。
参考链接:
https://github.com/Cacti/cacti/security/advisories/GHSA-6p93-p743-35gf
- 影响范围
受影响版本
- Cacti = v1.2.22
不受影响版本
- Cacti = 1.2.23
- Cacti = 1.3.0
二、漏洞防护
- 官方升级
目前官方已发布安全补丁修复此漏洞,但仍未发布修复版本,建议受影响的用户及时安装防护:
版本 | 补丁链接 |
v1.2.X | https://github.com/Cacti/cacti/commit/b43f13ae7f1e6bfe4e8e56a80a7cd867cf2db52b |
v1.3.x | https://github.com/Cacti/cacti/commit/b43f13ae7f1e6bfe4e8e56a80a7cd867cf2db52b |
注:若在PHP < 7.0下运行1.2.x实例,还需要进一步更改:https://github.com/Cacti/cacti/commit/a8d59e8fa5f0054aa9c6981b1cbe30ef0e2a0ec9
- 临时防护措施
- 更新php文件,不允许攻击者通过lib/functions.php文件中的get_client_addr函数返回任意IP地址来进行授权绕过,这可以通过不遵守“HTTP_…”“$_SERVER”变量来实现。如果出于兼容性原因应保留这些,至少应该防止伪造运行Cacti的服务器的IP地址。
- 更改php文件,防止命令注入
① 进行$poller_id参数检索时,使用get_filter_request_var函数来代替get_nfilter_request_var函数:
// …
$poller_id = get_filter_request_var(‘poller_id’);
// …
② 在$poller_id参数传入proc_open()函数之前,通过escapeshellarg()函数进行转义:
// …
$cactiphp = proc_open(read_config_option(‘path_php_binary’) . ‘ -q ‘ . $config[‘base_path’] . ‘/script_server.php realtime ‘ . escapeshellarg($poller_id), $cactides, $pipes);
声明
本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。
绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。