{"id":"CVE-2026-93854","aliases":["DEBIAN-CVE-2026-93854","EUVD-2026-83275","GHSA-4rvg-j972-3xw2","UBUNTU-CVE-2026-93854"],"status":"published","title":"In OpenStack Blazar before 17.0.1, the V2 lease API does not enforce object-level authorization...","description":"In OpenStack Blazar before 17.0.1, the V2 lease API does not enforce object-level authorization on its update and delete operations (PUT /v2/leases/{lease_id} and DELETE /v2/leases/{lease_id}). The policy authorize() wrapper attempts to load the target lease to build the authorization target from its owner, but it looks up the lease under the keyword \"lease_id\" whereas the controller methods name the parameter \"id\" (and the wsme_pecan.wsexpose wrapper delivers it positionally). The lookup returns None, and thus authorization falls back to the requesting user's own project_id/user_id instead of the target lease owner. Any authenticated user who knows a lease ID can therefore modify or delete leases belonging to other users and projects, bypassing the intended ownership check.","severity":{"version":"4.0","score":7.2,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-11","score":0.00406,"percentile":0.3529,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-1025"],"published":"2026-09-18T18:57:56Z","modified":"2026-10-17T13:01:18Z","fixes":[{"ecosystem":"Debian:14","package":"blazar","fixed_in":["18.0.0~rc1-3"],"sources":["osv"]}],"affected":[{"source":"osv","ecosystem":"Debian:13","package":"blazar","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["15.0.0-3","16.0.0-1","16.0.0~rc1-1","16.0.0~rc1-2","16.0.0~rc1-3","17.0.0-1","17.0.0-2","17.0.0~rc1-1","17.0.0~rc1-3","18.0.0~rc1-1","18.0.0~rc1-2","18.0.0~rc1-3","18.0.0~rc2-1"]},{"source":"osv","ecosystem":"Debian:14","package":"blazar","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"18.0.0~rc1-3"}]}],"versions":["15.0.0-3","16.0.0-1","16.0.0~rc1-1","16.0.0~rc1-2","16.0.0~rc1-3","17.0.0-1","17.0.0-2","17.0.0~rc1-1","17.0.0~rc1-3","18.0.0~rc1-1","18.0.0~rc1-2"]},{"source":"osv","ecosystem":"Ubuntu:26.10","package":"blazar","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["17.0.0-2"]},{"source":"osv","ecosystem":"Ubuntu:26.04:LTS","package":"blazar","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["15.0.0-3","16.0.0-1","17.0.0-2"]}],"products":[{"vendor":"openstack","product":"blazar"}],"references":[{"url":"https://launchpad.net/bugs/2162719","tags":["issue-tracking","report"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-93854"},{"url":"https://github.com/advisories/GHSA-4rvg-j972-3xw2"},{"url":"https://security-tracker.debian.org/tracker/CVE-2026-93854","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2026-93854","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-93854","tags":["report"]}],"sources":{"cve":[{"id":"CVE-2026-93854","description":"In OpenStack Blazar before 17.0.1, the V2 lease API does not enforce object-level authorization on its update and delete operations (PUT /v2/leases/{lease_id} and DELETE /v2/leases/{lease_id}). The policy authorize() wrapper attempts to load the target lease to build the authorization target from its owner, but it looks up the lease under the keyword \"lease_id\" whereas the controller methods name the parameter \"id\" (and the wsme_pecan.wsexpose wrapper delivers it positionally). The lookup returns None, and thus authorization falls back to the requesting user's own project_id/user_id instead of the target lease owner. Any authenticated user who knows a lease ID can therefore modify or delete leases belonging to other users and projects, bypassing the intended ownership check.","status":"published","published":"2026-09-18T18:57:56.107Z","modified":"2026-09-22T15:19:34.21Z","cvss":[{"version":"4.0","score":7.2,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N","level":"high","assessor":"cna"}],"cwes":["CWE-1025"],"updated_at":"2026-11-02T14:19:54.122945Z"}],"euvd":[{"id":"EUVD-2026-83275","description":"In OpenStack Blazar before 17.0.1, the V2 lease API does not enforce object-level authorization on its update and delete operations (PUT /v2/leases/{lease_id} and DELETE /v2/leases/{lease_id}). The policy authorize() wrapper attempts to load the target lease to build the authorization target from its owner, but it looks up the lease under the keyword \"lease_id\" whereas the controller methods name the parameter \"id\" (and the wsme_pecan.wsexpose wrapper delivers it positionally). The lookup returns None, and thus authorization falls back to the requesting user's own project_id/user_id instead of the target lease owner. Any authenticated user who knows a lease ID can therefore modify or delete leases belonging to other users and projects, bypassing the intended ownership check.","status":"published","published":"2026-09-18T18:57:56Z","modified":"2026-09-22T15:19:34Z","cvss":[{"version":"4.0","score":7.2,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N","level":"high"}],"updated_at":"2026-11-02T17:28:02.937716Z"}],"ghsa":[{"id":"GHSA-4rvg-j972-3xw2","title":"In OpenStack Blazar before 17.0.1, the V2 lease API does not enforce object-level authorization...","description":"In OpenStack Blazar before 17.0.1, the V2 lease API does not enforce object-level authorization on its update and delete operations (PUT /v2/leases/{lease_id} and DELETE /v2/leases/{lease_id}). The policy authorize() wrapper attempts to load the target lease to build the authorization target from its owner, but it looks up the lease under the keyword \"lease_id\" whereas the controller methods name the parameter \"id\" (and the wsme_pecan.wsexpose wrapper delivers it positionally). The lookup returns None, and thus authorization falls back to the requesting user's own project_id/user_id instead of the target lease owner. Any authenticated user who knows a lease ID can therefore modify or delete leases belonging to other users and projects, bypassing the intended ownership check.","status":"published","published":"2026-09-18T21:32:24Z","modified":"2026-09-18T21:32:26Z","cvss":[{"version":"4.0","score":7.2,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","level":"high"}],"cwes":["CWE-1025"],"updated_at":"2026-11-02T15:12:12.782251Z"}],"nvd":[{"id":"CVE-2026-93854","description":"In OpenStack Blazar before 17.0.1, the V2 lease API does not enforce object-level authorization on its update and delete operations (PUT /v2/leases/{lease_id} and DELETE /v2/leases/{lease_id}). The policy authorize() wrapper attempts to load the target lease to build the authorization target from its owner, but it looks up the lease under the keyword \"lease_id\" whereas the controller methods name the parameter \"id\" (and the wsme_pecan.wsexpose wrapper delivers it positionally). The lookup returns None, and thus authorization falls back to the requesting user's own project_id/user_id instead of the target lease owner. Any authenticated user who knows a lease ID can therefore modify or delete leases belonging to other users and projects, bypassing the intended ownership check.","status":"published","published":"2026-09-18T19:17:25.44Z","modified":"2026-09-22T19:56:19.073Z","cvss":[{"version":"4.0","score":7.2,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","level":"high","assessor":"secondary"}],"cwes":["CWE-1025"],"updated_at":"2026-11-02T14:12:50.043898Z"}],"osv":[{"id":"DEBIAN-CVE-2026-93854","description":"In OpenStack Blazar before 17.0.1, the V2 lease API does not enforce object-level authorization on its update and delete operations (PUT /v2/leases/{lease_id} and DELETE /v2/leases/{lease_id}). The policy authorize() wrapper attempts to load the target lease to build the authorization target from its owner, but it looks up the lease under the keyword \"lease_id\" whereas the controller methods name the parameter \"id\" (and the wsme_pecan.wsexpose wrapper delivers it positionally). The lookup returns None, and thus authorization falls back to the requesting user's own project_id/user_id instead of the target lease owner. Any authenticated user who knows a lease ID can therefore modify or delete leases belonging to other users and projects, bypassing the intended ownership check.","status":"published","published":"2026-09-18T19:17:25.44Z","modified":"2026-09-29T10:00:09.07272669Z","cvss":[{"version":"4.0","score":7.2,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","level":"high"}],"updated_at":"2026-11-02T15:46:06.846102Z"},{"id":"UBUNTU-CVE-2026-93854","description":"In OpenStack Blazar before 17.0.1, the V2 lease API does not enforce object-level authorization on its update and delete operations (PUT /v2/leases/{lease_id} and DELETE /v2/leases/{lease_id}). The policy authorize() wrapper attempts to load the target lease to build the authorization target from its owner, but it looks up the lease under the keyword \"lease_id\" whereas the controller methods name the parameter \"id\" (and the wsme_pecan.wsexpose wrapper delivers it positionally). The lookup returns None, and thus authorization falls back to the requesting user's own project_id/user_id instead of the target lease owner. Any authenticated user who knows a lease ID can therefore modify or delete leases belonging to other users and projects, bypassing the intended ownership check.","status":"published","published":"2026-09-18T19:17:00Z","modified":"2026-10-17T13:01:18.603609977Z","cvss":[{"version":"4.0","score":7.2,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N","level":"high"}],"updated_at":"2026-11-02T16:57:44.071534Z"}]}}
