ZeroHour

CVE-2026-53604

niche

Unwiped CA private key in nebula-mesh web handler leaks VPN signing key

CVSS 4.0
7.1 high
EPSS
<1%p2
Published
()
Modified
AI analysis

nebula-mesh, a self-hosted control plane for Slack's Nebula mesh VPN, leaves the decrypted Certificate Authority (CA) ed25519 private key unwiped on the Go heap after mobile-bundle generation through its web UI in versions prior to 0.3.8. The web handler renderMobileBundle passes the real CA resolver into mobilebundle.Build, which decrypts the CA private key but never calls CAManager.Wipe() on any return path — especially on errors such as a missing network, invalid prefix, database failure, or signing failure — so the plaintext key lingers in memory until garbage collection, while the API handler performs this correctly and is unaffected. An attacker who can read process memory, such as via core dumps, swap files, or memory scraping on the host, can recover the CA signing key and use it to mint arbitrary host certificates for the mesh VPN. Only self-hosted deployments that trigger mobile-bundle generation through the web UI are affected. No public proof-of-concept or known exploitation exists, and EPSS estimates the 30-day exploitation probability at roughly 0.1%.

What to do: Upgrade nebula-mesh to version 0.3.8 or later. As an interim measure, generate mobile bundles via the API endpoint instead of the web UI, since that path correctly wipes the CA key, and reduce process-memory exposure by disabling core dumps and encrypting swap on the host. If host memory may have been read (core dump, swap, or memory scraping), consider rotating the CA key and re-issuing host certificates.

Affected
nebula-mesh (open-source project) nebula-mesh (self-hosted control plane for Slack Nebula mesh VPN)all versions prior to 0.3.8 (< 0.3.8)
Estimated exposure
nichelikely low hundreds to a few thousand self-hosted deployments (no public install statistics available) — nebula-mesh is a small, self-hosted control plane for the relatively niche Nebula mesh VPN and no adoption metrics appear in the available data, so this is a low-confidence estimate based on its limited, self-hosted deployment model.

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

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.

Weakness
CWE-212, CWE-316
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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X

In the news

No ingested article mentions this CVE yet.