1、产品描述:Cacti项目是一个开源平台,可为用户提供强大且可扩展的操作监控和故障管理框架。
2、影响产品或组件及版本:Cacti = 1.2.22
3、受影响资产情况:通过资产测绘系统fofa发现,全球公61665个使用记录,其中第一名美国 40520个,第二名中国10589个、第三名日本10556个。
4、技术细节表述:漏洞存在于“remote_agent.php”文件中,攻击者无需身份验证即可访问此文件。攻击者可利用get_nfilter_request_var()函数检索的参数$poller_id,来满足poller_item =POLLER_ACTION_SCRIPT_PHP条件,触发proc_open()函数,从而导致命令执行。漏洞利用成功后,未经身份验证的攻击者可以在运行 Cacti 的服务器上执行任意代码。
5、修补措施:
目前根据影响版本中的信息,排查并升级到安全版本。
Cacti官方已针对该漏洞发布补丁,但补丁更新版本1.2.23和1.3.0目前暂未发布,详见:
https://github.com/Cacti/cacti/security/advisories/GHSA-6p93-p743-35gf
临时修补建议
1. 禁止lib/functions.php 文件中的 get_client_addr函数返回任意IP地址来防止授权绕过。同时不遵守 HTTP_... $_SERVER 变量。
2. 对 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');
// ...
3. 为了进一步加强对命令注入的防御,$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);
// ...
6、漏洞来源:https://github.com/Cacti/cacti/security/advisories/GHSA-6p93-p743-35gf
![weinxin](http://zone.ci/zone_ci_images/zone.ci.png)
评论