Skip to content

Local Privilege Escalation via Unauthenticated IPC Socket

High
lixmal published GHSA-qcpp-8vwj-hhwr Jul 29, 2026

Package

gomod github.com/netbirdio/netbird (Go)

Affected versions

>= 0.5.0, < 0.76.0

Patched versions

0.76.0

Description

The NetBird client daemon exposes its gRPC control interface to any local process with no authentication, in all versions from 0.5.0 (March 2022) to 0.75.1. On Linux, macOS and FreeBSD the interface is a Unix domain socket (/var/run/netbird.sock) with world-readable/writable permissions (0666). On Windows it is a loopback TCP listener (127.0.0.1:41731), where the transport carries no caller identity at all. Any unprivileged local user can connect and invoke all daemon RPCs without credentials.

An attacker with a low-privilege local account can exploit this to:

  1. Read sensitive VPN configuration including management server URLs, WireGuard port, peer IP addresses, FQDNs, public keys, and SSH settings
  2. Modify security-critical daemon configuration by enabling root SSH login, disabling SSH authentication, and disabling the firewall — all written to a root-owned config file
    (mode 0600)
  3. Disconnect the VPN and unregister the peer from the victim's NetBird account
  4. Re-register the peer to an attacker-controlled NetBird account using a setup key
  5. Obtain a root shell via the built-in SSH server, which starts with no authentication when disableSSHAuth is set through the tampered config
poc1 poc2 poc3 poc4

Fix

Fixed in v0.76.0 (#6967). The daemon derives each local caller's identity from the kernel (SO_PEERCRED on Linux, LOCAL_PEERCRED on macOS and FreeBSD, the named-pipe client token on Windows) and requires root or administrator to enable the SSH server, enable SSH root login, disable SSH authentication, or to change the management URL or deregister the peer while that profile has the SSH server enabled. A caller whose identity cannot be established is refused. On Windows the daemon moved from loopback TCP to a named pipe, created in the ProtectedPrefix\Administrators namespace when it runs as a service, with clients verifying the pipe's owner.

Reading daemon status and configuration, and non-escalating operations such as disconnecting, remain available to local users and are not gated by this release.

Severity

High

CVSS overall score

This score calculates overall vulnerability severity from 0 to 10 and is based on the Common Vulnerability Scoring System (CVSS).
/ 10

CVSS v3 base metrics

Attack vector
Local
Attack complexity
Low
Privileges required
Low
User interaction
None
Scope
Changed
Confidentiality
High
Integrity
High
Availability
High

CVSS v3 base metrics

Attack vector: More severe the more the remote (logically and physically) an attacker can be in order to exploit the vulnerability.
Attack complexity: More severe for the least complex attacks.
Privileges required: More severe if no privileges are required.
User interaction: More severe when no user interaction is required.
Scope: More severe when a scope change occurs, e.g. one vulnerable component impacts resources in components beyond its security scope.
Confidentiality: More severe when loss of data confidentiality is highest, measuring the level of data access available to an unauthorized user.
Integrity: More severe when loss of data integrity is the highest, measuring the consequence of data modification possible by an unauthorized user.
Availability: More severe when the loss of impacted component availability is highest.
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H

CVE ID

No known CVE

Weaknesses

No CWEs

Credits