CVE-2026-73974
Python vulnerability analysis and mitigation

Overview

CVE-2026-73974 is an arbitrary root file read vulnerability in Linuxfabrik's linuxfabrik-lib Python library and associated Linuxfabrik Monitoring Plugins, enabling local privilege escalation from the nagios/icinga account to root. The flaw exists in lib.lftest.test(), which accepts a hidden but live --test command-line argument that treats its first CSV element as an unrestricted filesystem path and reads its contents as simulated plugin output. Affected versions are linuxfabrik-lib < 6.1.0 and Linuxfabrik Monitoring Plugins < 7.0.0. The vulnerability was disclosed on August 18, 2026, and carries a CVSS v3.1 base score of 5.5 (Medium) (GitHub Advisory).

Technical details

The root cause is a path traversal flaw (CWE-22) combined with improper privilege management (CWE-269) in lftest.py lines 659–664, where lib.lftest.test(args) reads args[0] (and args[1] for stderr) as a filesystem path via disk.read_file() with no path confinement. Because the --test argument is registered via argparse.SUPPRESS (hidden from --help but fully accepted at runtime), and the shipped nagios/icinga sudoers allowlist grants passwordless sudo to the affected plugins, an attacker with the nagios account can supply an arbitrary absolute path (e.g., /etc/shadow) as the --test CSV element. The deb-updates plugin provides full file disclosure; approximately 22 other plugins expose filtered content or a root file existence/readability oracle; network-bonding and openstack-swift-stat had direct read paths (open() and lib.disk.read_file()) that bypassed the helper entirely (GitHub Advisory, lib fix commit).

Impact

Successful exploitation allows a local attacker controlling the low-privilege nagios or icinga monitoring account to read the full contents of any root-readable file on the system — including /etc/shadow, SSH private keys, TLS certificates, and cloud credentials — without any additional authentication. Beyond full disclosure via deb-updates, the ~22 other affected plugins provide filtered content leaks and a universal root file existence/readability oracle, enabling reconnaissance for further privilege escalation. There is no integrity or availability impact, but the confidentiality impact is rated High, and the primitive is sufficient to achieve effective local privilege escalation to root (GitHub Advisory).

Exploitability

A public proof-of-concept is included in the GitHub Security Advisory itself, demonstrating exploitation with a single command: sudo /usr/lib64/nagios/plugins/deb-updates --test=/etc/shadow,,0. The EPSS score is 0.0 as of disclosure, and the vulnerability is not listed in the CISA KEV catalog. No in-the-wild exploitation or threat actor attribution has been reported. Exploitation requires local access as the nagios/icinga account and a system configured with the shipped sudoers allowlist, which is the documented default deployment model (GitHub Advisory).

Exploitation steps

  1. Gain access to the nagios/icinga account: Obtain a shell as the nagios or icinga service account, which is the documented low-privilege account used by Linuxfabrik Monitoring Plugins in production environments.
  2. Confirm sudoers allowlist: Verify that the shipped sudoers file grants passwordless sudo to the target plugin (e.g., /usr/lib64/nagios/plugins/deb-updates) without restricting arguments.
  3. Identify target file: Choose a root-readable file to exfiltrate, such as /etc/shadow, /root/.ssh/id_rsa, or a TLS private key.
  4. Invoke the plugin with the --test argument: Run the following command to read the target file as root via the deb-updates plugin's full-disclosure path:
    sudo /usr/lib64/nagios/plugins/deb-updates --test=/etc/shadow,,0
    The CSV argument ['/etc/shadow', '', '0'] sets element[0] as the file path, element[1] as empty stderr, and element[2] as return code 0.
  5. Receive file contents on stdout: The plugin reads /etc/shadow as root via lib.lftest.test()disk.read_file(), stores each line as a package row, and prints all rows to stdout under the default --query='1' (WHERE 1, matches all rows).
  6. Use filtered oracle on other plugins (optional): For plugins like docker-info, route the target to the stderr channel for filtered disclosure: sudo /usr/lib64/nagios/plugins/docker-info --test="dummy,/etc/shadow,0" (GitHub Advisory).

Indicators of compromise

  • Logs: Audit logs (/var/log/audit/audit.log or journalctl) showing sudo invocations of Linuxfabrik check plugins (e.g., deb-updates, docker-info, network-bonding) by the nagios or icinga user with a --test argument containing an absolute path (e.g., --test=/etc/shadow,,0).
  • Logs: System auth logs (/var/log/auth.log or /var/log/secure) recording unexpected sudo commands from the nagios/icinga account outside normal monitoring schedules.
  • Process: Unusual invocations of Linuxfabrik plugin binaries with --test arguments referencing paths outside the plugin's unit-test/ directory, visible via ps aux snapshots or process accounting.
  • File System: Unexpected access timestamps on sensitive files such as /etc/shadow, /root/.ssh/id_rsa, or TLS key files, detectable via stat or file integrity monitoring tools (e.g., AIDE, Tripwire) (GitHub Advisory).

Mitigation and workarounds

Upgrade linuxfabrik-lib to version 6.1.0 and Linuxfabrik Monitoring Plugins to version 7.0.0, which confine --test fixture reads to the invoking plugin's own unit-test/ directory (anchored to sys.argv[0], not the working directory), refuse symlinked anchors, and route network-bonding and openstack-swift-stat through the confined helper (lib release v6.1.0, plugins release v7.0.0). As a workaround prior to patching, restrict sudoers entries to specific argument values so that --test cannot be passed to root-run plugins, or temporarily remove the sudoers allowlist entries for affected plugins. Additionally, db_sqlite.get_db_path() in the patched library now rejects database filenames containing path separators or parent-directory references as defense-in-depth (lib fix commit).

Community reactions

The vulnerability was reported by researcher 'zx (Jace)' and credited to 'manus-use' in the GitHub Security Advisory. The Linuxfabrik maintainer (markuslf) responded promptly with fixes committed to both the lib and monitoring-plugins repositories and released patched versions. No significant broader media coverage or notable community commentary beyond the advisory itself has been identified at this time (GitHub Advisory).

Additional resources


SourceThis report was generated using AI

Related Python vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-53964HIGH7.2
  • Python logoPython
  • document-merge-service
NoYesAug 19, 2026
CVE-2026-55236MEDIUM5.9
  • Python logoPython
  • langgraph-api
NoYesAug 19, 2026
CVE-2026-55235MEDIUM5.9
  • Python logoPython
  • langgraph-api
NoYesAug 19, 2026
CVE-2026-73974MEDIUM5.5
  • Python logoPython
  • linuxfabrik-lib
NoYesAug 18, 2026
GHSA-p77j-g7h5-r2vwHIGHN/A
  • Python logoPython
  • geolens
NoYesAug 19, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management