CVE-2026-40304: zrok Broken Ownership Check Vulnerability

MODERATE
Advisory Identifier: GHSA-3jpj-v3xr-5h6g
CVSS 5.3
CWE-284 CWE-863
Published
Advisory Summary

CVE-2026-40304 is a MODERATE (CVSS 5.3) broken ownership check vulnerability (CWE-284: Improper Access Control) affecting zrok libraries in the Go ecosystem. The issue involves broken ownership check in delete /api/v2/unaccess allows non-admin to delete global frontend records. Remediation is available by upgrading affected packages to version 2.0.1.

CVE-2026-40304 at a Glance

CVE Identifier CVE-2026-40304
GHSA Identifier GHSA-3jpj-v3xr-5h6g
Severity MODERATE
CVSS v3.1 Base Score 5.3
CWE Classification CWE-284: Improper Access Control
Affected Product zrok
Package Ecosystem Go
Published Date
Last Updated

Security Impact

CVSS: 5.3

The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H).

Attack Vector Network (AV:N)
Attack Complexity High (AC:H)
Privileges Required Low (PR:L)
User Interaction None (UI:N)
Scope Unchanged (S:U)
Confidentiality None (C:N)
Integrity None (I:N)
Availability High (A:H)

How to Fix CVE-2026-40304

To remediate this vulnerability, upgrade all affected zrok dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

github.com/openziti/zrok fixed: Latest secure release
Upgrade github.com/openziti/zrok to Latest secure release
github.com/openziti/zrok/v2 fixed: 2.0.1
Upgrade github.com/openziti/zrok/v2 to 2.0.1
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

inspect dependencies for github.com/openziti/zrok

How to Check if You Are Affected

To determine whether your application is affected by CVE-2026-40304, inspect your project dependencies for zrok:

inspect dependencies for github.com/openziti/zrok

Analyze the terminal output to locate any version of zrok in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 2.0.1), your application is affected.

Note: Verify declared build manifests and deployed runtime container environments.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-284: Improper Access Control, where the product does not restrict or incorrectly restricts access to a resource from an unauthorized actor. In zrok, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

Summary The unaccess handler (controller/unaccess.go) contains a logical error in its ownership guard: when a frontend record has environment_id = NULL (the marker for admin-created global frontends), the condition short-circuits to false and allows the deletion to proceed without any ownership verification. A non-admin user who knows a global frontend token can call DELETE /api/v2/unaccess with any of their own environment IDs and permanently delete the global frontend, taking down all public shares routed through it. Attack Vector: Network — the endpoint is a standard HTTP API call. Attack Complexity: High — successful exploitation requires prior knowledge of a global frontend token. These tokens are not returned to non-admin users by any standard API endpoint; obtaining one requires an out-of-band step (e.g., leaked server logs, admin documentation for a self-hosted instance, or social engineering). Privileges Required: Low — a valid user account with at least one registered environment is required; no admin privileges needed. User Interaction: None. Scope: Unchanged — the impact stays within the same server instance. Confidentiality Impact: None — no data is disclosed. Integrity Impact: None — no data is improperly modified; the record is deleted (not corrupted). Availability Impact: High — deleting a global frontend disrupts every public share routed through it on the instance, constituting a platform-wide availability impact. Affected Component controller/unaccess.go — unaccessHandler.Handle (line 56)

CVE-2026-40304 Affected zrok Versions

2 component(s)
Fixed Versions:
2.0.1
Product / Package Ecosystem Affected Versions Fixed Version
github.com/openziti/zrok
Go
≤ 1.1.11
github.com/openziti/zrok/v2
Go
< 2.0.1
2.0.1

References

Frequently Asked Questions

What is CVE-2026-40304?
CVE-2026-40304 is a security vulnerability in zrok involving Broken ownership check in DELETE /api/v2/unaccess allows non-admin to delete global frontend records under CWE-284: Improper Access Control.
Which zrok versions are affected?
Affected versions include releases prior to 2.0.1 across affected packages: github.com/openziti/zrok, github.com/openziti/zrok/v2.
What version fixes CVE-2026-40304?
Upgrading to 2.0.1 (or the latest patched release for your respective branch) resolves the vulnerability.
Is github.com/openziti/zrok affected?
Yes, github.com/openziti/zrok is affected in releases prior to Latest secure release. Upgrade your dependency to Latest secure release or later.
Is github.com/openziti/zrok/v2 affected?
Yes, github.com/openziti/zrok/v2 is affected in releases prior to 2.0.1. Upgrade your dependency to 2.0.1 or later.
What is the CVSS score of CVE-2026-40304?
CVE-2026-40304 has a CVSS v3.1 base score of 5.3 (MODERATE) with vector string CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H.
What CWE is associated with CVE-2026-40304?
CVE-2026-40304 is classified under CWE-284: Improper Access Control (The product does not restrict or incorrectly restricts access to a resource from an unauthorized actor.).
How can I check Go dependencies for CVE-2026-40304?
Run the dependency tree command: 'inspect dependencies for github.com/openziti/zrok'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-3jpj-v3xr-5h6g",
  "modified" : "2026-04-24T20:49:03Z",
  "published" : "2026-04-16T21:09:23Z",
  "aliases" : [ "CVE-2026-40304" ],
  "summary" : "zrok: Broken ownership check in DELETE /api/v2/unaccess allows non-admin to delete global frontend records",
  "details" : "Summary\nThe unaccess handler (controller/unaccess.go) contains a logical error in its ownership guard: when a frontend record has environment_id = NULL (the marker for admin-created global frontends), the condition short-circuits to false and allows the deletion to proceed without any ownership verification. A non-admin user who knows a global frontend token can call DELETE /api/v2/unaccess with any of their own environment IDs and permanently delete the global frontend, taking down all public shares routed through it.\n\nAttack Vector: Network — the endpoint is a standard HTTP API call.\n\nAttack Complexity: High — successful exploitation requires prior knowledge of a global frontend token. These tokens are not returned to non-admin users by any standard API endpoint; obtaining one requires an out-of-band step (e.g., leaked server logs, admin documentation for a self-hosted instance, or social engineering).\n\nPrivileges Required: Low — a valid user account with at least one registered environment is required; no admin privileges needed.\n\nUser Interaction: None.\n\nScope: Unchanged — the impact stays within the same server instance.\n\nConfidentiality Impact: None — no data is disclosed.\n\nIntegrity Impact: None — no data is improperly modified; the record is deleted (not corrupted).\n\nAvailability Impact: High — deleting a global frontend disrupts every public share routed through it on the instance, constituting a platform-wide availability impact.\n\nAffected Component\ncontroller/unaccess.go — unaccessHandler.Handle (line 56)",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/openziti/zrok"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "last_affected" : "1.1.11"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/openziti/zrok/v2"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "2.0.1"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/openziti/zrok/security/advisories/GHSA-3jpj-v3xr-5h6g"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-40304"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/openziti/zrok"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/openziti/zrok/releases/tag/v2.0.1"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-284", "CWE-863" ],
    "severity" : "MODERATE",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-04-16T21:09:23Z",
    "nvd_published_at" : "2026-04-17T22:16:32Z"
  }
}