漏洞概述
Centreon是一款开源的分布式IT和应用监控软件,具有丰富的监控功能和超高的灵活性。Centreon底层采用nagios监视系统运行状态和网络信息,nagios通过ndoutil模块将监控数据写入数据库,Centreon读取该数据并即时展现监控信息,同时通过Centreon可以管理和配置所有nagios。因此,使用 Centreon可以轻易搭建企业级分布式IT基础运维监控系统。
启明星辰ADLab研究员在漏洞情报跟踪中发现了Centreon的Web功能存在授权后SQL注入漏洞(编号为CVE-2022-42428),第一时间对该漏洞进行了深入分析和验证。
该漏洞在以下版本已经被修复:centreon-web-21.04.19, centreon-web-21.10.11, centreon-web-22.04.6。
漏洞分析
该漏洞的关键信息如下[1]:
The specific flaw exists within the handling of requests to modify poller broker configuration. The issue results from the lack of proper validation of a user-supplied string before using it to construct SQL queries. An attacker can leverage this vulnerability to escalate privileges to the level of an administrator.
根据关键信息,定位到开源代码对应diff [2]。
显然,www/class/centreonConfigCentreonBroker.php的第793行存在典型的SQL注入,即$values["name"]拼接到sql语句造成注入。
回溯分析可知,centreonConfigCentreonBroker.php的insertConfig方法是在www/include/configCentreonBroker/formCentreonBroker.php中被调用,且数据来源于$_POST表单数据。因此,该注入点是可被攻击的。
DIFF分析显示,该commit存在多处sql注入修复:
对路由分析,得到关键页面main.get.php,其根据传入的p参数值从数据库中查询页面,核心代码如下:
main.get.php:
......
$inputGet = [
"p" => filter_input(INPUT_GET,"p", FILTER_SANITIZE_NUMBER_INT),
"num" => filter_input(INPUT_GET,"num", FILTER_SANITIZE_NUMBER_INT),
"o" => \\HtmlAnalyzer::sanitizeAndRemoveTags($_GET["o"] ??""),
"min" => \\HtmlAnalyzer::sanitizeAndRemoveTags($_GET["min"] ??""),
"type" => \\HtmlAnalyzer::sanitizeAndRemoveTags($_GET["type"] ??""),
"search" => \\HtmlAnalyzer::sanitizeAndRemoveTags($_GET["search"] ??""),
"limit" => \\HtmlAnalyzer::sanitizeAndRemoveTags($_GET["limit"] ??"")
];
......
......
$query ="SELECT topology_parent,topology_name,topology_id,topology_url,topology_page " .
" FROM topology WHERE topology_page = "" . $p .""";
$DBRESULT = $pearDB->query($query);
$redirect = $DBRESULT->fetch();
经过调试分析,发现p=60909时调用的文件是:
www/include/configuration/configCentreonBroker/centreon-broker.php
继续跟入centreon-broker.php,核心代码如下:
......
$path ="./include/configuration/configCentreonBroker/";
......
switch ($o) {
case"a":
require_once($path ."formCentreonBroker.php");
break;// Add CentreonBroker
case"w":
require_once($path ."formCentreonBroker.php");
break;// Watch CentreonBroker
…
default:
require_once($path ."listCentreonBroker.php");
break;
}
当报文中的o参数对应值为a,包含的是formCentreonBroker.php。根据上文可知,该php会调用centreonConfigCentreonBroker.php的insertConfig方法,从而触发SQL注入。
漏洞复现
测试环境:centreon-web-21.10.1
按照官方文档[3],选择以VM虚拟机方式安装Centreon,安装完成后即可访问,默认账户为admin/centreon:
POC测试
根据上述分析可知,漏洞在配置broker poller功能处:
使用时间盲注payload,通过burpsuite抓包延时即可验证漏洞存在:
使用堆叠查询注入,在非管理员下成功修改了默认admin用户的口令:
参考链接:
[1]https://www.zerodayinitiative.com/advisories/ZDI-22-1399/
[2]https://github.com/centreon/centreon/commit/323f291431d889b53a50aa90be04ea217a18279b
[3]https://docs.centreon.com/docs/21.10/installation/installation-of-a-central-server/using-virtual-machines/
声明:本文来自ADLab,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。