Skip to content

GHSA-fpq5-4vwm-78x4 CVE-2023-48294

LibreNMS has Broken Access control on Graphs Feature

Medium Packagist
Severity
4.3 / 10
Medium · CVSS 3.1
Exploit chance (EPSS)
0.69%
Chance of exploitation in the next 30 days. Higher than 52.99% of scored vulnerabilities.
Known exploited
No
Not in CISA's catalog
Weakness
CWE-200 Exposure of Sensitive Information to an Unauthorized Actor
Fix
23.11.0
Upgrade librenms/librenms to this version or later

Description

Summary

This vulnerability occurs when application is not checking access of each type of users as per their role and it autorizing the users to access any feature. When user access his Device dashboard in librenms, one request is going to graph.php to access image of graphs generated on the particular Device. This request can be accessed by lower privileged users as well and they can enumerate devices on librenms with their id or hostname.

Details

Give all details on the vulnerability. Pointing to the incriminated source code is very helpful for the maintainer.

PoC

  1. Login with Lower privilege user

  2. Go to /graph.php?width=150&height=45&device=1&type=device_ping_perf&from=1699022192&legend=no&bg=FFFFFF00&popup_title=ICMP+Response

  3. If its showing image with "device*ping_perf" which confirms that there is device with id 1

  4. Now you can change device parameter in above URL with hostname to check if that Hostname/IP exist or not like http://127.0.0.1:8000/graph.php?width=150&height=45&device=127.0.0.1&type=device_ping_perf&from=1699022192&legend=no&bg=FFFFFF00&popup_title=ICMP+Response

  5. If device hostname doesn't exist then it should show 500 error

Check attached screenshots for more info

Vulnerable code: https://github.com/librenms/librenms/blob/fa93034edd40c130c2ff00667ca2498d84be6e69/html/graph.php#L19C1-L25C2

Above is vulnerable line of code from Line number 19-25 This is not checking privilege of users to access any device hostname, its just checking if user is authenticated or not

Impact

Low privilege users can see all devices registered by admin users by using this method

Solution

Implement privilege access control feature to check if low privilege user have access or not.

Screenshots:-

<img width="967" alt="Screenshot 2023-11-04 at 8 31 15 PM" src="https://user-images.githubusercontent.com/31764504/281085588-1c5d81b9-83d7-4ba8-baf3-03c95a99cefe.png"> <img width="973" alt="Screenshot 2023-11-04 at 8 31 36 PM" src="https://user-images.githubusercontent.com/31764504/281085614-7a4d13b0-d316-4d24-bdd2-05c3a80ffd59.png"> <img width="955" alt="Screenshot 2023-11-04 at 8 31 48 PM" src="https://user-images.githubusercontent.com/31764504/281085629-43aa2b6f-7b18-415f-8001-519bda45f918.png">

Affected versions

Packagist

PackageVulnerableFixed in
librenms/librenms
< 23.11.0
23.11.0

How to fix

Move to the fixed version or later with your package manager, update the lockfile, and run your tests. If the package only arrives through another dependency, upgrade that dependency first. If none of its releases pulls a fixed version yet, force the version with your package manager's override.

librenms/librenms Packagist → 23.11.0

composer
composer require librenms/librenms:^23.11.0

Severity breakdown

CVSS 3.1 4.3

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N

Attack vector
Network
Attack complexity
Low
Privileges required
Low
User interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
None
Availability
None

Weakness

CWE-200: Exposure of Sensitive Information to an Unauthorized Actor

The product exposes sensitive information to an actor that is not explicitly authorized to have access to that information.

How to prevent it
  • Architecture and Design: Compartmentalize the system to have "safe" areas where trust boundaries can be unambiguously drawn. Do not allow sensitive data to go outside of the trust boundary and always be careful when interfacing with a compartment outside of the safe area. Ensure that appropriate compartmentalization is built into the system design, and the compartmentalization allows for and reinforces privilege separation functionality. Architects and designers should rely on the principle of least privilege to decide the appropriate time to use privileges and the time to drop privileges.

References

Timeline

  1. Published
  2. Last updated by the source
  3. Latest EPSS score
AdvisorySeverityWhy it's related
GHSA-7w8c-qgxg-m7jx
LibreNMS — Stored XSS via SNMP/Syslog Data in Legacy Templates
High Also affects librenms/librenms
GHSA-7gww-x7fh-jf9j
LibreNMS: SSRF-driven stored XSS via Oxidized API response fields in device showconfig page
Critical Also affects librenms/librenms
GHSA-7cj5-v4pp-v632
LibreNMS: Stored XSS via graph_descr admin config settings echoed without escaping to all authenticated users
Medium Also affects librenms/librenms
GHSA-jf24-8g2h-2wg7
LibreNMS Vulnerable to Remote Code Execution via AboutController
High Also affects librenms/librenms
GHSA-c9fv-cgmm-2wg7
LibreNMS Vulnerable to Remote Code Execution by Signal Alert Transportation module
High Also affects librenms/librenms
GHSA-jmqm-f8q4-v7wx
LibreNMS: Reflected XSS via Proxmox instance/vmid GET parameters injected into document.title JavaScript assignment
Medium Also affects librenms/librenms
GHSA-5gm9-622f-qcg5
LibreNMS: Cross-Site Scripting in ShowConfigController
Medium Also affects librenms/librenms
GHSA-pr3g-phhr-h8fh
LibreNMS is Vulnerable to Remote Code Execution by Arbitrary File Write
High Also affects librenms/librenms
Is this in your code?

MergeHarbor checks every repository's dependencies against this database, ranks what matters by exploitability and reachability, routes it to the owning team and opens the fix pull request.

Check your repos with MergeHarbor