CVE-2026-96628: Arcane Environment Access Token Bypasses The Vulnerability

MODERATE
Advisory Identifier: GHSA-mp22-58ff-6fhr
CVSS 4.3
CWE-863
Published
Advisory Summary

CVE-2026-96628 is a MODERATE (CVSS 4.3) environment access token bypasses the vulnerability (CWE-863: Incorrect Authorization) affecting Arcane libraries in the Go ecosystem. The issue involves environment access token bypasses the admin-required authorization gate on `/api/debug/pprof`. Remediation is available by upgrading affected packages to version 2.11.0.

CVE-2026-96628 at a Glance

CVE Identifier CVE-2026-96628
GHSA Identifier GHSA-mp22-58ff-6fhr
Severity MODERATE
CVSS v3.1 Base Score 4.3
CWE Classification CWE-863: Incorrect Authorization
Affected Product Arcane
Package Ecosystem Go
Published Date
Last Updated

Security Impact

CVSS: 4.3

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

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

How to Fix CVE-2026-96628

To remediate this vulnerability, upgrade all affected Arcane 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/getarcaneapp/arcane/backend/v2 fixed: 2.11.0
Upgrade github.com/getarcaneapp/arcane/backend/v2 to 2.11.0
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/getarcaneapp/arcane/backend/v2

How to Check if You Are Affected

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

inspect dependencies for github.com/getarcaneapp/arcane/backend/v2

Analyze the terminal output to locate any version of Arcane in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 2.11.0), 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-863: Incorrect Authorization, where the product performs an authorization check when an actor attempts to access a resource or perform an action, but it does not correctly perform the check. In Arcane, 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 Arcane v2.10.2 contains an authorization inconsistency in `AuthMiddleware.managerAuth`. When a request supplies a valid environment access token through the `X-Arcane-Agent-Token` header, `managerAuth` resolves the associated environment, installs an environment-scoped permission set, and immediately calls `next(c)`. This occurs before the middleware evaluates the `AdminRequired` option and verifies that the caller is a global administrator. As a result, an environment-scoped access token can access routes protected with `WithAdminRequired()`, despite the corresponding `EnvironmentPermissionSet` intentionally containing no global or sudo permissions. In v2.10.2, the affected admin-only surface is the manager's Go `pprof` diagnostic interface under: `/api/debug/pprof/*` This exposes diagnostic and runtime profiling information that the application explicitly intends to restrict to global administrators. The issue is an incorrect authorization vulnerability (CWE-863). ## Details ### 1. Environment access tokens are accepted by the manager authentication middleware The production authentication middleware is configured with an environment access-token resolver: `backend/internal/di/providers.go` Conceptually, the middleware is constructed as: ```go auth.NewAuthMiddleware(authService, cfg). WithApiKeyValidator(apiKey). WithEnvironmentAccessTokenResolver(env). WithPermissionResolver(role) ``` Therefore, the `X-Arcane-Agent-Token` authentication path is active in the production manager. ### 2. The environment-token path returns before authorization options are evaluated The relevant logic is in: `backend/internal/auth/middleware.go` `managerAuth` first checks the `X-Arcane-Agent-Token` header. When the token resolves to an environment, the middleware installs an environment-scoped permission set and immediately continues processing: ```go if agentToken := req.Header.Get(utils.HeaderAgentToken); agentToken != "" { if env, ok := m.resolveEnvironmentAccessToken(ctx, agentToken).Get(); ok { environmentScopedInternal(c, env) return next(c) } } ``` The important part is the unconditional: ```go return next(c) ``` The normal authentication path later evaluates the middleware's `AdminRequired` option: ```go ps := m.resolvePermissionsOrDeny(ctx, user) if m.options.AdminRequired && !ps.IsGlobalAdmin() { return c.JSON(http.StatusForbidden, common.APIError{ Code: "FORBIDDEN", Message: "You don't have permission to access this resource", }) } ``` The environment-token branch never reaches this check. Consequently, `WithAdminRequired()` has no effect when authentication succeeds through a valid environment access token. This creates an authorization inconsistency between authentication mechanisms: - normal user/session authentication → `AdminRequired` is enforced; - environment access-token authentication → `AdminRequired` is bypassed. ### 3. Environment tokens are intentionally not global-administrator credentials `backend/pkg/authz/permission_set.go` defines the effective permissions assigned to an environment access token. `EnvironmentPermissionSet(envID)` grants environment-scoped permissions only for the specified environment: ```go func EnvironmentPermissionSet(envID string) *PermissionSet { ps := NewPermissionSet() if envID == "" { return ps } for _, p := range AllPermissions() { if IsEnvScoped(p) { ps.AddEnv(envID, p) } } return ps } ``` The implementation explicitly establishes that these credentials do not receive global or sudo permissions. Therefore, an environment access token should not satisfy a global-administrator authorization requirement. The early return in `managerAuth` bypasses this intended privilege boundary. ### 4. `/api/debug/pprof/*` explicitly requires global-administrator authorization The diagnostic routes are registered in: `backend/api/ws/diagnostics.go` The `pprof` group is protected using: ```go pprofGroup := group.Group( "/debug/pprof", authMiddleware.WithAdminRequired().Add(), ) ``` The source also documents the intended authorization requirement by noting that pprof keeps the stricter admin-required gate. The group exposes handlers including: ```text /api/debug/pprof/ /api/debug/pprof/cmdline /api/debug/pprof/profile /api/debug/pprof/symbol /api/debug/pprof/trace /api/debug/pprof/heap /api/debug/pprof/goroutine /api/debug/pprof/allocs /api/debug/pprof/block /api/debug/pprof/mutex /api/debug/pprof/threadcreate ``` Named profiles are dispatched through `pprof.Handler`. Because `WithAdminRequired()` is bypassed by the environment-token branch, a valid environment access token can reach these handlers even though its permission set is not globally privileged. ### 5. Other middleware does not restore the missing authorization check The CSRF middleware recognizes `X-Arcane-Agent-Token` as a header-based credential and does not apply the normal cross-origin CSRF validation to such requests. Additionally, the environment proxy middleware passes through requests that do not target an `/environments/{id}/...` path. Therefore a request to: ```text /api/debug/pprof/* ``` can proceed to `managerAuth`, enter the environment-token authentication branch, and reach the pprof handler without another global-administrator authorization check being applied. ## Source-to-sink authorization path The vulnerable control flow is: ```text X-Arcane-Agent-Token | v environment access token resolver | v environment resolved successfully | v EnvironmentPermissionSet(environmentID) | v return next(c) | | AdminRequired check is skipped v /api/debug/pprof/* | v net/http/pprof handler ``` The security boundary violation occurs at the early `return next(c)`. ## Proof of Concept ### Preconditions The test requires: 1. A valid Arcane environment access token. 2. An Arcane manager running the affected code. 3. No global-administrator account or credentials. ### Test 1 — environment access token Send a request to an admin-protected pprof endpoint using only an environment access token: ```http GET /api/debug/pprof/heap?debug=1 HTTP/1.1 Host: arcane.example.com X-Arcane-Agent-Token: <VALID_ENVIRONMENT_ACCESS_TOKEN> ``` No administrator session cookie or administrator Bearer token is supplied. ### Vulnerable behavior On an affected instance, the request is expected to reach the pprof handler instead of being rejected by `WithAdminRequired()`. A successful response demonstrates that the environment-token authentication branch bypasses the administrator requirement. For example, the response may contain the Go heap profiling output generated by `net/http/pprof`. ### Test 2 — non-admin user contrast case Send the same request using a normal authenticated non-global-admin user: ```http GET /api/debug/pprof/heap?debug=1 HTTP/1.1 Host: arcane.example.com Authorization: Bearer <NON_ADMIN_ACCESS_TOKEN> ``` The expected result is: ```http HTTP/1.1 403 Forbidden ``` with an authorization error indicating that the user does not have permission to access the resource. This contrast demonstrates the authorization inconsistency: ```text environment-scoped token -> admin gate skipped -> pprof handler reached normal non-admin user -> admin gate evaluated -> HTTP 403 ``` ### Expected secure behavior A valid environment access token should receive: ```http HTTP/1.1 403 Forbidden ``` for every route protected with `WithAdminRequired()`. Only a caller whose effective permission set satisfies `IsGlobalAdmin()` should be allowed to access these routes. ## Impact An attacker who obtains a valid environment access token can cross the intended authorization boundary between an individual environment and manager-wide administrative functionality. In the currently identified route configuration, this allows unauthorized access to the manager's Go `pprof` diagnostic endpoints. Depending on the requested profile, these endpoints can expose internal runtime and diagnostic information such as: - goroutine stack traces; - function and package names; - allocation and heap profiling information; - CPU profiling information; - runtime execution traces; - process command-line information; - mutex, block, thread and allocation profiling data. This information is normally restricted to global administrators by Arcane's explicit use of `WithAdminRequired()`. Some profiling operations may also impose additional CPU, memory, or tracing overhead while being collected. Importantly, this report does **not** assume that Go's pprof heap endpoint is an arbitrary raw-process-memory dump. Direct extraction of session tokens, environment access tokens, passwords, or other credentials from pprof output has not been demonstrated and is therefore not claimed as part of the confirmed impact. The confirmed security issue is the authorization bypass itself and the resulting unauthorized exposure of administrator-restricted diagnostic functionality. ## Root Cause The root cause is that authentication through an environment access token takes an early-success path: ```go environmentScopedInternal(c, env) return next(c) ``` before common middleware authorization options are evaluated. As a result, authorization requirements configured on the middleware are dependent on which authentication mechanism is used. Authentication establishes the identity and scope of the caller, but route-level authorization requirements such as `AdminRequired` should subsequently be applied consistently regardless of the authentication mechanism. ## Remediation The environment-token authentication path should not call `next(c)` before the configured authorization requirements have been evaluated. One approach is to resolve the environment token into its `EnvironmentPermissionSet` and then pass that permission set through the same authorization-option evaluation used by other authentication mechanisms. For example, logically: ```go if envTokenIsValid { ps := authz.EnvironmentPermissionSet(env.ID) if m.options.AdminRequired && !ps.IsGlobalAdmin() { return forbidden } environmentScopedInternal(c, env) return next(c) } ``` Because an `EnvironmentPermissionSet` intentionally has no global permissions, an environment token would then correctly receive HTTP 403 for `WithAdminRequired()` routes. As additional defense in depth, the pprof endpoints could explicitly reject environment access tokens and other environment-scoped authentication mechanisms, allowing access only through authentication mechanisms capable of representing a global administrator. It may also be worth considering whether pprof should be exposed in production by default or enabled only through an explicit diagnostic configuration option. ## Regression Tests The following cases should be covered: ```text Valid environment access token + /api/debug/pprof/heap => 403 Normal authenticated non-admin user + /api/debug/pprof/hea => 403 Unauthenticated request + /api/debug/pprof/heap => 401/403 Global administrator + /api/debug/pprof/heap => 200 ``` More generally, tests should verify that every authentication mechanism is subject to middleware options such as `AdminRequired`. The issue could also broadly be categorized as an authorization-check bypass caused by inconsistent authorization handling across authentication paths.. No claim of credential extraction, arbitrary process-memory disclosure, or global-administrator takeover is made unless separately demonstrated through dynamic testing.

CVE-2026-96628 Affected Arcane Versions

1 component(s)
Fixed Versions:
2.11.0
Product / Package Ecosystem Affected Versions Fixed Version
github.com/getarcaneapp/arcane/backend/v2
Go
< 2.11.0
2.11.0

References

Frequently Asked Questions

What is CVE-2026-96628?
CVE-2026-96628 is a security vulnerability in Arcane involving Environment access token bypasses the admin-required authorization gate on `/api/debug/pprof` under CWE-863: Incorrect Authorization.
Which Arcane versions are affected?
Affected versions include releases prior to 2.11.0 across affected packages: github.com/getarcaneapp/arcane/backend/v2.
What version fixes CVE-2026-96628?
Upgrading to 2.11.0 (or the latest patched release for your respective branch) resolves the vulnerability.
Is github.com/getarcaneapp/arcane/backend/v2 affected?
Yes, github.com/getarcaneapp/arcane/backend/v2 is affected in releases prior to 2.11.0. Upgrade your dependency to 2.11.0 or later.
What is the CVSS score of CVE-2026-96628?
CVE-2026-96628 has a CVSS v3.1 base score of 4.3 (MODERATE) with vector string CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N.
What CWE is associated with CVE-2026-96628?
CVE-2026-96628 is classified under CWE-863: Incorrect Authorization (The product performs an authorization check when an actor attempts to access a resource or perform an action, but it does not correctly perform the check.).
How can I check Go dependencies for CVE-2026-96628?
Run the dependency tree command: 'inspect dependencies for github.com/getarcaneapp/arcane/backend/v2'. 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-mp22-58ff-6fhr",
  "modified" : "2026-10-16T21:12:04Z",
  "published" : "2026-10-16T21:12:03Z",
  "aliases" : [ "CVE-2026-96628" ],
  "summary" : "Arcane: Environment access token bypasses the admin-required authorization gate on `/api/debug/pprof`",
  "details" : "## Summary\n\nArcane v2.10.2 contains an authorization inconsistency in `AuthMiddleware.managerAuth`.\n\nWhen a request supplies a valid environment access token through the `X-Arcane-Agent-Token` header, `managerAuth` resolves the associated environment, installs an environment-scoped permission set, and immediately calls `next(c)`.\n\nThis occurs before the middleware evaluates the `AdminRequired` option and verifies that the caller is a global administrator.\n\nAs a result, an environment-scoped access token can access routes protected with `WithAdminRequired()`, despite the corresponding `EnvironmentPermissionSet` intentionally containing no global or sudo permissions.\n\nIn v2.10.2, the affected admin-only surface is the manager's Go `pprof` diagnostic interface under:\n\n`/api/debug/pprof/*`\n\nThis exposes diagnostic and runtime profiling information that the application explicitly intends to restrict to global administrators.\n\nThe issue is an incorrect authorization vulnerability (CWE-863).\n\n## Details\n\n### 1. Environment access tokens are accepted by the manager authentication middleware\n\nThe production authentication middleware is configured with an environment access-token resolver:\n\n`backend/internal/di/providers.go`\n\nConceptually, the middleware is constructed as:\n\n```go\nauth.NewAuthMiddleware(authService, cfg).\n    WithApiKeyValidator(apiKey).\n    WithEnvironmentAccessTokenResolver(env).\n    WithPermissionResolver(role)\n```\n\nTherefore, the `X-Arcane-Agent-Token` authentication path is active in the production manager.\n\n### 2. The environment-token path returns before authorization options are evaluated\n\nThe relevant logic is in:\n\n`backend/internal/auth/middleware.go`\n\n`managerAuth` first checks the `X-Arcane-Agent-Token` header.\n\nWhen the token resolves to an environment, the middleware installs an environment-scoped permission set and immediately continues processing:\n\n```go\nif agentToken := req.Header.Get(utils.HeaderAgentToken); agentToken != \"\" {\n    if env, ok := m.resolveEnvironmentAccessToken(ctx, agentToken).Get(); ok {\n        environmentScopedInternal(c, env)\n        return next(c)\n    }\n}\n```\n\nThe important part is the unconditional:\n\n```go\nreturn next(c)\n```\n\nThe normal authentication path later evaluates the middleware's `AdminRequired` option:\n\n```go\nps := m.resolvePermissionsOrDeny(ctx, user)\n\nif m.options.AdminRequired && !ps.IsGlobalAdmin() {\n    return c.JSON(http.StatusForbidden, common.APIError{\n        Code:    \"FORBIDDEN\",\n        Message: \"You don't have permission to access this resource\",\n    })\n}\n```\n\nThe environment-token branch never reaches this check.\n\nConsequently, `WithAdminRequired()` has no effect when authentication succeeds through a valid environment access token.\n\nThis creates an authorization inconsistency between authentication mechanisms:\n\n- normal user/session authentication → `AdminRequired` is enforced;\n    \n- environment access-token authentication → `AdminRequired` is bypassed.\n    \n\n### 3. Environment tokens are intentionally not global-administrator credentials\n\n`backend/pkg/authz/permission_set.go` defines the effective permissions assigned to an environment access token.\n\n`EnvironmentPermissionSet(envID)` grants environment-scoped permissions only for the specified environment:\n\n```go\nfunc EnvironmentPermissionSet(envID string) *PermissionSet {\n    ps := NewPermissionSet()\n\n    if envID == \"\" {\n        return ps\n    }\n\n    for _, p := range AllPermissions() {\n        if IsEnvScoped(p) {\n            ps.AddEnv(envID, p)\n        }\n    }\n\n    return ps\n}\n```\n\nThe implementation explicitly establishes that these credentials do not receive global or sudo permissions.\n\nTherefore, an environment access token should not satisfy a global-administrator authorization requirement.\n\nThe early return in `managerAuth` bypasses this intended privilege boundary.\n\n### 4. `/api/debug/pprof/*` explicitly requires global-administrator authorization\n\nThe diagnostic routes are registered in:\n\n`backend/api/ws/diagnostics.go`\n\nThe `pprof` group is protected using:\n\n```go\npprofGroup := group.Group(\n    \"/debug/pprof\",\n    authMiddleware.WithAdminRequired().Add(),\n)\n```\n\nThe source also documents the intended authorization requirement by noting that pprof keeps the stricter admin-required gate.\n\nThe group exposes handlers including:\n\n```text\n/api/debug/pprof/\n/api/debug/pprof/cmdline\n/api/debug/pprof/profile\n/api/debug/pprof/symbol\n/api/debug/pprof/trace\n/api/debug/pprof/heap\n/api/debug/pprof/goroutine\n/api/debug/pprof/allocs\n/api/debug/pprof/block\n/api/debug/pprof/mutex\n/api/debug/pprof/threadcreate\n```\n\nNamed profiles are dispatched through `pprof.Handler`.\n\nBecause `WithAdminRequired()` is bypassed by the environment-token branch, a valid environment access token can reach these handlers even though its permission set is not globally privileged.\n\n### 5. Other middleware does not restore the missing authorization check\n\nThe CSRF middleware recognizes `X-Arcane-Agent-Token` as a header-based credential and does not apply the normal cross-origin CSRF validation to such requests.\n\nAdditionally, the environment proxy middleware passes through requests that do not target an `/environments/{id}/...` path.\n\nTherefore a request to:\n\n```text\n/api/debug/pprof/*\n```\n\ncan proceed to `managerAuth`, enter the environment-token authentication branch, and reach the pprof handler without another global-administrator authorization check being applied.\n\n## Source-to-sink authorization path\n\nThe vulnerable control flow is:\n\n```text\nX-Arcane-Agent-Token\n        |\n        v\nenvironment access token resolver\n        |\n        v\nenvironment resolved successfully\n        |\n        v\nEnvironmentPermissionSet(environmentID)\n        |\n        v\nreturn next(c)\n        |\n        |  AdminRequired check is skipped\n        v\n/api/debug/pprof/*\n        |\n        v\nnet/http/pprof handler\n```\n\nThe security boundary violation occurs at the early `return next(c)`.\n\n## Proof of Concept\n\n### Preconditions\n\nThe test requires:\n\n1. A valid Arcane environment access token.\n    \n2. An Arcane manager running the affected code.\n    \n3. No global-administrator account or credentials.\n    \n\n### Test 1 — environment access token\n\nSend a request to an admin-protected pprof endpoint using only an environment access token:\n\n```http\nGET /api/debug/pprof/heap?debug=1 HTTP/1.1\nHost: arcane.example.com\nX-Arcane-Agent-Token: <VALID_ENVIRONMENT_ACCESS_TOKEN>\n```\n\nNo administrator session cookie or administrator Bearer token is supplied.\n\n### Vulnerable behavior\n\nOn an affected instance, the request is expected to reach the pprof handler instead of being rejected by `WithAdminRequired()`.\n\nA successful response demonstrates that the environment-token authentication branch bypasses the administrator requirement.\n\nFor example, the response may contain the Go heap profiling output generated by `net/http/pprof`.\n\n### Test 2 — non-admin user contrast case\n\nSend the same request using a normal authenticated non-global-admin user:\n\n```http\nGET /api/debug/pprof/heap?debug=1 HTTP/1.1\nHost: arcane.example.com\nAuthorization: Bearer <NON_ADMIN_ACCESS_TOKEN>\n```\n\nThe expected result is:\n\n```http\nHTTP/1.1 403 Forbidden\n```\n\nwith an authorization error indicating that the user does not have permission to access the resource.\n\nThis contrast demonstrates the authorization inconsistency:\n\n```text\nenvironment-scoped token\n        -> admin gate skipped\n        -> pprof handler reached\n\nnormal non-admin user\n        -> admin gate evaluated\n        -> HTTP 403\n```\n\n### Expected secure behavior\n\nA valid environment access token should receive:\n\n```http\nHTTP/1.1 403 Forbidden\n```\n\nfor every route protected with `WithAdminRequired()`.\n\nOnly a caller whose effective permission set satisfies `IsGlobalAdmin()` should be allowed to access these routes.\n\n## Impact\n\nAn attacker who obtains a valid environment access token can cross the intended authorization boundary between an individual environment and manager-wide administrative functionality.\n\nIn the currently identified route configuration, this allows unauthorized access to the manager's Go `pprof` diagnostic endpoints.\n\nDepending on the requested profile, these endpoints can expose internal runtime and diagnostic information such as:\n\n- goroutine stack traces;\n    \n- function and package names;\n    \n- allocation and heap profiling information;\n    \n- CPU profiling information;\n    \n- runtime execution traces;\n    \n- process command-line information;\n    \n- mutex, block, thread and allocation profiling data.\n    \n\nThis information is normally restricted to global administrators by Arcane's explicit use of `WithAdminRequired()`.\n\nSome profiling operations may also impose additional CPU, memory, or tracing overhead while being collected.\n\nImportantly, this report does **not** assume that Go's pprof heap endpoint is an arbitrary raw-process-memory dump. Direct extraction of session tokens, environment access tokens, passwords, or other credentials from pprof output has not been demonstrated and is therefore not claimed as part of the confirmed impact.\n\nThe confirmed security issue is the authorization bypass itself and the resulting unauthorized exposure of administrator-restricted diagnostic functionality.\n\n## Root Cause\n\nThe root cause is that authentication through an environment access token takes an early-success path:\n\n```go\nenvironmentScopedInternal(c, env)\nreturn next(c)\n```\n\nbefore common middleware authorization options are evaluated.\n\nAs a result, authorization requirements configured on the middleware are dependent on which authentication mechanism is used.\n\nAuthentication establishes the identity and scope of the caller, but route-level authorization requirements such as `AdminRequired` should subsequently be applied consistently regardless of the authentication mechanism.\n\n## Remediation\n\nThe environment-token authentication path should not call `next(c)` before the configured authorization requirements have been evaluated.\n\nOne approach is to resolve the environment token into its `EnvironmentPermissionSet` and then pass that permission set through the same authorization-option evaluation used by other authentication mechanisms.\n\nFor example, logically:\n\n```go\nif envTokenIsValid {\n    ps := authz.EnvironmentPermissionSet(env.ID)\n\n    if m.options.AdminRequired && !ps.IsGlobalAdmin() {\n        return forbidden\n    }\n\n    environmentScopedInternal(c, env)\n    return next(c)\n}\n```\n\nBecause an `EnvironmentPermissionSet` intentionally has no global permissions, an environment token would then correctly receive HTTP 403 for `WithAdminRequired()` routes.\n\nAs additional defense in depth, the pprof endpoints could explicitly reject environment access tokens and other environment-scoped authentication mechanisms, allowing access only through authentication mechanisms capable of representing a global administrator.\n\nIt may also be worth considering whether pprof should be exposed in production by default or enabled only through an explicit diagnostic configuration option.\n\n## Regression Tests\n\nThe following cases should be covered:\n\n```text\nValid environment access token\n+ /api/debug/pprof/heap\n=> 403\n\nNormal authenticated non-admin user\n+ /api/debug/pprof/hea\n=> 403\n\nUnauthenticated request\n+ /api/debug/pprof/heap\n=> 401/403\n\nGlobal administrator\n+ /api/debug/pprof/heap\n=> 200\n```\n\nMore generally, tests should verify that every authentication mechanism is subject to middleware options such as `AdminRequired`.\n\nThe issue could also broadly be categorized as an authorization-check bypass caused by inconsistent authorization handling across authentication paths..\n \n\nNo claim of credential extraction, arbitrary process-memory disclosure, or global-administrator takeover is made unless separately demonstrated through dynamic testing.",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/getarcaneapp/arcane/backend/v2"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "2.11.0"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/getarcaneapp/arcane/security/advisories/GHSA-mp22-58ff-6fhr"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/getarcaneapp/arcane/pull/3881"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/getarcaneapp/arcane/commit/4fe4c7ed9483dff7d43e3c4bee6a92037ce886b4"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/getarcaneapp/arcane"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/getarcaneapp/arcane/releases/tag/backend/v2.11.0"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-863" ],
    "severity" : "MODERATE",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-10-16T21:12:03Z",
    "nvd_published_at" : null
  }
}