Debian Patches
Status for keystone/2:29.0.2-2
| Patch | Description | Author | Forwarded | Bugs | Origin | Last update |
|---|---|---|---|---|---|---|
| install-missing-files.patch | install missing files | Thomas Goirand <zigo@debian.org> | not-needed | 2019-08-18 | ||
| do-not-set-chartset-in-flask-responce.patch | Do not set charset in flask responce =================================================================== |
Thomas Goirand <zigo@debian.org> | no | 2024-01-22 | ||
| set-deprecation-warnings-to-ignore.patch | Set deprecation warnings to ignore Otherwise, Keystone FTBFS in Unstable. | Thomas Goirand <zigo@debian.org> | no | 2025-03-13 | ||
| CVE-2026-80182_CVE-2026-80184_1_Ban_ec2credential_tokens_from_Keystone_API.patch | Ban ec2credential tokens from Keystone API EC2 credentials are supported by Keystone only to allow Swift to implement S3 protocol while using Keystone identities. There are no real reasons for ec2credential fernet tokens (after authenticating) being accepted by the Keystone itself. There are many barriers where Keystone explicitly checks and bans such credentials to prevent rescoping or accessing resources belonging to other projects. There have been multiple security issues due to missing guards. Instead of those individual barriers, simply bar such tokens from any Keystone operation except validating the token (which Swift needs to do) and re-authenticating (renewing the token). The latter is questionable on its own, but is kept for now. . Solve the problem by simply rejecting the ec2credential issued token in the auth middleware which runs before any authenticated request. The /auth/tokens are unauthenticated and as such are not affected. . Add a config option, [auth] ban_ec2credential_tokens, default True, so deployments with an undocumented dependency on using EC2-derived tokens directly against the API can opt out instead of being broken outright. Also add a release note, since this changes existing, documented API behavior for anyone relying on it. diff --git a/keystone/conf/auth.py b/keystone/conf/auth.py index 0de24b9..59d7121 100644 |
Artem Goncharov <artem.goncharov@gmail.com> | no | debian | upstream, https://review.opendev.org/c/openstack/keystone/+/1002082 | 2026-08-26 |
| CVE-2026-80182_CVE-2026-80184_2_trusts_oauth1_app-creds_reject_delegated_tokens_across_all_endpoints.patch | trusts, oauth1, app-creds: reject delegated tokens across all endpoints _check_application_credential() in trusts.py only recognized 'application_credential' in token.methods, so OAuth1 access-token-scoped and ec2credential-derived tokens were never blocked from creating, listing, reading, or deleting trusts -- unlike application_credential, which has had this restriction since LP#2148477. . Two more endpoints that mint a new persistent grant had the same gap: . - users.py's _block_delegated_token_app_creds (guarding application credential and access-rule CRUD) only checked trust_id/access_token_id, so ec2credential-scoped tokens could create, list, read, and delete application credentials. - os_oauth1.py's AuthorizeResource.put (PUT /v3/OS-OAUTH1/authorize) only checked is_delegated_auth (trust/oauth1) and application_credential, so an ec2credential-scoped token could authorize OAuth1 request tokens. . All three are extended to the same primary-auth-method allowlist used in credentials.py, users.py, and token.py: any token whose methods aren't entirely primary auth methods is rejected outright. Trust-scoped tokens are deliberately not blocked from trust operations on trust_id alone -- that's the trust redelegation feature working as designed (a trustee creating a further, narrower trust from one they were delegated) and trustee self-service reads of their own trusts. A trust-scoped token whose underlying method is itself delegated (an EC2 credential's blob can embed a trust_id, see keystone.api.credentials._assign_unique_id) is still caught by the method check regardless of trust scoping. application_credential keeps its existing, documented opt-in escape hatch for trust management (allow_insecure_application_credential_trust_escalation) and its unrestricted/restricted distinction for creating further application credentials (_check_unrestricted_application_credential); OAuth1 and EC2 credentials have no such use case and are blocked unconditionally everywhere. . This also closes off the underlying role-escalation path in trust creation: trust role validation checks the trustor's full role assignments, not the requesting token's own scoped roles, so a narrowly-scoped oauth1/ec2 token could previously delegate roles it was never itself authorized for. Blocking those token types from trust creation removes the path to that gap without needing to touch the validation itself. . Neither the app-cred nor the OAuth1-authorize gap is reachable on current master, where a separate middleware change globally rejects any caller token with 'ec2credential' in its methods before Flask routing -- but that change is not backported to stable branches, so both gaps are live there. Fixed at the source regardless, so the guard doesn't depend on an unrelated middleware check remaining in place. . An empty token.methods list (e.g. an ec2credential-derived token that lost its methods on a fernet cache-miss round-trip -- ec2credential has no bit in the method bitmask) is also treated as delegated at all three call sites: _PRIMARY_AUTH_METHODS.issuperset([]) is True, so without this an empty list would otherwise be accepted as 'all primary'. . Consolidated the three independent _PRIMARY_AUTH_METHODS copies (this patch, LP#2158538, LP#2159643) into keystone.api._shared.delegation, per gtema's review comment #16 -- now that all three land together the NameError-avoidance reason for keeping them separate no longer applies. Also replaced the hardcoded method list with an operator-extensible one ([auth] additional_primary_auth_methods): a hardcoded allowlist blocks any third-party auth plugin (e.g. a site-specific SSO integration) from reauthenticating/managing its own trusts, app-creds, and OAuth1 tokens, since it can never appear in a list only keystone maintainers can edit. diff --git a/keystone/api/_shared/delegation.py b/keystone/api/_shared/delegation.py new file mode 100644 index 0000000..5812ec6 |
Grzegorz Grasza <xek@redhat.com> | no | debian | upstream, https://review.opendev.org/c/openstack/keystone/+/1002303 | 2026-08-27 |
| CVE-2026-80182_CVE-2026-80184_3_lp-2158538-2026.1.patch | auth: reject delegated tokens from token-method reauthentication token_authenticate() unconditionally blocks trust-scoped and OAuth1-scoped tokens from creating another token via the token method, but application_credential tokens were only blocked from requesting an explicit scope -- an omitted scope fell through to the user's default-project scoping, letting an app-cred token bound to project A come back scoped to the user's default project B. ec2credential tokens matched no check at all, so they could rescope via an explicit scope to any project the underlying user has a role on, not just a default-project fallback. . Both are the same root cause: application credentials and EC2 credentials are deliberately narrow, single-project grants, and the "token" method's rescoping logic never accounted for that, treating them like a normal user session that's free to move between any of its own role assignments. . Block application_credential tokens from this path entirely, matching trust/OAuth1, and add a primary-auth-method allowlist fallback so ec2credential, and any future delegated method, is rejected the same way by default. . diff --git a/keystone/auth/plugins/token.py b/keystone/auth/plugins/token.py index 428d4abd9..3ecb8f9b3 100644 |
Grzegorz Grasza <xek@redhat.com> | yes | debian upstream | https://review.opendev.org/c/openstack/keystone/+/1002304 | 2026-08-27 |
| CVE-2026-80182_CVE-2026-80184_4_auth_encode_ec2credential_and_oauth2_credential_in_the_method_bitmask.patch | auth: encode ec2credential and oauth2_credential in the method bitmask convert_method_list_to_integer() builds its map from CONF.auth.methods, so a method name absent from that list is silently dropped and the result is 0, which convert_integer_to_method_list() turns back into an empty list. . 'ec2credential' (keystone.api._shared.EC2_S3_Resource) and 'oauth2_credential' (keystone.api.os_oauth2) are written into token.methods by endpoints that are not auth plugins, so they cannot be listed in CONF.auth.methods: load_auth_methods() would look for a keystone.auth.<name> entry point that does not exist, and the name would become client-requestable on POST /v3/auth/tokens. Neither has ever survived the fernet round-trip. . Master already ships the EC2 API ban (910ebab06) which rejects tokens with 'ec2credential' in token.methods. Without this round-trip fix that check never sees the method on a fernet token, so the ban is a no-op for issued tokens. . Reserve fixed high bits for both so they round-trip. High and fixed means they never collide with the sequential indexes and adding one never shifts an existing index, so tokens in circulation stay decodable. . This does not fix tokens already issued: they carry the integer 0 and still decode to an empty list. diff --git a/keystone/auth/plugins/core.py b/keystone/auth/plugins/core.py index 475c9cb..f5d133c 100644 |
Benjamin Pinchon <benjamin.pinchon@corp.ovh.com> | no | debian | upstream, https://review.opendev.org/c/openstack/keystone/+/1002303 | 2026-08-27 |
| CVE-2026-80182_CVE-2026-80184_5_fix-unit-test.patch | Fix unit test | Thomas Goirand <zigo@debian.org> | no | debian | 2026-08-26 | |
| CVE-2026-80183_Prevent_unauthorized_project-scoped_assignment_list.patch | CVE-2026-80183 Prevent unauthorized project-scoped assignment list Any user holding `role:reader` on any project could list all role assignments under any domain by passing a domain ID as `scope.project.id` to `GET /v3/role_assignments?include_subtree`. Domain projects store `domain_id=null`, which matched the `null` `domain_id` of any project-scoped token in the oslo.policy string comparison, bypassing the domain-reader restriction. An explicit `not None:%(target.domain_id)s` guard has been added to the affected policy rules. diff --git a/keystone/common/policies/role_assignment.py b/keystone/common/policies/role_assignment.py index 76c9182..10137e5 100644 |
Artem Goncharov <artem.goncharov@gmail.com> | yes | debian upstream | upstream, https://review.opendev.org/c/openstack/keystone/+/1002412 | 2026-08-27 |
All known versions for source package 'keystone'
- 2:29.0.2-2 (sid)
- 2:29.0.1-2 (forky)
- 2:27.0.0-3+deb13u4 (trixie-security, trixie)
- 2:22.0.2-0+deb12u3 (bookworm, bookworm-security)
