Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessGain netdata service-account foothold
-
DeliveryStart malicious UNIX socket
-
ExploitInvoke setuid ndsudo with --socket_path
-
Executionroot fail2ban-client connects to socket
-
PersistMalicious pickle deserialized by pickle.loads()
-
ImpactArbitrary code execution as root
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V5 - File Handling File name/path control
|
| Exploitation Conditions | Requires (1) local control of the low-privileged netdata service account on a host running Netdata prior to 2.10.4, (2) the setuid-root ndsudo helper present (default in affected packaged builds), and (3) fail2ban-client installed on the system, since the vulnerable command is fail2ban-client-status-socket. The attacker must be able to invoke ndsudo with a caller-controlled --socket_path and stand up a malicious UNIX socket. Limiting factors: no remote/network vector (AV:L) - a prior local foothold as the netdata account is mandatory - and hosts without fail2ban-client installed are not exploitable via this path. |
| Impact | This is a genuine high-priority local privilege-escalation-to-root issue, not a high-CVSS-but-low-risk case. The CVSS 3.1 vector (AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N, 8.4) accurately captures the shape: an attacker who already holds the low-privileged netdata service account can reach a setuid-root ndsudo helper whose caller-controlled --socket_path lets root's fail2ban-client connect to an attacker-owned UNIX socket, whose response is deserialized via pickle.loads() as root - a textbook unsafe-deserialization RCE-as-root. The Scope:Changed flag is correct because the netdata→root authority boundary is crossed. No EPSS score, KEV entry, or public POC was provided, so exploitation status is 'no public exploit identified at time of analysis'; however, the mechanism is well-understood and the fix diff is public (PR #22745 removes the caller-controlled socket path entirely and hardcodes it), which materially lowers the bar to reproduce. The A:N metric is arguably conservative - arbitrary root code execution can trivially destroy availability - so real impact may exceed the published vector. The one real limiter is that exploitation requires both prior local foothold as the netdata account AND fail2ban-client installed on the host. |
| Exploit ScenarioDerived | An attacker who has already compromised or otherwise controls the low-privileged netdata service account (e.g. via a separate web/collector foothold) invokes the setuid-root ndsudo helper's fail2ban-client-status-socket command with --socket_path pointing at a malicious UNIX socket they control. Root's fail2ban-client connects, CSocket.receive() feeds the attacker-supplied bytes to pickle.loads(), and a crafted pickle payload executes arbitrary code as root. No public POC is referenced, but the patch diff and deserialization sink are public, making reproduction straightforward on hosts with fail2ban-client installed. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 22, 2026
Local privilege escalation to root in Netdata versions prior to 2.10.4: the setuid-root ndsudo helper command fail2ban-client-status-socket accepted a caller-supplied --socket_path argument from the low-privileged netdata service account, letting that account point root's fail2ban-client at an attacker-controlled UNIX socket. Because fail2ban-client's CSocket.receive() deserializes the socket response with pickle.loads(), a crafted reply yields attacker-controlled code execution as root on any host where fail2ban-client is installed and the setuid ndsudo helper is present (default in affected packaged builds). The vector is strictly local (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H), so a prior foothold as the netdata account is mandatory, and hosts without fail2ban-client are not exploitable through this path; no public exploit code has been identified at time of analysis.
RemediationAI
Vendor-released patch: upgrade to Netdata 2.10.4 (or nightly 2.10.0-782-nightly), which hardcodes the fail2ban socket path in ndsudo.c and removes the caller-supplied --socket_path from the Go fail2ban collector - see advisory GHSA-qwh9-pq27-993w, PR 22745, and commit 9bced8d46464bd0fe01b0b5f8c63c4ac24e9b060. If immediate upgrade is not possible, the most effective compensating control is to remove the setuid bit from the ndsudo helper (chmod u-s on the ndsudo binary) or restrict its execution to root only; the trade-off is that all ndsudo-backed collectors, including fail2ban, smartctl, and nvme, stop working from the netdata account, degrading observability but closing the privilege boundary. A second option is to uninstall or otherwise remove fail2ban-client from hosts that do not need fail2ban monitoring, since the entire chain depends on root's fail2ban-client performing the attacker-directed socket connect and pickle.loads(); this costs fail2ban visibility but eliminates the root-side deserialization sink. Where fail2ban is genuinely required, restrict netdata's ability to reach it - for example by making the netdata account unable to create or bind UNIX sockets in writable directories the helper can be pointed at, and by tightening filesystem permissions so the service account cannot author socket path contents - though path-level restrictions are fragile and should be treated as defense in depth, not a substitute for the patch. Finally, audit for prior compromise by reviewing fail2ban-client invocations in ndsudo/sudo logs and any unexpected root-owned processes or files after netdata account activity, given the local root code-execution outcome.
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
Netdata ships ndsudo, a small setuid-root helper used by the agent's Go collectors to run a fixed allowlist of privileged commands (fail2ban-client, smartctl, nvme, etc.) on behalf of the unprivileged netdata service account. The vulnerable entry is the fail2ban-client-status-socket command template in src/collectors/utils/ndsudo.c, which was written as "-s {{socket_path}} status"; the {{socket_path}} placeholder was interpolated from an argument the Go collector passed through (src/go/plugin/go.d/collector/fail2ban/exec.go), so the caller - not ndsudo - controlled which UNIX socket root's fail2ban-client would connect to. The root cause class is CWE-73 (External Control of File Name or Path): a privileged, setuid process trusting a path value supplied by a less-privileged caller, with no validation, canonicalization, or fixed-socket enforcement. The second half of the chain lives in fail2ban itself: fail2ban/client/csocket.py CSocket.receive() unpickles data returned over the socket with pickle.loads(), so any process that can answer on that socket controls a root-level deserialization primitive. The scoped CVSS rating (S:C) reflects that this crosses a privilege boundary from the netdata account to full root, with high confidentiality, integrity, and availability impact. The upstream fix removes the parameterization entirely - PR 22745 and commit 9bced8d46464bd0fe01b0b5f8c63c4ac24e9b060 replace the placeholder with the hardcoded FAIL2BAN_SOCKET_PATH_IN_DOCKER constant "/host/var/run/fail2ban/fail2ban.sock" and drop the --socket_path arguments from the Go collector, adding exec_test.go assertions that pin the exact ndsudo argv for host and Docker paths. Note that the supplied tag "Information Disclosure" understates the issue; the actual impact is root code execution.
Know when Netdata 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
AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N
Local netdata-account attacker (AV:L/PR:L) reliably reaches a setuid helper for arbitrary root code execution (S:C, full C:H/I:H/A:H); I raise A:N to A:H because root RCE fully compromises availability.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Netdata is an open source observability tool. Prior to 2.10.4, the setuid-root ndsudo helper command fail2ban-client-status-socket in src/collectors/utils/ndsudo.c accepts a caller-controlled --socket_path from the low-privileged netdata service account. The account can direct root fail2ban-client to a malicious UNIX socket, and fail2ban/client/csocket.py CSocket.receive() passes the returned data to pickle.loads(), allowing attacker-controlled code to execute as root on systems with fail2ban-client installed. This issue is fixed in version 2.10.4 and nightly build 2.10.0-782-nightly.
Technical POC Analysis
CWE-73 (External Control of File Name or Path), chained with unsafe deserialization in the child process.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Netdata installations running versions prior to 2.10.4 on hosts that also have fail2ban-client installed contain a local privilege-escalation flaw in the setuid-root ndsudo helper that allows an attacker holding the low-privileged netdata service account to execute arbitrary code as root. Affected hosts are those in default packaged builds, meaning a single compromised service account can escalate into a complete takeover of the machine and everything on it. Leadership should care because this is a contained-but-high-consequence risk: it demands a prior foothold, but the end state is full root control of production systems.
No vendor-released patch identified at time of analysis; the flaw is described as affecting Netdata versions prior to 2.10.4. Interim mitigations: remove the setuid bit from the ndsudo helper to eliminate the escalation path, uninstall or disable fail2ban-client on hosts where it is not operationally required, restrict and monitor the low-privileged netdata service account, and hunt for anomalous ndsudo or fail2ban-client invocations originating from that account until a fixed build is available.
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
Netdata is an open source option for real-time infrastructure monitoring and troubleshooting. Rated critical severity (C
Netdata is an open source option for real-time infrastructure monitoring and troubleshooting. Rated critical severity (C
The Netdata web application through 1.13.0 allows remote attackers to inject their own malicious HTML code into an impor
Local privilege escalation in the Netdata Windows Agent (versions 2.0.0 through 2.10.3) allows an authenticated low-priv
Memory exhaustion in Netdata versions prior to 2.11.0 allows a remote, unauthenticated attacker to inflate small, highly
Local privilege escalation in the Netdata Windows Agent (versions 2.0.0 through 2.10.3) lets an authenticated low-privil
A denial of service in Netdata Agent versions prior to 2.10.4 lets an authenticated streaming child agent crash the pare
An authenticated Netdata child agent can crash its parent agent by streaming an oversized DIMENSION SLOT value in the pl
Unauthenticated writes to the Netdata settings store are possible in versions 2.0.0 through 2.10.x because the /api/v3/s
Reflected XSS in Netdata before 2.3.1 allows unauthenticated network attackers to inject and execute arbitrary JavaScrip
EUVD-2026-84564
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB