Skip to main content

linuxfabrik-lib EUVDEUVD-2026-62185

| CVE-2026-73974 MEDIUM
Path Traversal (CWE-22)
2026-08-18 https://github.com/Linuxfabrik/monitoring-plugins GHSA-rh9c-rqvg-f7pr
5.5
CVSS 3.1 · Vendor: https://github.com/Linuxfabrik/monitoring-plugins
Share

Severity by source

Vendor (https://github.com/Linuxfabrik/monitoring-plugins) PRIMARY
5.5 MEDIUM
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
vuln.today AI
5.5 MEDIUM

Local attack vector and low-privilege nagios account required; exploitation yields full confidentiality breach but no write access or availability impact.

3.1 AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
4.0 AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (https://github.com/Linuxfabrik/monitoring-plugins).

CVSS VectorVendor: https://github.com/Linuxfabrik/monitoring-plugins

CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
None
Availability
None

Lifecycle Timeline

3
Source Code Evidence Fetched
Aug 19, 2026 - 04:45 vuln.today
Analysis Generated
Aug 19, 2026 - 04:45 vuln.today
CVE Published
Aug 18, 2026 - 21:18 cve.org
MEDIUM 5.5

DescriptionCVE.org

Summary

Every Linuxfabrik check plugin that supports the shared --test argument (routed through lib.lftest.test()) will, when --test is supplied, treat the first CSV element as a filesystem path and read its full contents as the plugin's simulated STDOUT - running as root when the plugin is invoked through the shipped nagios/icinga sudoers allowlist. --test is a live production argument (centrally mapped to argparse.SUPPRESS, so it is hidden from --help but still accepted on the command line), not a build-time-only gate. This yields an arbitrary root file-read primitive (full disclosure on deb-updates; filtered disclosure / existence-and-readability oracle on ~22 other whitelisted plugins), i.e. local privilege escalation from the nagios account to root.

Root Cause

  • lib.lftest.test(args) (lftest.py lines 659-664): stdout = args[0]; if stdout and os.path.isfile(stdout): _, stdout = disk.read_file(stdout). Element[1] (stderr channel) is read the same way. There is no path confinement on the supplied path.
  • check-plugins/deb-updates/deb-updates: --test is registered with type=lib.args.csv (lines 78-82). When supplied, control flows to stdout, _, retc = lib.lftest.test(args.TEST) (line 143), bypassing the apt path (if args.TEST is None: at 121). Each returned line is stored as a package row and, under the default --query='1' (WHERE 1, matches all rows), every row is printed via '\n* '.join([row['package'] ...])lib.base.oao(...).
  • The same --test/lib.lftest.test() mechanism exists identically on ~22 whitelisted plugins (e.g. docker-info), each performing a root open()/read of the attacker-named path. Disclosure degree varies by each plugin's downstream parser: full (deb-updates), filtered (docker-info echoes lines containing warning:/error:; openvpn-client-list echoes CLIENT_LIST lines), or existence/readability oracle (JSON parsers).

Impact

An attacker controlling the low-privilege nagios/icinga account (the documented threat model for the shipped sudoers file - same precondition as CVE-2026-52817) obtains the full contents of any root-readable file via deb-updates (e.g. /etc/shadow, /root/.ssh/id_*, TLS keys, cloud credentials), plus a fleet-wide root file existence/readability oracle and filtered content leak via the other plugins → local privilege escalation to root.

Proof of Concept

Full disclosure (deb-updates):

sudo /usr/lib64/nagios/plugins/deb-updates --test=/etc/shadow,,0

Filtered disclosure / oracle (docker-info, target routed to the stderr channel that gets echoed):

sudo /usr/lib64/nagios/plugins/docker-info --test="dummy,/etc/shadow,0"

Attack Chain

  1. Entry: sudo /usr/lib64/nagios/plugins/deb-updates --test=/etc/shadow,,0
  • Action: the nagios user invokes the whitelisted plugin as root with a --test CSV whose element[0] is the target path and retc=0.
  • Guard: sudoers (Debian.sudoers:3) lists the binary only; --test is not gated to test builds.
  • Bypass proof: CONTRIBUTING.md documents --test as centrally mapped to argparse.SUPPRESS - hidden from --help but still accepted on the command line; lib.args.csv splits /etc/shadow,,0 into ['/etc/shadow','','0'].
  1. Sink: lib.lftest.test(args.TEST) (deb-updates:143) reads element[0] as a file, as root.
  • Guard: none - no path confinement on element[0].
  • Bypass proof (from lib source): lftest.py:661-664: stdout = args[0]; if stdout and os.path.isfile(stdout): _, stdout = disk.read_file(stdout) - element[0], if it exists on disk, is opened and its contents returned as stdout. retc=0 (element[2]) so there is no early cu() abort.
  1. Store + query: each line → lib.db_sqlite.insert(conn, {'package': item}, ...); default QUERY='1'SELECT * FROM deb_updates WHERE 1.
  • Guard: --only-critical or a restrictive --query would filter, but both default to permissive (ONLY_CRITICAL=False, QUERY='1').
  • Bypass proof: attacker passes neither → all rows selected.
  1. Disclosure: msg += '\n* '.join([row['package'] for row in result])lib.base.oao(...) → stdout.
  • Guard: none.
  • Bypass proof: with len(result) > 0 the branch prints every row (every file line).
  1. Impact: full contents of any root-readable file disclosed to the nagios user → root. On the ~22 other --test plugins the same primitive yields a filtered leak / universal root file existence-and-readability oracle.

Bypass Evidence

  • lib.lftest.test() file-read behavior verified directly from linuxfabrik-lib source (lftest.py:659-664, disk.read_file(stdout) when os.path.isfile(stdout)).
  • --test registration (type=lib.args.csv) and the stdout, _, retc = lib.lftest.test(args.TEST) call verified on the latest release tag v6.0.0 at check-plugins/deb-updates/deb-updates:143 (GitHub contents API); default QUERY='1' confirmed.
  • No path-confinement guard exists on the --test path element in either the plugin or lib.lftest.

Affected Versions

<= 6.0.0 (latest release; --test/lib.lftest.test() flow present on tag v6.0.0). Not covered by any existing advisory (none reference --test or arbitrary file read).

Suggested Fix

Compile --test out of production builds (or gate it behind an explicit build/dev flag so it is not accepted at runtime), OR confine the --test path element(s) to a dedicated fixtures directory via realpath() + containment check before disk.read_file(). As defense-in-depth, constrain the sudoers entries to specific argument values so --test cannot be supplied to a root-run plugin.

--- Reported by zx (Jace)

AnalysisAI

Arbitrary root file read in Linuxfabrik monitoring plugins allows a local attacker controlling the nagios or icinga account to exfiltrate any root-readable file by exploiting the hidden but permanently live --test argument accepted by all sudoers-whitelisted check plugins. Invoking the deb-updates plugin via sudo with --test=/etc/shadow,,0 causes lftest.py to read the supplied path as root with no path confinement and echo its full contents to stdout; approximately 22 additional whitelisted plugins yield filtered leaks or file-existence oracles through the same mechanism. …

Unlock full vulnerability intelligence

  • Risk assessment & exploitation conditions
  • Attack chain visualization
  • Remediation with exact patch versions
  • Threat intelligence from 22 sources
  • Personal watchlist & email alerts

Free forever · No credit card required

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata

Access
Obtain nagios/icinga account shell access
Delivery
Invoke sudoers-whitelisted plugin via sudo with --test=<target_path>,,0
Exploit
lftest.py reads supplied path as root without path confinement
Execution
Plugin parses file contents as operational output data
Impact
Full or filtered file contents echoed to attacker stdout

Vulnerability AssessmentAI

Exploitation Exploitation requires all three of the following: (1) the attacker controls the nagios or icinga low-privilege OS account - this is the explicitly documented threat model for the shipped sudoers allowlist and the same precondition as CVE-2026-52817; (2) the target host uses the Linuxfabrik-shipped sudoers allowlist (e.g., Debian.sudoers) granting passwordless sudo for the plugin binaries without argument-level restrictions; and (3) linuxfabrik-lib version 6.0.0 or earlier is installed. … Additional conditions and limiting factors are described in the full assessment.
Risk Assessment The provided CVSS 3.1 base score of 5.5 (Medium) correctly captures the local attack vector and low-privilege prerequisite, but it materially understates the practical impact severity: the capability to read /etc/shadow, root SSH private keys, TLS certificate private keys, or cloud credential files at will constitutes a near-direct path to full system compromise and lateral movement across the monitored fleet, far beyond what a Medium label typically implies. … Full risk analysis with EPSS, KEV, and SSVC signal comparison available after sign-in.
Exploit Scenario An attacker with shell access as the nagios user runs the single command sudo /usr/lib64/nagios/plugins/deb-updates --test=/etc/shadow,,0 against a host using the shipped sudoers allowlist; the plugin invokes lftest.py as root, which reads /etc/shadow in full and returns its contents as simulated stdout, after which deb-updates inserts each line as a package row in SQLite and prints all rows under the default permissive WHERE 1 query, delivering the complete shadow password database to the attacker's terminal. A working proof-of-concept for this exact command is publicly disclosed in the GHSA-rh9c-rqvg-f7pr advisory, and a variant routing the target path through the stderr channel of docker-info provides filtered line-level disclosure of the same file.
Remediation Upgrade linuxfabrik-lib to version 6.1.0 or later (vendor-released patch confirmed; patching commit d665042c55fae83a295ebc0023e8b77f6c473a28, release tag at https://github.com/Linuxfabrik/lib/releases/tag/v6.1.0), and upgrade monitoring-plugins to version 7.0.0 or later (patching commit f6680a9e4b39569f318feefdb2f51e5d18c7dad5, release at https://github.com/Linuxfabrik/monitoring-plugins/releases/tag/v7.0.0). … Detailed patch versions, workarounds, and compensating controls in full report.

Threat intelligence, references, and detailed analysis are available after sign-in.

More in Docker

View all
CVE-2024-55964 CRITICAL POC
9.8 Mar 26

An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl

CVE-2019-5736 HIGH POC
8.6 Feb 11

runc through version 1.0-rc6 (used in Docker before 18.09.2) contains a container escape vulnerability that allows attac

CVE-2023-32077 HIGH POC
7.5 Aug 24

Netmaker makes networks with WireGuard. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no a

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2023-5815 HIGH POC
8.1 Nov 22

The News & Blog Designer Pack - WordPress Blog Plugin - (Blog Post Grid, Blog Post Slider, Blog Post Carousel, Blog Post

CVE-2026-66384 MEDIUM POC
5.3 Aug 12

Path traversal in JFrog Artifactory (CWE-22) enables an authenticated low-privilege user to write data outside the inten

CVE-2014-9357 CRITICAL
10.0 Dec 16

Docker 1.3.2 allows remote attackers to execute arbitrary code with root privileges via a crafted (1) image or (2) build

CVE-2026-52806 CRITICAL POC
9.9 Jun 23

Remote code execution in Gogs through 0.14.2 allows authenticated users (and unauthenticated attackers on default-config

CVE-2026-56274 HIGH POC
8.7 Jun 23

Remote code execution in Flowise before 3.1.2 allows any authenticated user (or API caller with chatflow view/update per

CVE-2026-34156 CRITICAL POC
9.9 Mar 30

Remote code execution in NocoBase Workflow Script Node (npm @nocobase/plugin-workflow-javascript) allows authenticated l

CVE-2019-15752 HIGH POC
7.8 Aug 28

Docker Desktop Community Edition before 2.1.0.1 allows local users to gain privileges by placing a Trojan horse docker-c

CVE-2025-34221 CRITICAL POC
10.0 Sep 29

Vasion Print (formerly PrinterLogic) Virtual Appliance Host prior to version 25.2.169 and Application prior to version 2

Share

EUVD-2026-62185 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy