LibreNMS CVE-2026-45694
MEDIUMSeverity by source
AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
Network-accessible endpoint (AV:N), attacker requires a valid account (PR:L), victim must click crafted link (UI:R), browser context escape constitutes scope change (S:C), no availability impact.
Primary rating from Vendor (https://github.com/librenms/librenms).
CVSS VectorVendor: https://github.com/librenms/librenms
Lifecycle Timeline
2DescriptionCVE.org
Summary
LegacyController.php:75 writes the page title into a document.title JS assignment using string interpolation. apps/proxmox.inc.php pushes $vars['instance'] and $vars['vmid'] (GET params, only strip_tags() applied) directly into $pagetitle. A single quote terminates the JS string, executing arbitrary script.
Details
// LegacyController.php:75
$html .= "<script>\ndocument.title = '$title';\n</script>";
// proxmox.inc.php:38,42
$pagetitle[] = $instance; // GET ?instance=
$pagetitle[] = $vars['vmid']; // GET ?vmid=PoC
http://target/apps?app=proxmox&instance=%27%3Balert%28document.cookie%29%3B//
Confirmed in response:
document.title = 'Apps - Proxmox - ';alert(document.cookie);// - LibreNMS';Fix
// LegacyController.php:75
$html .= "<script>\ndocument.title = " . json_encode($title) . ";\n</script>";Also wrap $instance and $vars['vmid'] in htmlspecialchars() in proxmox.inc.php.
Prerequisite
Any authenticated session. Victim must follow a crafted link.
AnalysisAI
Reflected XSS in LibreNMS 26.4.0 and earlier allows an authenticated attacker to inject arbitrary JavaScript into any victim's browser session by embedding a payload in the GET parameters instance or vmid of the Proxmox application module. The root cause is unsafe PHP string interpolation of unsanitized GET input directly into a document.title JavaScript assignment in LegacyController.php:75, bypassed with a simple single-quote injection. A working proof-of-concept demonstrating cookie exfiltration is publicly documented in the GitHub security advisory GHSA-jmqm-f8q4-v7wx; this CVE is not in CISA KEV.
Technical ContextAI
LibreNMS is a PHP-based open-source network monitoring system (composer package librenms/librenms, CPE: pkg:composer/librenms_librenms). The vulnerability class is CWE-79 (Improper Neutralization of Input During Web Page Generation - Reflected XSS). In LegacyController.php at line 75, the shared page-title rendering path outputs: $html .= "<script>\ndocument.title = '$title';\n</script>"; - placing the title value inside a single-quoted JavaScript string with no JS-context escaping. The Proxmox application integration in apps/proxmox.inc.php (lines 38 and 42) populates $pagetitle with the raw values of the GET parameters ?instance= and ?vmid=, applying only strip_tags() - which strips HTML tags but preserves single quotes, semicolons, and all other JavaScript metacharacters. Because these values flow into $title and then into the JavaScript string context, a single quote in the input terminates the JS string literal and allows arbitrary script injection. The correct fix is to use json_encode() for the JavaScript context (ensuring proper escaping of all string metacharacters) and htmlspecialchars() for HTML attribute contexts in proxmox.inc.php.
RemediationAI
Upgrade to LibreNMS 26.5.0, released 2026-05-18, which resolves the issue by replacing the unsafe string interpolation in LegacyController.php:75 with json_encode($title) for proper JavaScript-context escaping, and by adding htmlspecialchars() around $instance and $vars['vmid'] in proxmox.inc.php. The release is available at https://github.com/librenms/librenms/releases/tag/26.5.0. If immediate upgrade is not feasible, block access to the Proxmox application endpoint (/apps?app=proxmox) at the web server or reverse-proxy layer via ACL rule; this eliminates the attack surface for this specific module at the cost of disabling Proxmox monitoring capability until the patch is applied. Additionally, restricting LibreNMS web access to a trusted internal network or VPN reduces the social engineering vector by limiting who can deliver crafted URLs to authenticated users.
In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it
sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not
(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear
The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by
ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C
Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au
Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c
Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows
The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1
Same weakness CWE-79 – Cross-site Scripting (XSS)
View allShare
External POC / Exploit Code
Leaving vuln.today
GHSA-jmqm-f8q4-v7wx