Medium severity · published Sep 21, 2026
CVE-2026-91167
Warpgate: Missing authorization check on `PUT /users/:id/roles/:role_id` allows any admin to bypass the `AccessRolesAssign` permission boundary
6.0
CVSS
0.4%
EPSS
No
On KEV
Description
Warpgate is an open source SSH, HTTPS and MySQL bastion host for Linux. Prior to 0.28.4, PUT /@warpgate/admin/api/users/:id/roles/:role_id reaches api_update_user_role in warpgate-admin/src/api/users.rs through AdminContext but does not require AdminPermission::AccessRolesAssign. A limited administrator with any permission can update expires_at on an existing UserRoleAssignment and clear revoked_at, extending an expiring grant or reinstating a revoked grant. The endpoint cannot create a role assignment that never existed because it returns not found without a matching user and role pair. This issue is fixed in version 0.28.4.
Exploitation
Is it being used?
Exploit prediction (EPSS)0.4% · higher than 35% of CVEs
Exploited in the wildNo evidence yet
CISA KEVNot listed
Ransomware campaign useNot known
Affected products
Which versions
WA
warpgate · warp-tech
< 0.28.4 · source: vendor
References
NVD
https://nvd.nist.gov/vuln/detail/CVE-2026-91167
CVE.org
https://www.cve.org/CVERecord?id=CVE-2026-91167
github.com
https://github.com/warp-tech/warpgate/commit/c020900a9d85989e4280bd03184976bc33e2e61d
github.com
https://github.com/warp-tech/warpgate/releases/tag/v0.28.4
github.com
https://github.com/warp-tech/warpgate/security/advisories/GHSA-fjgc-484v-j6mf
More from warpgate
9.3
CVE-2026-58491
Warpgate: Reflected XSS in SSO return endpoint via attacker-controlled next parameter
7.7
CVE-2026-63330
Warpgate: Missing Admin Authorization on Live Recording Stream WebSocket Allows Any Authenticated User to Eavesdrop on Terminal Sessions
6.5
CVE-2026-44347
Warpgate: SSO CSRF -- State Token Not Validated on Return
5.7
CVE-2026-91166
Warpgate: Web SSH stores a jump host's key against the target's address, so it validates as the target
4.9
CVE-2026-63329
Warpgate: x-warpgate-username Header Not Stripped from Client Requests Enables Identity Spoofing to WebSocket Backend Targets
