近日,亚信安(ān)全CERT监控到Cacti存在命令执行漏洞(CVE-2022-46169),漏洞细节已公(gōng)开。该漏洞存在于remote_agent.php文(wén)件中(zhōng),无需身份验证即可(kě)访问此文(wén)件,攻击者可(kě)通过设置网络头HTTP_变量绕过身份验证,触发polldata功能(néng),当get_nfilter_request_var()函数检索的参数$poller_id满足特定条件时,可(kě)触发proc_open()函数,从而导致命令执行。此命令注入漏洞允许未经身份验证的用(yòng)户在构造恶意请求的情况下执行任意命令。
对此,目前厂商(shāng)已发布修复补丁,但暂未发布版本更新(xīn)。鉴于该漏洞受影响面较大,亚信安(ān)全CERT建议使用(yòng)Cacti的用(yòng)户及时关注官方更新(xīn),参照官方修复方案尽快采取相关措施,做好资产(chǎn)自查以及预防工(gōng)作(zuò),以免遭受黑客攻击。
Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的开源网络流量监测图形分(fēn)析工(gōng)具(jù),提供了非常强大的数据和用(yòng)户管理(lǐ)功能(néng)。
漏洞编号和等级
CVE-2022-46169
CVSS3.1 9.8分(fēn)
漏洞状态

受影响版本
Cacti = 1.2.22
修复建议
临时缓解措施
1. 禁止lib/functions.php文(wén)件中(zhōng)的get_client_addr函数返回任意IP地址来防止授权绕过,设置不遵循HTTP_... $_SERVER变量。若无法修改,应禁止伪造运行Cacti的服務(wù)器的IP地址。
2. 对remote_agent.php文(wén)件进行修改以防止命令注入,变量$poller_id应该是一个整数,因此应该通过函数get_filter_request_var代替get_nfilter_request_var进行检索:

3. 為(wèi)了进一步加强对命令注入的防御,$poller_id参数应该在传递给proc_open之前使用(yòng)escapeshellarg进行转义:

安(ān)全补丁修复
目前Cacti官方已发布安(ān)全补丁,建议受影响用(yòng)户尽快安(ān)装(zhuāng)修复补丁。
1.2.x版本补丁:https://github.com/Cacti/cacti/commit/7f0e16312dd5ce20f93744ef8b9c3b0f1ece2216
1.3.x版本补丁:
https://github.com/Cacti/cacti/commit/b43f13ae7f1e6bfe4e8e56a80a7cd867cf2db52b
对于在PHP < 7.0下运行的1.2.x实例,还需要进一步更改:
https://github.com/Cacti/cacti/commit/a8d59e8fa5f0054aa9c6981b1cbe30ef0e2a0ec9
参考链接
https://github.com/Cacti/cacti/security/advisories/GHSA-6p93-p743-35gf