---
id: CVE-2026-62967
title: >-
  ZTNET privilege bypass: any user can deactivate arbitrary accounts via
  /api/auth/user/invalidateUser
summary: >-
  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/a…
severity: high
cvss: 8.1
cvssVector: 'CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H'
cvssSource: cna
cwe:
  - CWE-862
vendor: sinamics
product: ztnet
affected:
  - ztnet < 0.8.0
ssvc:
  exploitation: poc
  automatable: 'no'
  technicalImpact: partial
  timestamp: '2026-11-05T02:51:41.328149Z'
exploitAvailable: true
published: '2026-10-30'
updated: '2026-11-05'
sourceUpdated: '2026-11-05T02:52:07.605Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2026-62967'
references:
  - url: 'https://github.com/sinamics/ztnet/security/advisories/GHSA-vqfc-cmp9-c33q'
    label: 'https://github.com/sinamics/ztnet/security/advisories/GHSA-vqfc-cmp9-c33q'
  - url: 'https://github.com/sinamics/ztnet/pull/941'
    label: 'https://github.com/sinamics/ztnet/pull/941'
  - url: >-
      https://github.com/sinamics/ztnet/commit/7966af6e62aa5778d3a698cee97053fdcb07d742
    label: >-
      https://github.com/sinamics/ztnet/commit/7966af6e62aa5778d3a698cee97053fdcb07d742
  - url: 'https://github.com/sinamics/ztnet/releases/tag/v0.8.0'
    label: 'https://github.com/sinamics/ztnet/releases/tag/v0.8.0'
tags:
  - cve.org
  - exploit-available
epss: 0.00368
epssPercentile: 0.30842
ingestedAt: '2026-11-05T21:36:00.713Z'
---

## Overview

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.

## Affected

- `ztnet < 0.8.0`

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.
