Description
nebula-mesh is a self-hosted control plane for Slack Nebula mesh VPN. Prior to version 0.3.8, the web handler renderMobileBundle passes the real *pki.CAResolver directly into mobilebundle.Build. Inside Build, resolver.LoadByID decrypts the CA's ed25519 private key into a *pki.CAManager, but Build never calls CAManager.Wipe() on any return path. As a result, when a mobile-bundle request goes through the web UI and Build returns — especially on error (missing network, invalid prefix, DB error, signing failure) — the plaintext CA private key remains on the Go heap, unwiped, until garbage collection. An attacker able to read process memory (core dump, swap, memory-scraping) can recover the CA signing key, which would allow minting arbitrary host certificates for the mesh. The API handler already does this correctly: it loads the CAManager, defer caMgr.Wipe(), and wraps it in caManagerResolver. Only the web path is affected. This issue has been patched in version 0.3.8.
Published: 2026-09-04
Score: 7.1 High
EPSS: < 1% Very Low
KEV: No
Impact: Key Exposure
Action: Immediate Patch
AI Analysis

Impact

The flaw lies in Nebula Mesh’s web handler for mobile bundles, where the CA private key is loaded into memory but never wiped on error paths. The key remains on the Go heap until garbage collection, exposing the plaintext ed25519 signing key to anyone who can read the process memory. Because this key authorizes host certificates for the mesh, its compromise would allow an attacker to forge certificates and impersonate any node, thereby gaining full control within the VPN. The weakness is reflected by CWE‑212 and CWE‑316, indicating insecure key handling and persistence of sensitive data.

Affected Systems

Forgekeep Nebula Mesh versions released before 0.3.8 are vulnerable. The issue was fixed in the 0.3.8 release, so any installation running 0.3.7 or earlier should be considered affected.

Risk and Exploitability

The CVSS base score of 7.1 indicates a high impact and moderate exploitability. The vulnerability requires the attacker to acquire memory‑reading capabilities, such as via a core dump, swap space, or direct memory scraping of the Nebula Mesh process. While not listed in CISA’s KEV catalog and lacking an EPSS score, the risk remains significant for environments where privileged insiders or compromised workloads can access process memory. If an attacker obtains the CA key, they can issue arbitrary host certificates, leading to full compromise of the mesh.

Generated by OpenCVE AI on September 4, 2026 at 20:32 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Forgekeep Nebula Mesh to version 0.3.8 or later, where the CA key wiping bug has been fixed.
  • If an upgrade is not immediately possible, restart the Nebula Mesh process after any mobile‑bundle error and ensure the system is configured to prevent core dumps or memory dumps that could expose the heap contents.
  • Restrict access to the web UI that triggers the mobile‑bundle handler to trusted administrators only, or, if feasible, disable the web path entirely until the issue is patched.
  • Implement monitoring of memory usage and, where available, enable hardware or OS features that zero memory on process exit to reduce the window during which the key might be recoverable.

Generated by OpenCVE AI on September 4, 2026 at 20:32 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-2p2f-px33-4vv5 nebula-mesh: CA private key not zeroized on web mobile-bundle error paths
History

Mon, 07 Sep 2026 08:45:00 +0000

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

Fri, 04 Sep 2026 19:45:00 +0000

Type Values Removed Values Added
Description nebula-mesh is a self-hosted control plane for Slack Nebula mesh VPN. Prior to version 0.3.8, the web handler renderMobileBundle passes the real *pki.CAResolver directly into mobilebundle.Build. Inside Build, resolver.LoadByID decrypts the CA's ed25519 private key into a *pki.CAManager, but Build never calls CAManager.Wipe() on any return path. As a result, when a mobile-bundle request goes through the web UI and Build returns — especially on error (missing network, invalid prefix, DB error, signing failure) — the plaintext CA private key remains on the Go heap, unwiped, until garbage collection. An attacker able to read process memory (core dump, swap, memory-scraping) can recover the CA signing key, which would allow minting arbitrary host certificates for the mesh. The API handler already does this correctly: it loads the CAManager, defer caMgr.Wipe(), and wraps it in caManagerResolver. Only the web path is affected. This issue has been patched in version 0.3.8.
Title nebula-mesh: CA private key not zeroized on web mobile-bundle error paths
Weaknesses CWE-212
CWE-316
References
Metrics cvssV4_0

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


Subscriptions

Forgekeep Nebula-mesh
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-09-08T17:33:06.977Z

Reserved: 2026-06-09T19:39:52.404Z

Link: CVE-2026-53604

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Deferred

Published: 2026-09-04T20:17:23.437

Modified: 2026-09-08T21:05:26.920

Link: CVE-2026-53604

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-07T08:25:54Z

Weaknesses
  • CWE-212

    Improper Removal of Sensitive Information Before Storage or Transfer

  • CWE-316

    Cleartext Storage of Sensitive Information in Memory