Skip to content

Any Authenticated User Can Permanently Deregister Workspace from Rocket.Chat Cloud via Unprotected `/api/v1/fingerprint` Endpoint

High
julio-rocketchat published GHSA-8hhc-j325-rxqp Jun 15, 2026

Package

No package listed

Affected versions

<8.5.1, <8.4.4, <8.3.6, <8.2.6, <8.1.6, <8.0.7, <7.10.13

Patched versions

8.5.1, 8.4.4, 8.3.6, 8.2.6, 8.1.6, 8.0.7, 7.10.13

Description

Summary

The POST /api/v1/fingerprint REST endpoint enforces authentication (authRequired: true) but performs no authorization check. Any authenticated user — including a standard user role account — can call this endpoint with {"setDeploymentAs": "new-workspace"} to permanently deregister the workspace from Rocket.Chat Cloud. This wipes all cloud credentials, removes the workspace license, breaks push notifications for all users, and requires manual re-registration to recover.

Root Cause

File: apps/meteor/app/api/server/v1/misc.ts, lines 634–700

The route handler has authRequired: true but performs zero authorization:

API.v1.addRoute('fingerprint', { authRequired: true }, {
  async post() {
    // ❌ No check: no hasPermission('manage-cloud'), no isAdmin(), nothing
    const { setDeploymentAs } = this.bodyParams;

    if (setDeploymentAs === 'new-workspace') {
      await WorkspaceCredentials.removeAllCredentials();         // line 649
      await Settings.updateValueById('Cloud_Workspace_Id', ''); // line 651
      await Settings.updateValueById('Cloud_Workspace_Client_Id', '');
      await Settings.updateValueById('Cloud_Workspace_Client_Secret', '');
      await Settings.updateValueById('Cloud_Workspace_PublicKey', '');
      await Settings.updateValueById('Cloud_Workspace_License', '');
      await Settings.updateValueById('uniqueID', generateUniqueId()); // line 662
    }
  }
});

Contrast with correct pattern (same file, different endpoint):

// cloud.manualSync endpoint — properly authorized
API.v1.addRoute('cloud.manualSync', { authRequired: true }, {
  async post() {
    if (!this.userId) throw new Meteor.Error('error-not-allowed');
    await hasPermissionAsync(this.userId, 'manage-cloud'); // ← correct check
    // ...
  }
});

Impact

An attacker with any valid account on a target Rocket.Chat instance can:

  1. Wipe the workspace licenseCloud_Workspace_License cleared; paid features disabled immediately
  2. Break push notificationsCloud_Workspace_Client_Id/Secret cleared; all mobile push delivery stops for every user
  3. Sever Rocket.Chat Marketplace access — workspace is no longer recognized; apps stop receiving updates or may be disabled

Severity

High

CVSS overall score

This score calculates overall vulnerability severity from 0 to 10 and is based on the Common Vulnerability Scoring System (CVSS).
/ 10

CVSS v3 base metrics

Attack vector
Network
Attack complexity
Low
Privileges required
Low
User interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
High
Availability
High

CVSS v3 base metrics

Attack vector: More severe the more the remote (logically and physically) an attacker can be in order to exploit the vulnerability.
Attack complexity: More severe for the least complex attacks.
Privileges required: More severe if no privileges are required.
User interaction: More severe when no user interaction is required.
Scope: More severe when a scope change occurs, e.g. one vulnerable component impacts resources in components beyond its security scope.
Confidentiality: More severe when loss of data confidentiality is highest, measuring the level of data access available to an unauthorized user.
Integrity: More severe when loss of data integrity is the highest, measuring the consequence of data modification possible by an unauthorized user.
Availability: More severe when the loss of impacted component availability is highest.
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H

CVE ID

CVE-2026-55762

Weaknesses

Missing Authorization

The product does not perform an authorization check when an actor attempts to access a resource or perform an action. Learn more on MITRE.

Credits