An issue was discovered in OpenStack Keystone before 29.0.2. The Keystone RBAC policy enforcer in enforce_call unconditionally merges the raw JSON request body into the policy enforcement dictionary via policy_dict.update(json_input.copy()), overwriting trusted target data that was previously set from database lookups. Because flask.request.get_json is called with force=True, this works regardless of Content-Type or HTTP method. Any authenticated user can inject arbitrary policy target attributes (e.g., user_id, project_id) into the request body to bypass RBAC checks and perform unauthorized operations on resources belonging to other users or projects. This was introduced in commit 5ea59f52 (Rocky/14.0.0).
{
"availability": "No subscription required",
"binaries": [
{
"binary_name": "keystone",
"binary_version": "2:21.0.1-0ubuntu2.4"
},
{
"binary_name": "keystone-common",
"binary_version": "2:21.0.1-0ubuntu2.4"
},
{
"binary_name": "python3-keystone",
"binary_version": "2:21.0.1-0ubuntu2.4"
}
]
}{
"availability": "No subscription required",
"binaries": [
{
"binary_name": "keystone",
"binary_version": "2:25.0.0-0ubuntu1.4"
},
{
"binary_name": "keystone-common",
"binary_version": "2:25.0.0-0ubuntu1.4"
},
{
"binary_name": "python3-keystone",
"binary_version": "2:25.0.0-0ubuntu1.4"
}
]
}{
"availability": "No subscription required",
"binaries": [
{
"binary_name": "keystone",
"binary_version": "2:28.0.0-0ubuntu1.3"
},
{
"binary_name": "keystone-common",
"binary_version": "2:28.0.0-0ubuntu1.3"
},
{
"binary_name": "python3-keystone",
"binary_version": "2:28.0.0-0ubuntu1.3"
}
]
}{
"availability": "No subscription required",
"binaries": [
{
"binary_name": "keystone",
"binary_version": "2:29.0.0-0ubuntu1.2"
},
{
"binary_name": "keystone-common",
"binary_version": "2:29.0.0-0ubuntu1.2"
},
{
"binary_name": "python3-keystone",
"binary_version": "2:29.0.0-0ubuntu1.2"
}
]
}