CVE-2025-68614: Librenms/librenms Cross-Site Scripting Vulnerability

MODERATE
Advisory Identifier: GHSA-c89f-8g7g-59wj
CVSS 4.3
CWE-79
Published
Advisory Summary

CVE-2025-68614 is a MODERATE (CVSS 4.3) cross-site scripting vulnerability (CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')) affecting Librenms/librenms libraries in the Packagist ecosystem. The issue involves librenms alert rule api cross-site scripting vulnerability. Remediation is available by upgrading affected packages to version 25.12.0.

CVE-2025-68614 at a Glance

CVE Identifier CVE-2025-68614
GHSA Identifier GHSA-c89f-8g7g-59wj
Severity MODERATE
CVSS v3.1 Base Score 4.3
CWE Classification CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
Affected Product Librenms/librenms
Package Ecosystem Packagist
Published Date
Last Updated

Security Impact

CVSS: 4.3

The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:L/I:L/A:L).

Attack Vector Network (AV:N)
Attack Complexity Low (AC:L)
Privileges Required High (PR:H)
User Interaction Required (UI:R)
Scope Unchanged (S:U)
Confidentiality Low (C:L)
Integrity Low (I:L)
Availability Low (A:L)

How to Fix CVE-2025-68614

To remediate this vulnerability, upgrade all affected Librenms/librenms dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

librenms/librenms fixed: 25.12.0
Upgrade librenms/librenms to 25.12.0
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

inspect dependencies for librenms/librenms

How to Check if You Are Affected

To determine whether your application is affected by CVE-2025-68614, inspect your project dependencies for Librenms/librenms:

inspect dependencies for librenms/librenms

Analyze the terminal output to locate any version of Librenms/librenms in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 25.12.0), your application is affected.

Note: Verify declared build manifests and deployed runtime container environments.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting'), where the product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users. In Librenms/librenms, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

Please find POC file here https://trendmicro-my.sharepoint.com/:u:/p/kholoud_altookhy/IQCfcnOE5ykQSb6Fm-HFI872AZ_zeIJxU-3aDk0jh_eX_NE?e=zkN76d ZDI-CAN-28575: LibreNMS Alert Rule API Cross-Site Scripting Vulnerability -- CVSS ----------------------------------------- 4.3: AV:N/AC:L/PR:H/UI:R/S:U/C:L/I:L/A:L -- ABSTRACT ------------------------------------- Trend Micro's Zero Day Initiative has identified a vulnerability affecting the following products: LibreNMS - LibreNMS -- VULNERABILITY DETAILS ------------------------ * Version tested: 25.10.0 * Installer file: NA * Platform tested: NA --- ### Analysis LibreNMS Alert Rule API Stored Cross-Site Scripting # Overview Alert rules can be created or updated via LibreNMS API. The alert rule name is not properly sanitized, and can be used to inject HTML code. # Affected versions The latest version at the time of writing (25.10.0) is vulnerable. # Root cause When an alert rule is created or updated via the API, function `add_edit_rule()` in `includes/html/api_functions.inc.php` is called to add/update the entry in the database. When an alert rule is created via the web interface, HTML tags are stripped from the rule name, however this is not the case when using the API. As such, it is possible to create an alert rule where the name is: ``` <script>alert(1)</script> ``` Later, when a victim browses to the Alerts > Alert Rule page, PHP script\xc2\xa0`includes/html/print-alert/rules.php`\xc2\xa0is called. It notably includes the file\xc2\xa0`includes/html/modal/alert_rule_list.inc.php`, which returns HTML code for a modal window that searches alert rules. The modal window includes an HTML table with all rules, including their name, and an inline JavaScript that calls the\xc2\xa0`bootgrid()`\xc2\xa0function ([http://www.jquery-bootgrid.com/](http://www.jquery-bootgrid.com/)) for styling and enhancing the table. `alert_rule.list.inc.php` sanitizes the rule name with the function `e()` before including it in the table, which XML encodes all special characters. However the\xc2\xa0`bootgrid()`\xc2\xa0function rewrites the table cells content when enhancing the table, and as a side effect, XML character references are decoded. After the script updated the table, the browser now interprets the payload as HTML tags and includes the code to the DOM. # Detection guidance - inspect HTTP POST and PUT requests to a Request-URI that includes the string\xc2\xa0`/api/v0/rules` - check if the\xc2\xa0`name`\xc2\xa0JSON value includes a `<` character # PoC The proof-of-concept can be run as such: ``` python3 poc.py ip_addr -T <token> ``` -- CREDIT --------------------------------------- This vulnerability was discovered by: Simon Humbert of Trend Research of Trend Micro -- FURTHER DETAILS ------------------------------ Supporting files: If supporting files were contained with this report they are provided within a password protected ZIP file. The password is the ZDI candidate number in the form: ZDI-CAN-XXXX where XXXX is the ID number. Please confirm receipt of this report. We expect all vendors to remediate ZDI vulnerabilities within 120 days of the reported date. If you are ready to release a patch at any point leading up to the deadline, please coordinate with us so that we may release our advisory detailing the issue. If the 120-day deadline is reached and no patch has been made available we will release a limited public advisory with our own mitigations, so that the public can protect themselves in the absence of a patch. Please keep us updated regarding the status of this issue and feel free to contact us at any time: Zero Day Initiative zdi-disclosures@trendmicro.com The PGP key used for all ZDI vendor communications is available from: http://www.zerodayinitiative.com/documents/disclosures-pgp-key.asc -- INFORMATION ABOUT THE ZDI -------------------- Established by TippingPoint and acquired by Trend Micro, the Zero Day Initiative (ZDI) neither re-sells vulnerability details nor exploit code. Instead, upon notifying the affected product vendor, the ZDI provides its Trend Micro TippingPoint customers with zero day protection through its intrusion prevention technology. Explicit details regarding the specifics of the vulnerability are not exposed to any parties until an official vendor patch is publicly available. Please contact us for further details or refer to: http://www.zerodayinitiative.com -- DISCLOSURE POLICY ---------------------------- Our vulnerability disclosure policy is available online at: http://www.zerodayinitiative.com/advisories/disclosure_policy/

CVE-2025-68614 Affected Librenms/librenms Versions

1 component(s)
Fixed Versions:
25.12.0
Product / Package Ecosystem Affected Versions Fixed Version
librenms/librenms
Packagist
< 25.12.0
25.12.0

References

Frequently Asked Questions

What is CVE-2025-68614?
CVE-2025-68614 is a security vulnerability in Librenms/librenms involving LibreNMS Alert Rule API Cross-Site Scripting Vulnerability under CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting').
Which Librenms/librenms versions are affected?
Affected versions include releases prior to 25.12.0 across affected packages: librenms/librenms.
What version fixes CVE-2025-68614?
Upgrading to 25.12.0 (or the latest patched release for your respective branch) resolves the vulnerability.
Is librenms/librenms affected?
Yes, librenms/librenms is affected in releases prior to 25.12.0. Upgrade your dependency to 25.12.0 or later.
What is the CVSS score of CVE-2025-68614?
CVE-2025-68614 has a CVSS v3.1 base score of 4.3 (MODERATE) with vector string CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:L/I:L/A:L.
What CWE is associated with CVE-2025-68614?
CVE-2025-68614 is classified under CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting') (The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.).
How can I check Packagist dependencies for CVE-2025-68614?
Run the dependency tree command: 'inspect dependencies for librenms/librenms'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-c89f-8g7g-59wj",
  "modified" : "2025-12-23T18:19:16Z",
  "published" : "2025-12-23T18:19:16Z",
  "aliases" : [ "CVE-2025-68614" ],
  "summary" : "LibreNMS Alert Rule API Cross-Site Scripting Vulnerability",
  "details" : "Please find POC file here https://trendmicro-my.sharepoint.com/:u:/p/kholoud_altookhy/IQCfcnOE5ykQSb6Fm-HFI872AZ_zeIJxU-3aDk0jh_eX_NE?e=zkN76d\n\nZDI-CAN-28575: LibreNMS Alert Rule API Cross-Site Scripting Vulnerability\n\n-- CVSS -----------------------------------------\n\n4.3: AV:N/AC:L/PR:H/UI:R/S:U/C:L/I:L/A:L\n\n-- ABSTRACT -------------------------------------\n\nTrend Micro's Zero Day Initiative has identified a vulnerability affecting the following products:\nLibreNMS - LibreNMS\n\n-- VULNERABILITY DETAILS ------------------------\n* Version tested:  25.10.0\n* Installer file:  NA\n* Platform tested: NA\n\n---\n\n### Analysis\n\nLibreNMS Alert Rule API Stored Cross-Site Scripting\n\n# Overview\nAlert rules can be created or updated via LibreNMS API. The alert rule name is not properly sanitized, and can be used to inject HTML code.\n\n# Affected versions\nThe latest version at the time of writing (25.10.0) is vulnerable.\n\n# Root cause\nWhen an alert rule is created or updated via the API, function `add_edit_rule()` in `includes/html/api_functions.inc.php` is called to add/update the entry in the database. When an alert rule is created via the web interface, HTML tags are stripped from the rule name, however this is not the case when using the API.\n\nAs such, it is possible to create an alert rule where the name is:\n```\n<script>alert(1)</script>\n```\n\nLater, when a victim browses to the Alerts > Alert Rule page, PHP script\\xc2\\xa0`includes/html/print-alert/rules.php`\\xc2\\xa0is called. It notably includes the file\\xc2\\xa0`includes/html/modal/alert_rule_list.inc.php`, which returns HTML code for a modal window that searches alert rules.\n\nThe modal window includes an HTML table with all rules, including their name, and an inline JavaScript that calls the\\xc2\\xa0`bootgrid()`\\xc2\\xa0function ([http://www.jquery-bootgrid.com/](http://www.jquery-bootgrid.com/)) for styling and enhancing the table.\n\n`alert_rule.list.inc.php` sanitizes the rule name with the function `e()` before including it in the table, which XML encodes all special characters. However the\\xc2\\xa0`bootgrid()`\\xc2\\xa0function rewrites the table cells content when enhancing the table, and as a side effect, XML character references are decoded. After the script updated the table, the browser now interprets the payload as HTML tags and includes the code to the DOM.\n\n# Detection guidance\n- inspect HTTP POST and PUT requests to a Request-URI that includes the string\\xc2\\xa0`/api/v0/rules`\n- check if the\\xc2\\xa0`name`\\xc2\\xa0JSON value includes a `<` character\n\n# PoC\nThe proof-of-concept can be run as such:\n```\npython3 poc.py ip_addr -T <token>\n```\n\n\n-- CREDIT ---------------------------------------\nThis vulnerability was discovered by:\nSimon Humbert of Trend Research of Trend Micro\n\n-- FURTHER DETAILS ------------------------------\n\nSupporting files:\n\n\nIf supporting files were contained with this report they are provided within a password protected ZIP file. The password is the ZDI candidate number in the form: ZDI-CAN-XXXX where XXXX is the ID number.\n\nPlease confirm receipt of this report. We expect all vendors to remediate ZDI vulnerabilities within 120 days of the reported date. If you are ready to release a patch at any point leading up to the deadline, please coordinate with us so that we may release our advisory detailing the issue. If the 120-day deadline is reached and no patch has been made available we will release a limited public advisory with our own mitigations, so that the public can protect themselves in the absence of a patch. Please keep us updated regarding the status of this issue and feel free to contact us at any time:\n\nZero Day Initiative\nzdi-disclosures@trendmicro.com\n\nThe PGP key used for all ZDI vendor communications is available from:\n\n  http://www.zerodayinitiative.com/documents/disclosures-pgp-key.asc\n\n-- INFORMATION ABOUT THE ZDI --------------------\nEstablished by TippingPoint and acquired by Trend Micro, the Zero Day Initiative (ZDI) neither re-sells vulnerability details nor exploit code. Instead, upon notifying the affected product vendor, the ZDI provides its Trend Micro TippingPoint customers with zero day protection through its intrusion prevention technology. Explicit details regarding the specifics of the vulnerability are not exposed to any parties until an official vendor patch is publicly available.\n\nPlease contact us for further details or refer to:\n\n  http://www.zerodayinitiative.com\n\n-- DISCLOSURE POLICY ----------------------------\n\nOur vulnerability disclosure policy is available online at:\n\n  http://www.zerodayinitiative.com/advisories/disclosure_policy/",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:L/I:L/A:L"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "Packagist",
      "name" : "librenms/librenms"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "25.12.0"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/librenms/librenms/security/advisories/GHSA-c89f-8g7g-59wj"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2025-68614"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/librenms/librenms/commit/ebe6c79bf4ce0afeb575c1285afe3934e44001f1"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/librenms/librenms"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-79" ],
    "severity" : "MODERATE",
    "github_reviewed" : true,
    "github_reviewed_at" : "2025-12-23T18:19:16Z",
    "nvd_published_at" : "2025-12-23T00:15:43Z"
  }
}