Description
ZTNET is a ZeroTier web UI for private controllers with multiuser and organization support. Prior to 0.8.0, any authenticated low-privilege user can permanently deactivate another account, including an administrator, through `POST /api/auth/user/invalidateUser`. In `src/pages/api/auth/user/invalidateUser.ts`, `getServerSession` checks only that a session exists and does not compare `session.user.id` with the client-supplied `userId`. Supplying a victim's `userId` and a `deviceId` for which no matching pair exists in `UserDevice` makes the handler set the target account's `isActive` to false. Login is then refused by `src/server/auth.ts` with `account-expired`. An attacker needs only a normal authenticated account and the victim's user ID, which may be obtainable from member lists, UI responses, logs, or other application metadata. This can lock administrators out, disrupt organization management, and deny access to any targeted user. This issue is fixed in version 0.8.0.
Published: 2026-10-30
Score: 8.1 High
EPSS: n/a
KEV: No
Impact: Account Deactivation / Denial of Service
Action: Immediate Patch
AI Analysis

Impact

Authenticated low‑privilege users can permanently deactivate any target account, including administrators, by sending a POST request to /api/auth/user/invalidateUser. The endpoint accepts a victim’s userId and any deviceId that does not match a stored pair, causing the target account’s isActive flag to be set to false. When the account is deactivated, login attempts fail with an account‑expired error, effectively locking the user out. This flaw allows an attacker to impair critical organizational users, disrupt management, and deny service to the target account. The weakness corresponds to Missing Access Control (CWE‑862).

Affected Systems

The vulnerability exists in the sinamics:Ztnet product in versions prior to 0.8.0. Users running any older release of ZTNET are susceptible if they have authenticated access.

Risk and Exploitability

Because the flaw is triggered by a standard authenticated session and requires only the victim’s user ID—which can be discovered from user lists or logs—an attacker can easily execute the privilege bypass. The CVSS score of 8.1 indicates high severity, while the absence of an EPSS score and a non‑KEV listing suggests that, at this time, the vulnerability has not yet been widely exploited, but its impact could still be significant in environments with many users if an attacker gains a low‑privilege account. The exploit would permanently deactivate target accounts, leading to lockouts for administrators and disrupting organization functionality.

Generated by OpenCVE AI on October 30, 2026 at 23:05 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade ZTNET to version 0.8.0 or later to apply the fix that enforces proper user‑identity checks on account deactivation requests.
  • Revoke or limit credentials for any accounts that may have been compromised and review the organization’s user permissions to reduce the number of users with deactivation rights.
  • Implement monitoring and alerts for account deactivation events to detect and respond promptly to suspicious activity.

Generated by OpenCVE AI on October 30, 2026 at 23:05 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 30 Oct 2026 21:15:00 +0000

Type Values Removed Values Added
Description ZTNET is a ZeroTier web UI for private controllers with multiuser and organization support. Prior to 0.8.0, any authenticated low-privilege user can permanently deactivate another account, including an administrator, through `POST /api/auth/user/invalidateUser`. In `src/pages/api/auth/user/invalidateUser.ts`, `getServerSession` checks only that a session exists and does not compare `session.user.id` with the client-supplied `userId`. Supplying a victim's `userId` and a `deviceId` for which no matching pair exists in `UserDevice` makes the handler set the target account's `isActive` to false. Login is then refused by `src/server/auth.ts` with `account-expired`. An attacker needs only a normal authenticated account and the victim's user ID, which may be obtainable from member lists, UI responses, logs, or other application metadata. This can lock administrators out, disrupt organization management, and deny access to any targeted user. This issue is fixed in version 0.8.0.
Title ZTNET privilege bypass: any user can deactivate arbitrary accounts via /api/auth/user/invalidateUser
Weaknesses CWE-862
References
Metrics cvssV3_1

{'score': 8.1, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H'}


Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-10-30T20:54:52.378Z

Reserved: 2026-07-14T22:48:09.780Z

Link: CVE-2026-62967

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-10-30T21:17:15.290

Modified: 2026-10-30T21:17:15.290

Link: CVE-2026-62967

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-30T23:30:15Z

Weaknesses