漏洞概述

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 CentreonBrokerdefault: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。