OSSN-0021 - Keystone trusts on compromised account
Adding a description of the issue of verifying Keystone trust in case of account compromise. Including examples of API interaction to help check the situation. Closes-Bug: #1341849 Change-Id: Iaf38c214d553dfd4dfe29dac9dc1496c061fb765
This commit is contained in:
parent
78e62638d7
commit
9aaa0e77ad
69
notes/OSSN-0021
Normal file
69
notes/OSSN-0021
Normal file
@ -0,0 +1,69 @@
|
||||
Owners of compromised accounts should verify Keystone trusts
|
||||
---
|
||||
|
||||
### Summary ###
|
||||
The Keystone 'trusts' API allows for delegation of privileges to one
|
||||
user on behalf of another. This API can allow for an attacker of a
|
||||
compromised account to set up backdoor access into the account. This
|
||||
backdoor may not be easily detected, even if the account compromise is
|
||||
detected.
|
||||
|
||||
### Affected Services / Software ###
|
||||
Keystone, Grizzly, Havana, Icehouse
|
||||
|
||||
### Discussion ###
|
||||
The Keystone trusts system allows for delegation of roles to Keystone
|
||||
users without disclosing the main token, or sharing the account secret
|
||||
key with those users. That means, after an account is compromised, the
|
||||
change of the secret key and the invalidation of existing tokens may not
|
||||
be enough to prevent future access from an attackers.
|
||||
|
||||
If an attacker obtains access to the account (via stolen credentials or
|
||||
service exploitation), they can create a new Keystone trust. This new
|
||||
trust may grant access not dependent on any knowledge of the compromised
|
||||
user's secret key and can also be set to never expire. In this case, the
|
||||
trust has to be manually found and removed by the account owner.
|
||||
|
||||
Information about using trusts can be found at:
|
||||
|
||||
https://wiki.openstack.org/wiki/Keystone/Trusts
|
||||
|
||||
### Recommended Actions ###
|
||||
If the account has been compromised, or is being audited, the owner
|
||||
should check the list of active trusts and verify that:
|
||||
|
||||
- all the active trusts are needed
|
||||
- all the active trusts have the expected roles and delegation depth
|
||||
- all the active trusts have appropriate expiration lifetimes
|
||||
|
||||
At the time of writing this OSSN, trusts can be listed by using the
|
||||
Keystone API directly:
|
||||
|
||||
---- begin CLI example ----
|
||||
# get ENDPOINT from the last field of the output
|
||||
keystone endpoint-get --service identity --attr versionId \
|
||||
--value 3.0
|
||||
# get TOKEN from the last field of the output
|
||||
keystone token-get
|
||||
# list the trusts by running:
|
||||
curl -i -X GET "ENDPOINT/trusts/" -H "X-Auth-Token: TOKEN" \
|
||||
-H "Content-Type: application/json" -H "Accept: application/json"
|
||||
---- end CLI example ----
|
||||
|
||||
If some trust (with id TRUST_ID) is identified as invalid, it can be
|
||||
deleted using:
|
||||
|
||||
---- being CLI example ----
|
||||
curl -i -X DELETE "ENDPOINT/trusts/TRUST_ID" \
|
||||
-H "X-Auth-Token: TOKEN" -H "Content-Type: application/json" \
|
||||
-H "Accept: application/json"
|
||||
---- end CLI example ----
|
||||
|
||||
In the future, operators will be able to use keystoneclient for a more
|
||||
convenient method of accessing and updating this information.
|
||||
|
||||
### Contacts / References ###
|
||||
This OSSN : https://wiki.openstack.org/wiki/OSSN/OSSN-0021
|
||||
Original LaunchPad Bug : https://bugs.launchpad.net/ossn/+bug/1341849
|
||||
OpenStack Security ML : openstack-security@lists.openstack.org
|
||||
OpenStack Security Group : https://launchpad.net/~openstack-ossg
|
Loading…
Reference in New Issue
Block a user