/

CVE-2026-83603

Severity:

HIGH RISK

(8.4)

Unsafe Deserialization (CWE-502) in Netdata ndsudo

CVE-2026-83603

Awaiting Analysis

Vulnerability type

Category:

Unsafe Deserialization

CWE:

CWE-73, CWE-502

Impact:

Root-privileged remote code execution

Severity:

HIGH RISK

(8.4)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

Netdata's setuid-root ndsudo helper can allow the low-privileged netdata service account to select a UNIX socket used by fail2ban-client. When the returned socket data is processed through unsafe Python pickle deserialization, an attacker who can control that socket may execute code with root privileges on systems where fail2ban-client is installed.

Affected context

The vulnerability occurs in Netdata deployments that use the setuid-root ndsudo helper and have fail2ban-client available. Risk is present when the low-privileged netdata account can invoke the fail2ban-client-status-socket helper with a caller-controlled socket path and cause root-run client logic to consume attacker-controlled data.

Exploit preconditions

  • Attack surface: The Netdata ndsudo helper and its fail2ban-client-status-socket command
  • Required access: Ability to act as or influence the low-privileged netdata service account, plus the ability to provide or control a malicious UNIX socket
  • Trigger point: Root invokes fail2ban-client against the attacker-selected socket
  • Why exploitation is possible: Response data is passed to pickle.loads(), which can deserialize attacker-controlled Python objects and execute code with the helper's root privileges

Why this happens

The issue combines inadequate control over a privileged resource path with unsafe deserialization. The setuid-root helper accepts a caller-controlled UNIX socket location, mapping to CWE-73: External Control of File Name or Path, while the fail2ban client uses pickle.loads() on data received from that location. Deserializing untrusted pickle data can invoke arbitrary object behavior, which maps to CWE-502: Unsafe Deserialization.

Potential impact

  • An attacker may execute arbitrary code with root privileges
  • The host operating system could be compromised
  • Netdata credentials, configuration, and collected telemetry could be exposed or altered
  • Attackers could disable monitoring or tamper with security controls
  • The compromised host could be used for lateral movement or persistence

General mitigation guidance

Mitigation generally focuses on removing trust in caller-supplied socket paths and eliminating unsafe deserialization of IPC responses.

Common defensive patterns include:

  • Restricting privileged helpers to a fixed, validated set of socket locations
  • Avoiding pickle for data exchanged across privilege boundaries
  • Using authenticated, narrowly scoped, and non-executable serialization formats
  • Separating root-level operations from inputs controlled by service accounts
  • Applying least privilege and minimizing setuid-root helper functionality
  • Limiting access to UNIX socket directories and enforcing appropriate ownership and permissions
  • Isolating observability services and monitoring unexpected privileged helper invocations

How teams detect issues like this

Organizations can look for this weakness through:

  • Static analysis rules identifying pickle.loads() or equivalent deserialization of IPC or externally sourced data
  • Code review checks for setuid helpers that accept caller-controlled paths
  • Searches for privileged subprocesses using arguments derived from low-privilege service input
  • Runtime monitoring of ndsudo executions, unusual socket paths, and unexpected root child processes
  • Policy enforcement that prohibits unsafe serialization formats across privilege boundaries
  • Automated security review tools that flag dangerous deserialization and path-control patterns

Sources

SourceLink
github.comgithub.com/netdata/netdata/commit/9bced8d46464bd0fe01b0b5f8c63c4ac24e9b060
github.comgithub.com/netdata/netdata/pull/22745
github.comgithub.com/netdata/netdata/releases/tag/v2.10.4
github.comgithub.com/netdata/netdata/security/advisories/GHSA-qwh9-pq27-993w

Frequently asked

questions

Exploitability depends on deployment architecture. An attacker generally needs a foothold that permits control or influence of the netdata service account and access to a malicious UNIX socket; remote exploitation may be possible when another exposed weakness provides that foothold.

The key prerequisites are the ability to invoke or influence the vulnerable helper as the low-privileged Netdata account and the ability to make root-run fail2ban-client connect to attacker-controlled socket data.

Do not allow untrusted callers to select privileged socket paths, and replace pickle-based deserialization across the privilege boundary with a safe, constrained data format.

Review setuid helpers for user-controlled paths and arguments, prohibit executable serialization formats for untrusted data, enforce least privilege, and add static and runtime checks for privileged deserialization flows.

Find out what's already
exploitable in your codebase.