CVE-2026-47723
highpriority · track · 0EPSS 0.005 · 44 %ileEUUSEPSS · scored 2026-10-27
nebula-mesh is a self-hosted control plane for Slack Nebula mesh virtual private network. Prior to version 0.3.1, none of the response paths in `internal/web/` or `internal/api/` set the standard browser-security headers. `grep` for `Content-Security-Policy`, `X-Frame-Options`, `Strict-Transport-Security`, `X-Content-Type-Options`, `Referrer-Policy` returns zero matches across the codebase. Version 0.3.1 fixes the issue.
cvss
Technical severity, 0–10. One row per scoring source.
base score 0–10 · higher = more severe · hover a vector to decode⚠ sources disagree · medium–high · 5–7.1
ssvc
A stakeholder decision — act, attend, or track — from exploitation and impact.
weaknesses
The CWE weakness classes this flaw belongs to.
affected products (2)
Products and version ranges known to be affected.
advisories (2)
Vendor and ecosystem advisories describing this.
- GHSA-w7w5-5gcp-38rwnebula-mesh: Web UI and API responses lack security headers (CSP, X-Frame-Options, HSTS, etc.)2026-06-08ghsa · osvUS
None of the response paths in `internal/web/` or `internal/api/` set the standard browser-security headers. `grep` for `Content-Security-Policy`, `X-Frame-Options`, `Strict-Transport-Security`, `X-Content-Type-Options`, `Referrer-Policy` returns zero matches across the codebase. ## Impact The admin UI signs CA certificates, mints API keys (returned inline once per page), displays TOTP QR codes, and exposes operator-management forms. Missing `X-Frame-Options: DENY` / `frame-ancestors 'none'` is a real clickjacking lever against an admin browsing `/ui/operators/*` or `/ui/cas/*`. Missing `X-Content-Type-Options: nosniff` allows MIME confusion on any user-supplied content surface. Missing HSTS on TLS deployments leaves a downgrade window. ## Affected All released versions up to v0.3.0. ## Suggested fix A single response-header middleware mounted at the chi router root in both `/ui/*` and `/api/*` paths: ```go func securityHeadersMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { h := rw.Header() h.Set("Content-Security-Policy", "default-src 'self'; frame-ancestors 'none'; base-uri 'none'; form-action 'self'") h.Set("X-Content-Type-Options", "nosniff") h.Set("Referrer-Policy", "same-origin") h.Set("X-Frame-Options", "DENY") // belt-and-braces; CSP frame-ancestors is the modern path if r.TLS != nil { h.Set("Strict-Transport-Security", "max-age=31536000; includeSubDomains") } next.ServeHTTP(rw, r) }) } ``` The inline `<script>` in `layout.html` for CSRF wiring (added in the CSRF advisory) will need either a nonce, a hash in CSP, or external-file extraction. Easiest path: a nonce per request (`crypto/rand`, base64) injected into both the CSP header and the script's `nonce=""` attribute.
- GO-2026-5698nebula-mesh: Web UI and API responses lack security headers (CSP, X-Frame-Options, HSTS, etc.) in github.com/juev/nebula-mesh2026-06-25vendor · osvUS
nebula-mesh: Web UI and API responses lack security headers (CSP, X-Frame-Options, HSTS, etc.) in github.com/juev/nebula-mesh
also known as (5)
Other names and identifiers for this entity.
sources
Which sources assert this record, and when.
references (8)
External citations — patches, advisories, analysis.
- https://github.com/forgekeep/nebula-mesh/commit/b45fda5476c41ffcff1ca23058aef0fb851359c1cnnvd
- https://github.com/forgekeep/nebula-mesh/security/advisories/GHSA-w7w5-5gcp-38rwPatchcnnvd
- https://github.com/forgekeep/nebula-mesh/commit/b45fda5476c41ffcff1ca23058aef0fb851359c1enisa_euvd
- https://github.com/forgekeep/nebula-mesh/releases/tag/v0.3.1enisa_euvd
- https://github.com/forgekeep/nebula-mesh/security/advisories/GHSA-w7w5-5gcp-38rwenisa_euvd
- https://github.com/forgekeep/nebula-mesh/commit/b45fda5476c41ffcff1ca23058aef0fb851359c1nvd
- https://github.com/forgekeep/nebula-mesh/releases/tag/v0.3.1nvd
- https://github.com/forgekeep/nebula-mesh/security/advisories/GHSA-w7w5-5gcp-38rwnvd
Attackers weaponise vulnerabilities like this against internet-exposed services. See what is exposed on your perimeter with a free passive scan.
Free scan