VDB
Sign up
MEDIUM5.5

GHSA-v859-c572-qh5p

ZITADEL: Improper Role Revocation on Granted Projects during Multiple Role Deletions

Quick fix

GHSA-v859-c572-qh5p — github.com/zitadel/zitadel: upgrade to the fixed version with the command below.

go get github.com/zitadel/zitadel@v4.16.0

Details

### Summary

A bug in how ZITADEL updates permissions when multiple project roles are deleted at the same time can cause some user permissions to be missed. This issue specifically affects **User Grants on Granted Projects** (projects shared between different organizations), **potentially** allowing users to keep access rights that were supposed to be completely removed.

### Impact

When an organization shares a project with another organization (a Project Grant), administrators can assign specific roles to users via a User Grant. If multiple roles are deleted from that project at the same time, a background process runs to strip those roles from the assigned users.

Because of an error in how ZITADEL loops through a user's list of roles during this specific cross-organization cleanup, deleting two or more roles at once **might** cause the system to accidentally skip over some of them.

> **Scope Note:** This vulnerability only affects **User Grants on Granted Projects**. Direct project roles and global organization roles are not impacted.

The risk depends entirely on what the skipped role allowed the user to do—if it was an administrative or high-privilege role, the user **could potentially** retain those elevated permissions within that granted project even after the role was officially deleted.

### Affected Versions

* **4.x:** `4.0.0` through `4.15.3` (including RC versions) * **3.x:** `3.0.0` through `3.4.12` (including RC versions)

Note: The 3.x release channel has reached End-of-Life (EOL) for security updates and will not receive a backported patch.

### Patches & Resolution

This issue has been fully resolved in the latest releases.

The update fixes the role-removal logic to ensure no roles are skipped. Furthermore, **this patch includes an automatic database migration**. When you update, the system will automatically scan your database, find any user permissions on granted projects that **may** have been accidentally left behind by this bug, and correct them.

- **4.x**: Upgrade to $\ge$[4.16.0](https://github.com/zitadel/zitadel/releases/tag/v4.16.0) - **3.x**: Update to $\ge$[4.16.0](https://github.com/zitadel/zitadel/releases/tag/v4.16.0) (or check out workarounds)

### Workarounds

There are no configuration workarounds. Upgrading to a patched version is the recommended solution and only way to trigger the automatic cleanup migration. If you cannot upgrade immediately, we recommend manually reviewing user permissions specifically for your **Granted Projects** where multiple roles were recently deleted.

### Questions

If you have any questions or comments about this advisory, please reach out to us at security@zitadel.com.

### Credits

Thanks to [AyushParkara](https://github.com/AyushParkara) for reporting this vulnerability.

Are you affected?

Enter the version of the package you're using.

Affected packages

Go/github.com/zitadel/zitadel
Introduced in: 0Fixed in: 4.16.0
Fixgo get github.com/zitadel/zitadel@v4.16.0

References