CVE-2026-73293: Semaphore UI: Manager-to-owner privilege escalation via custom-role slug collision
Semaphore resolves a project member’s effective permissions in ProjectMiddleware by looking up a role row whose slug matches the member’s assigned role, and overwrites the built-in permission bitmask with that row’s value. A member holding the built-in manager role creates a custom project role through POST /api/project/{id}/roles, a route gated only by the CanManageProjectResources permission that manager already holds.
The role-creation validator does not reserve the built-in slug names (owner, manager, task_runner, guest) and sets no ceiling on the permission bits a caller may grant. A manager creates a role with slug manager carrying the full bitmask 15, including the two owner-only bits CanUpdateProject and CanManageProjectUsers that manager does not hold. The slug lookup that backs permission resolution ignores project scope, so this attacker-created row is returned on the next request and the manager’s effective permissions become owner-equivalent.
Result: a project manager escalates to full owner of the project with one authenticated request, then adds or removes members, changes project settings, deletes the project, or demotes the legitimate owner.
References
- github.com/advisories/GHSA-cxvf-gvfq-36w2
- github.com/semaphoreui/semaphore/commit/1c4bb65df114962134f8829d4a03667106a01a68
- github.com/semaphoreui/semaphore/commit/bb2a4e1f08c8023e618f8dd6eaca73554f2c33bb
- github.com/semaphoreui/semaphore/releases/tag/v2.18.19
- github.com/semaphoreui/semaphore/releases/tag/v2.19.5-beta5
- github.com/semaphoreui/semaphore/security/advisories/GHSA-cxvf-gvfq-36w2
- nvd.nist.gov/vuln/detail/CVE-2026-73293
Code Behaviors & Features
Detect and mitigate CVE-2026-73293 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →