---
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'
---

## Overview

### Summary
The `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.

### CVSS
`CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N` — **4.8 Medium**

### Details
```php
// graphs.inc.php:194
echo LibrenmsConfig::get('graph_descr.' . $vars['type']);
```

### PoC
```
PUT /settings/graph_descr.device_processor
{"value": "<img src=x onerror=\"alert('ADV-15')\">"}

GET /graphs?type=device_processor
→ <img src=x onerror="alert('ADV-15')">
```

### Fix
```php
echo htmlspecialchars(LibrenmsConfig::get('graph_descr.' . $vars['type']), ENT_QUOTES, 'UTF-8');
```

### Prerequisite
Admin session to set the config value.

## Affected packages

- `librenms/librenms < 26.7.0`

## Remediation

Upgrade to a patched release:

- `librenms/librenms 26.7.0`
