CVE-2026-96628
Arcane: Environment access token bypasses the admin-required authorization gate on `/api/debug/pprof`
Arcane is an interface for managing Docker containers, images, networks, and volumes. Prior to 2.11.0, AuthMiddleware.managerAuth accepts X-Arcane-Agent-Token credentials and the environment-token branch calls next before the AdminRequired option is evaluated. An attacker with a valid X-Arcane-Agent-Token can request /api/debug/pprof/* through a route protected by WithAdminRequired because EnvironmentPermissionSet is installed and the request continues without checking IsGlobalAdmin. This exposes administrator-restricted Go pprof runtime and diagnostic information and may impose profiling overhead. This issue is fixed in version 2.11.0.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- Low
- Integrity
- None
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
4.3
Arcane: Environment access token bypasses the admin-required authorization gate on `/api/debug/pprof`
Arcane is an interface for managing Docker containers, images, networks, and volumes. Prior to 2.11.0, AuthMiddleware.managerAuth accepts X-Arcane-Agent-Token credentials and the environment-token branch calls next before the AdminRequired option is evaluated. An attacker with a valid X-Arcane-Agent-Token can request /api/debug/pprof/* through a route protected by WithAdminRequired because EnvironmentPermissionSet is installed and the request continues without checking IsGlobalAdmin. This exposes administrator-restricted Go pprof runtime and diagnostic information and may impose profiling overhead. This issue is fixed in version 2.11.0.
- Record
CVE-2026-96628- CVSS 3.1
- 4.3 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N - Weakness
- CWE-863
- Updated
- 2026-11-02
EUVDEUVD-2026-103176
4.3
Arcane is an interface for managing Docker containers, images, networks, and volumes. Prior to 2.11.0, AuthMiddleware.managerAuth accepts X-Arcane-Agent-Token credentials and the environment-token branch calls next before the AdminRequired option is evaluated. An attacker with a valid X-Arcane-Agent-Token can request /api/debug/pprof/* through a route protected by WithAdminRequired because EnvironmentPermissionSet is installed and the request continues without checking IsGlobalAdmin. This exposes administrator-restricted Go pprof runtime and diagnostic information and may impose profiling overhead. This issue is fixed in version 2.11.0.
- Record
EUVD-2026-103176- CVSS 3.1
- 4.3 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-mp22-58ff-6fhr
4.3
Arcane: Environment access token bypasses the admin-required authorization gate on `/api/debug/pprof`
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:
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:
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:
return next(c)
The normal authentication path later evaluates the middleware's AdminRequired option:
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 →
AdminRequiredis enforced; -
environment access-token authentication →
AdminRequiredis 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:
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: …
- Record
GHSA-mp22-58ff-6fhr- CVSS 3.1
- 4.3 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N - Weakness
- CWE-863
- Updated
- 2026-11-02
NVD
4.3
Arcane is an interface for managing Docker containers, images, networks, and volumes. Prior to 2.11.0, AuthMiddleware.managerAuth accepts X-Arcane-Agent-Token credentials and the environment-token branch calls next before the AdminRequired option is evaluated. An attacker with a valid X-Arcane-Agent-Token can request /api/debug/pprof/* through a route protected by WithAdminRequired because EnvironmentPermissionSet is installed and the request continues without checking IsGlobalAdmin. This exposes administrator-restricted Go pprof runtime and diagnostic information and may impose profiling overhead. This issue is fixed in version 2.11.0.
- Record
CVE-2026-96628- CVSS 3.1
- 4.3 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N - Weakness
- CWE-863
- Updated
- 2026-11-02
OSV
4.3
Arcane: Environment access token bypasses the admin-required authorization gate on `/api/debug/pprof`
Arcane is an interface for managing Docker containers, images, networks, and volumes. Prior to 2.11.0, AuthMiddleware.managerAuth accepts X-Arcane-Agent-Token credentials and the environment-token branch calls next before the AdminRequired option is evaluated. An attacker with a valid X-Arcane-Agent-Token can request /api/debug/pprof/* through a route protected by WithAdminRequired because EnvironmentPermissionSet is installed and the request continues without checking IsGlobalAdmin. This exposes administrator-restricted Go pprof runtime and diagnostic information and may impose profiling overhead. This issue is fixed in version 2.11.0.
- Record
CVE-2026-96628- CVSS 3.1
- 4.3 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N - Weakness
- CWE-863
- Updated
- 2026-11-02
OSVGHSA-mp22-58ff-6fhr
4.3
Arcane: Environment access token bypasses the admin-required authorization gate on `/api/debug/pprof`
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:
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:
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:
return next(c)
The normal authentication path later evaluates the middleware's AdminRequired option:
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 →
AdminRequiredis enforced; -
environment access-token authentication →
AdminRequiredis 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:
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: …
- Record
GHSA-mp22-58ff-6fhr- CVSS 3.1
- 4.3 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N - Weakness
- CWE-863
- Updated
- 2026-11-02
OSVGO-2026-6806 No score
Arcane: Environment access token bypasses the admin-required authorization gate on `/api/debug/pprof` in github.com/getarcaneapp/arcane/backend
Arcane: Environment access token bypasses the admin-required authorization gate on /api/debug/pprof in github.com/getarcaneapp/arcane/backend
- Record
GO-2026-6806- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
github.com/getarcaneapp/arcane/backend/v2Go |
before 2.11.0 | 2.11.0 |
github.com/getarcaneapp/arcane/backendGo |
All versions | None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-96628 is a medium vulnerability (CVSS 4.3) in Getarcaneapp Arcane, published October 16, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.20%, the 10th percentile. Fixed in github.com/getarcaneapp/arcane/backend/v2 2.11.0.
References
github.com/getarcaneapp/arcane/security/advisories/GHSA-mp22-58ff-6fhr
github.com/getarcaneapp/arcane/pull/3881
github.com/getarcaneapp/arcane/commit/4fe4c7ed9483dff7d43e3c4bee6a92037ce886b4
github.com/getarcaneapp/arcane/releases/tag/backend/v2.11.0
github.com/advisories/GHSA-mp22-58ff-6fhr
github.com/CVEProject/cvelistV5/tree/main/cves/2026/96xxx/CVE-2026-96628.json
nvd.nist.gov/vuln/detail/CVE-2026-96628
github.com/getarcaneapp/arcane
Left out here: the rest of 2 source descriptions. The JSON record has them.