【漏洞通告】关于 Cacti 服务器监控系统命令执行漏洞的通告
概述
概述
我中心技术支撑单位“神州网云”近日监测到 Cacti 存在命令执行漏洞(CVE-2022-46169), 未经身份认证的攻击者可通过控制由函数检索的参数,触发proc_open()函数,从而导致命令执行。目前,漏洞细节已公开。Cacti 作为五大主流开源监控系统之一,被广泛应用在服务器集群运维中,用于网络流量监测和硬件负载监控的图形化分析工具,尤其对于 Linux 服务器集群,建议各行业IT运维部门、IDC数据中心尽快自查相关服务器监控系统使用情况,及时更新至安全版本,以防遭受黑客攻击。
Cacti 是一套开源的监控软件,基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具,为世界各地的用户提供强大且可扩展的操作监控和故障管理框架。
漏洞详情
漏洞详情
未经身份认证的攻击者可通过控制由get_nfilter_request_var()函数检索的参数$poller_id,来满足poller_item =POLLER_ACTION_SCRIPT_PHP条件,触发proc_open()函数,从而导致命令执行。
漏洞名称:Cacti 命令执行漏洞
漏洞编号:CVE-2022-46169
危害等级:高
影响范围
影响范围
受影响版本
· Cacti = 1.2.22
解决方案
解决方案
目前,Cacti 官方已发布安全补丁修复漏洞,请使用单位尽快自行排查并安装安全补丁。
【1.2.x版本】https://github.com/Cacti/cacti/commit/7f0e16312dd5ce20f93744ef8b9c3b0f1ece2216
【1.3.x版本】https://github.com/Cacti/cacti/commit/b43f13ae7f1e6bfe4e8e56a80a7cd867cf2db52b
一是禁止lib/functions.php文件中的get_client_addr函数返回任意IP地址来防止授权绕过,设置不遵循HTTP_... $_SERVER变量。若无法修改,应禁止伪造运行Cacti的服务器的IP地址。
二是对remote_agent.php文件进行修改以防止命令注入,变量$poller_id应该是一个整数,因此应该通过函数get_filter_request_var代替get_nfilter_request_var进行检索:
function poll_for_data() { // ... $poller_id = get_filter_request_var('poller_id'); // ...}三是进一步加强对命令注入的防御,$poller_id参数应该在传递给proc_open之前使用escapeshellarg进行转义:
function poll_for_data() { // ... $cactiphp = proc_open(read_config_option('path_php_binary') . ' -q ' . $config['base_path'] . '/script_server.php realtime ' . escapeshellarg($poller_id), $cactides, $pipes); // ...}参考链接: