CVE-2026-47725High▾ Twilightnebula-mesh's web UI lacks CSRF tokens on /ui/* mutating endpoints
▾ Twilight zone — High severity, or a signal on a lesser flaw
impact 41.3 · likelihood 0 · exploitation 0
Need a working PoC? Pro members can cast a request and our team develops one — it lands right here.
Exploit-prediction probability, daily snapshots since Jul 29.
Disclosure to exploitation, from the record and what we observed since indexing it.
Disclosed via GHSA
0.2%
Every /ui/* POST / PUT / PATCH / DELETE route processes the request as soon as the session cookie validates. SameSite=Lax on the session cookie prevents most cross-site form submits but does not protect:
GET /ui/logout route, which a third-party <img src=".../ui/logout"> can force-triggerThe admin UI signs CA certificates, mints API keys, rotates / retires / deletes CAs, disables operators, and changes server settings. CSRF here is a real privilege escalation, not just annoyance.
All released versions up to v0.3.2.
Double-submit cookie: a 32-byte crypto/rand token in a non-HttpOnly _csrf cookie, echoed in either X-CSRF-Token (htmx) or a _csrf form field (HTML forms). Compared in constant time. Rotated on every privilege transition (Login, OIDC StartAuthenticatedSession, CompleteTwoFactor, Logout) so pre-auth fixation cannot survive promotion. Rejections audit-logged as ui.csrf.rejected with reason; response body stays opaque.
/ui/logout becomes POST so it is no longer reachable via <img> tags.
Fix coordinates with the Secure-cookie advisory disclosed concurrently — the _csrf cookie inherits the same Secure-attribute derivation.
With an authenticated operator session in browser tab A, open the following minimal HTML in any other tab:
<form action="https://nebula.example.com/ui/cas/{ca-id}/delete" method="POST">
<button>Click for free puppy</button>
</form>
Click. The CA is deleted — the server processes the POST because the session cookie is automatically attached and there is no other check. The same trick works for force-rotate, retire, mint API keys, disable operators, etc.
Alternative force-logout: <img src="https://nebula.example.com/ui/logout"> placed on an attacker's page logs out any visiting authenticated operator. No interaction required.
r.PostFormValue only reads application/x-www-form-urlencoded bodies. The middleware's package comment documents this.github.com/juev/nebula-mesh <= 0.3.2Upgrade to a patched release:
github.com/juev/nebula-mesh 0.3.3Connected by shared product, vendor, weakness, or advisory.
CVE-2026-47722Highnebula-mesh: Host advanced overrides allow YAML injection into agent config.yml
CVE-2026-47723Highnebula-mesh: Web UI and API responses lack security headers (CSP, X-Frame-Options, HSTS, etc.)
CVE-2026-47724Critical· 9.9nebula-mesh: API endpoints lack ownership checks, enabling cross-operator privilege escalation
CVE-2026-47726Highnebula-mesh: GET /api/v1/audit-log discloses all entries to any operator
CVE-2026-48025Mediumnebula-mesh: Decrypted CA private key persists in heap after signing
CVE-2026-48058Mediumnebula-mesh: Session and OIDC state cookies lack the Secure attribute