Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify predictable /tmp DB filename
-
DeliveryPlant symlink pointing to root-owned target file
-
ExploitWait for root-run logfile check to execute migration
-
Executionos.rename() relocates symlink to secured directory
-
Persistsqlite3.connect() opens and overwrites symlink target
-
ImpactRoot-owned file corrupted or zeroed
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Symlink resolution safety
|
| Exploitation Conditions | Exploitation requires three concurrent conditions: (1) the host must have the non-default kernel parameter fs.protected_symlinks=0 - on modern Linux distributions (RHEL 8+, Ubuntu 18.04+, Debian 10+) this defaults to 1, which blocks the attack entirely in sticky /tmp; (2) the attacker must have a local account that can write to /tmp and shares, or has been granted, access equivalent to the monitoring plugin's execution account; (3) the vulnerable migration code path must be reached, meaning the logfile check must be running for the first time post-upgrade from a pre-v6.0.0 version with a legacy state file absent from the secured per-user directory. The attack window closes after the first successful (or failed) migration attempt, making it a one-shot opportunity per affected logfile check instance. Root-level execution of the check (typical in Nagios/Icinga daemon deployments) is required for the symlink follow to produce privilege escalation impact. |
| Impact | The CVSS 4.0 score of 5.8 reflects several mitigating factors that together materially suppress real-world risk. Attack vector is local (AV:L), complexity is high (AC:H), the attack target requires a specific prerequisite (AT:P - the non-default fs.protected_symlinks=0 kernel setting), and low privileges are required (PR:L). On modern Linux distributions, fs.protected_symlinks defaults to 1 (enabled), which blocks unprivileged symlink attacks in world-writable sticky directories like /tmp - this single control eliminates the vulnerability on the vast majority of production hosts. The integrity impact is high (VI:H) because a root-run check would rename and then open the attacker's symlink target, but confidentiality is unaffected (VC:N) and availability impact is low (VA:L). No KEV listing and no public exploit code exists, making opportunistic mass exploitation implausible. This is a real but narrow local privilege escalation with integrity consequence, relevant primarily to environments that have explicitly disabled symlink protection or are running older kernels lacking it. Organizations running this plugin on non-hardened Linux hosts should patch; others face substantially reduced risk. |
| Exploit ScenarioDerived | A local user who shares or has write access to the monitoring plugin account creates a symlink at /tmp/linuxfabrik-monitoring-plugins-logfile-<target>.db pointing to a sensitive root-owned file (e.g., /etc/shadow or a critical configuration file) on a host where fs.protected_symlinks=0. When the root-privileged Icinga or Nagios daemon next executes the logfile check for a v6.0.0 installation, os.rename() moves the symlink to the secured per-user directory and sqlite3.connect() opens it, overwriting or corrupting the target file with SQLite database content. No public exploit code exists, but the attack primitive is well-understood. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jul 29, 2026
Symlink-following in Linuxfabrik monitoring-plugins 6.0.0 allows a local low-privileged user sharing the plugin account to overwrite or corrupt arbitrary root-owned files. The logfile check's legacy database migration resolved a predictable /tmp path via os.rename() without guarding against symlink substitution, and sqlite3.connect() would then follow the attacker-planted link during a root-executed check run. No public exploit has been identified, and exploitation is additionally constrained by the non-default kernel setting fs.protected_symlinks=0, meaningfully reducing real-world risk on hardened systems.
RemediationAI
The upstream fix (commit 6df1f574aa9dc6541e092f1ce482ecc1315cded0) removes the transparent migration routine entirely rather than attempting to make it safe. After applying the fix, the logfile check will no longer carry over the read offset from pre-v6.0.0 state databases, meaning the first post-upgrade run will re-scan the entire monitored logfile once - a known, documented side effect. Update to the patched version of monitoring-plugins referencing the fix commit; a specific tagged release version was not independently confirmed from available data, so monitor https://github.com/Linuxfabrik/monitoring-plugins/releases and the advisory at https://github.com/Linuxfabrik/monitoring-plugins/security/advisories/GHSA-w2gg-hx6w-24w3 for the tagged release. As a compensating control until patching, ensure fs.protected_symlinks=1 is set (verify with sysctl fs.protected_symlinks) - this is the default on modern Linux and blocks the symlink attack in /tmp. Alternatively, restrict local account access so no untrusted user shares the plugin execution account. Manual removal of legacy /tmp state files matching the linuxfabrik-monitoring-plugins-logfile-*.db pattern before the check next runs also eliminates the attack window.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The Linuxfabrik monitoring-plugins package (CPE: cpe:2.3:a:linuxfabrik:monitoring-plugins:*:*:*:*:*:*:*:*) provides Python-based checks for Icinga, Nagios, and compatible monitoring systems. The vulnerable code path is the logfile check's one-time migration routine, introduced to transparently carry forward SQLite state databases written by pre-v6.0.0 versions from /tmp (predictable, world-writable directory) to a secured per-user directory. The migration used os.rename() on a predictable filename derived from the monitored logfile's basename, without first verifying that the source path was a regular file. CWE-59 (Improper Link Resolution Before File Access) identifies the root cause: a privileged process trusts a filesystem path controlled by an unprivileged actor, allowing TOCTOU-style symlink substitution. The sqlite3.connect() call that follows the rename would open whatever file the symlink pointed to, potentially overwriting a sensitive root-owned file with a blank SQLite database or truncating it.
Know when Python gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:N/VC:N/VI:H/VA:L/SC:N/SI:N/SA:N
Local vector and high complexity reflect /tmp symlink attack requiring non-default fs.protected_symlinks=0; PR:L for plugin account access; no confidentiality impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
DescriptionCVE.org
Linuxfabrik monitoring-plugins provides Python monitoring plugins for Icinga, Nagios, and related monitoring systems. In version 6.0.0, the logfile check legacy database migration moved a predictable path from /tmp with os.rename() and allowed a local user controlling the plugin account to place a symlink that would be followed by sqlite3.connect() during a root-run check.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t
BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser
pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi
The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python
BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.
Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301
In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse
Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne
EUVD-2026-50552
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB