Media

LibreNMS has a Stored XSS in Custom OID - unit parameter missing strip_tags()

  • Publicada: 18.02.2026
  • Actualizado: 11.10.2026 10:22

Summary

The unit parameter in Custom OID functionality lacks strip_tags() sanitization while other fields (name, oid, datatype) are sanitized. The unsanitized value is stored in the database and rendered without HTML escaping, allowing Stored XSS.

Details

Vulnerable Input Processing (includes/html/forms/customoid.inc.php lines 18-21):

php
$name = strip_tags((string) $_POST['name']);       // line 18 - SANITIZED
$oid = strip_tags((string) $_POST['oid']);         // line 19 - SANITIZED
$datatype = strip_tags((string) $_POST['datatype']);  // line 20 - SANITIZED
$unit = $_POST['unit'];                            // line 21 - NOT SANITIZED!

Vulnerable Output (graphs/customoid.inc.php lines 13-20):

php
$customoid_unit = $customoid['customoid_unit'];  // Retrieved from DB
$customoid_current = \LibreNMS\Util\Number::formatSi(...) . $customoid_unit;
echo "...$customoid_current...";  // ECHOED WITHOUT ESCAPING!

PoC

python
#!/usr/bin/env python3
"""
XSS test for LibreNMS Custom OID - unit parameter
"""

import html as html_module
import re

def strip_tags(value):
    return re.sub(r'<[^>]*?>', '', str(value))

# Simulate form processing (customoid.inc.php lines 18-21)
test_inputs = {
    'name': '<script>alert(1)</script>Test OID',
    'oid': '1.3.6.1.4.1.2021.10.1.3.1',
    'datatype': 'GAUGE',
    'unit': '<script>alert("XSS")</script>',
}

name = strip_tags(test_inputs['name'])      # Sanitized
oid = strip_tags(test_inputs['oid'])        # Sanitized
datatype = strip_tags(test_inputs['datatype'])  # Sanitized
unit = test_inputs['unit']                   # NOT SANITIZED!

print("Input Processing Analysis:")
print(f"  name (strip_tags):     {name}")
print(f"  oid (strip_tags):      {oid}")
print(f"  datatype (strip_tags): {datatype}")
print(f"  unit (NO strip_tags):  {unit}")
print()
print("*** VULNERABILITY: 'unit' parameter has NO strip_tags()! ***")

# Test XSS payloads
payloads = [
    '<script>alert("XSS")</script>',
    '<img src=x onerror=alert(1)>',
    '<svg onload=alert(1)>',
]

print("\nXSS Payload Tests:")
for payload in payloads:
    escaped = html_module.escape(payload)
    has_xss = '<script>' in payload or 'onerror=' in payload.lower()
    print(f"  Payload: {payload}")
    print(f"    Raw (vulnerable): Contains executable code: {has_xss}")
    print(f"    Escaped (safe):   {escaped}")

Expected Output

Input Processing Analysis:
  name (strip_tags):     alert(1)Test OID
  oid (strip_tags):      1.3.6.1.4.1.2021.10.1.3.1
  datatype (strip_tags): GAUGE
  unit (NO strip_tags):  <script>alert("XSS")</script>

*** VULNERABILITY: 'unit' parameter has NO strip_tags()! ***

Impact

  • Attack Vector: User with device edit permissions sets malicious Unit value
  • Exploitation: XSS payload stored in database, executes for all users viewing device graphs
  • Consequences:
    • Session hijacking via cookie theft
    • Admin account takeover
    • Malicious actions on behalf of victims
    • Persistent attack affecting all users
  • Affected Users: All LibreNMS installations with Custom OID feature

Software afectado

Haz clic en una tecnología para ver todas sus vulnerabilidades.

PlataformaPaqueteVersiones vulnerablesCorregida en
Paquete de Composer librenms/librenms >= 24.10.0, < 26.2.0 26.2.0

Referencias

Puntuación CVSS 5.4/10
Vector CVSS
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
Debilidad (CWE)
CWE-116, CWE-79
Plataforma
Composer
Paquete
librenms/librenms
Publicada
18.02.2026
Actualizado
11.10.2026 10:22

Fuentes y licencias

OSV / GitHub Advisory Database - GHSA-fqx6-693c-f55g - CC BY 4.0

Historial de vulnerabilidades: librenms/librenms

Todas las vulnerabilidades publicadas de este paquete (Paquete de Composer), de la más reciente a la más antigua. Muestra si es un fallo aislado o un paquete que hay que vigilar.

Todas (106) en el archivo
Entradas en total
106
Primera → última
10.2019 08.2026
Sin corrección
6
Explotada en ataques
0

Distribución por gravedad

  • Crítica 5
  • Alta 39
  • Media 56
  • Baja 6

Divulgaciones por año

  1. 2019: 6
  2. 2020: 0
  3. 2021: 7
  4. 2022: 26
  5. 2023: 12
  6. 2024: 24
  7. 2025: 15
  8. 2026: 16
Gravedad:
  1. Alta · 7.1 CVE-2026-84192 < 26.5.0 26.5.0
  2. LibreNMS has a Stored XSS in Custom OID - unit parameter missing strip_tags() esta entrada
    Media · 5.4 CVE-2026-27016 >= 24.10.0, < 26.2.0 26.2.0
  3. Alta · 7.1 CVE-2020-36947 <= 1.46 sin corrección
  4. Crítica · 9.1 CVE-2024-51092 < 24.10.0 24.10.0
  5. Alta · 7.8 CVE-2023-5591 < 23.10.0 23.10.0
  6. Alta · 8.4 CVE-2023-5060 < 23.9.1 23.9.1
  7. Alta · 7.6 CVE-2023-4347 < 23.8.0 23.8.0
  8. Alta · 8.8 CVE-2022-3525 < 22.10.0 22.10.0
  9. Alta · 7.6 CVE-2022-4068 < 22.10.0 22.10.0
  10. Crítica · 9.8 CVE-2022-4070 < 22.10.0 22.10.0
  11. Alta CVE-2022-29712 < 22.4.0 22.4.0
  12. Crítica · 9.8 CVE-2019-10665 <= 1.47 sin corrección
  13. Crítica · 9.8 CVE-2018-20434 = 1.46 sin corrección
  14. Alta · 8.8 CVE-2018-20678 < 1.65 1.65
  15. Alta · 7.1 CVE-2022-0580 < 22.2.0 22.2.0
  16. Alta · 7.1 CVE-2022-0587 < 22.2.0 22.2.0
  17. Crítica · 9.8 CVE-2021-44278 <= 21.11.0 sin corrección
  18. Alta · 8.8 CVE-2020-15877 < 1.65.1 1.65.1
Mostrar más (5) Mostrando 40 de 45

Identifica las vulnerabilidades de tu aplicación

Con la integración de DockRay y el inventario de software activado, DockRay compara las versiones notificadas de los componentes con las vulnerabilidades conocidas y avisa de las coincidencias confirmadas. La cobertura depende de la tecnología compatible y de los avisos disponibles.

Conectar tu aplicación
Newsletter DockRay

La seguridad de tus aplicaciones en tu correo

Vulnerabilidades importantes, recomendaciones concretas y consejos prácticos para tus aplicaciones. Elige tus tecnologías y sigue lo que importa para tu proyecto.

  • Un resumen diario de nuevas vulnerabilidades, también las críticas.
  • Avisos sobre actualizaciones importantes.
  • Consejos prácticos sobre seguridad y monitorización de aplicaciones.

Déjalo vacío para recibir avisos de todas las tecnologías.

Suscripción gratuita. Date de baja con un clic en cualquier correo.