Description
nebula-mesh is a self-hosted control plane for Slack Nebula mesh virtual private network. Prior to version 0.3.7, internal/pki/resolver.go:36-64 constructs a CAManager with the plaintext ed25519.PrivateKey after unwrapping via the master key; internal/pki/ca.go:13-16 stores it. Callers at internal/api/enroll.go:116, internal/api/updates.go:297, and internal/api/mobile_bundle.go:40 use the manager for one Sign() and drop the reference on function return — but the underlying slice contents are not wiped before release. The keystore package's contract (internal/keystore/keystore.go doc: "Callers MUST zeroise the returned plaintext DEK as soon as it is no longer needed") is not met by the CAManager consumer. Decrypted CA private keys persist in process heap until Go's GC scavenges the underlying slice — minutes to hours under load, indefinitely on idle servers. This issue has been patched in version 0.3.7.
Published: 2026-07-28
Score: 6.9 Medium
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

A memory handling flaw in nebula‑mesh allows the decrypted CA private key to remain in a process’s heap after signing is complete. The key material is kept in a slice that is never zeroised, so it can be read from memory for minutes to hours until Go’s garbage collector eventually deletes it. This vulnerability is a classic example of CWE-244, where sensitive data persists longer than needed, enabling potential leakage if an attacker can read the process memory.

Affected Systems

The issue affects the Juev nebula‑mesh control plane; all releases prior to version 0.3.7 are vulnerable. An update to v0.3.7 implements an explicit zeroisation of the private key slice after use, effectively eliminating the persistence problem.

Risk and Exploitability

The CVSS score of 6.9 indicates moderate risk, and the EPSS score of less than 1 % shows a low probability of exploitation. The vulnerability is not listed in the CISA KEV catalog. Exploitation requires the attacker to gain local or remote code‑execution ability within the nebula‑mesh process in order to read the heap, so the attack vector is inferred to be local privileged compromise. Updating to the patched version removes the risk; otherwise, the exposed memory remains a risk for privileged or compromised processes.

Generated by OpenCVE AI on August 3, 2026 at 14:42 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Update nebula‑mesh to version v0.3.7 or later to eliminate the key persistence flaw.
  • If an immediate upgrade is not feasible, manually zeroise any decrypted key material in application code and restart the service to trigger the Go garbage collector.
  • Apply operating‑system level controls to restrict memory access to the nebula‑mesh process, limiting the ability of an attacker to read the heap.

Generated by OpenCVE AI on August 3, 2026 at 14:42 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-8h84-fhqq-q58v nebula-mesh: Decrypted CA private key persists in heap after signing
History

Wed, 29 Jul 2026 14:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Tue, 28 Jul 2026 20:30:00 +0000

Type Values Removed Values Added
First Time appeared Juev
Juev nebula-mesh
Vendors & Products Juev
Juev nebula-mesh

Tue, 28 Jul 2026 18:00:00 +0000

Type Values Removed Values Added
Description nebula-mesh is a self-hosted control plane for Slack Nebula mesh virtual private network. Prior to version 0.3.7, internal/pki/resolver.go:36-64 constructs a CAManager with the plaintext ed25519.PrivateKey after unwrapping via the master key; internal/pki/ca.go:13-16 stores it. Callers at internal/api/enroll.go:116, internal/api/updates.go:297, and internal/api/mobile_bundle.go:40 use the manager for one Sign() and drop the reference on function return — but the underlying slice contents are not wiped before release. The keystore package's contract (internal/keystore/keystore.go doc: "Callers MUST zeroise the returned plaintext DEK as soon as it is no longer needed") is not met by the CAManager consumer. Decrypted CA private keys persist in process heap until Go's GC scavenges the underlying slice — minutes to hours under load, indefinitely on idle servers. This issue has been patched in version 0.3.7.
Title nebula-mesh: Decrypted CA private key persists in heap after signing
Weaknesses CWE-244
References
Metrics cvssV4_0

{'score': 6.9, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N'}


Subscriptions

Juev Nebula-mesh
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-07-29T13:55:01.392Z

Reserved: 2026-05-20T17:44:09.587Z

Link: CVE-2026-48025

cve-icon Vulnrichment

Updated: 2026-07-29T13:54:58.180Z

cve-icon NVD

Status : Deferred

Published: 2026-07-28T18:17:20.583

Modified: 2026-07-30T16:41:25.650

Link: CVE-2026-48025

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-03T14:45:04Z

Weaknesses
  • CWE-244

    Improper Clearing of Heap Memory Before Release ('Heap Inspection')