OSSN/OSSN-0064
默认使用 Keystone admin_token_auth 导致不安全操作
总结
OpenStack 部署者经常将一个仅用于初始安装的 Keystone 设置保留在其默认值。
攻击者可以通过提供字符串 "ADMIN" 作为 token 来获得 Keystone API 的管理员访问权限。
受影响的服务 / 软件
Keystone, Folsom, Grizzly, Havana, Icehouse, Juno, Kilo, Liberty, Mitaka
讨论
Keystone 服务支持一个名为 "admin_token_auth" 的身份验证中间件。它提供了一个简单的 token 用于访问 Keystone API,旨在仅用于 Keystone 的初始设置,允许部署者访问 Keystone API,从而可以设置适当的 Keystone 管理员帐户。
"admin_token_auth" 方法通过 keystone-paste.ini 文件进行配置。该方法验证的 "ADMIN_TOKEN" token 在 keystone.conf 文件中设置。
一些部署会从示例版本复制这些文件并直接使用,这意味着一些生产 OpenStack 云可能启用了 "admin_token_auth",并且 "ADMIN_TOKEN" 设置为默认值 "ADMIN"。
使用默认 Keystone 配置文件进行的 OpenStack 部署很可能受到攻击者的利用,攻击者可以使用 "ADMIN" token 访问 API。
建议的操作
"ADMIN_TOKEN" 用于 Keystone 部署的引导已弃用,将在未来的版本中移除。鼓励部署者使用 keystone-manage CLI 工具的 'bootstrap' 功能来引导 Keystone
$ keystone-manage bootstrap --bootstrap-password s3cr3t
现有部署应从 keystone-paste.ini 中的 API 管道中删除 "admin_token_auth" 中间件。
开始错误的 keystone-paste.ini 片段
[pipeline:public_api] pipeline = [...] token_auth admin_token_auth json_body [...]
[pipeline:admin_api] pipeline = [...] token_auth admin_token_auth json_body [...]
[pipeline:api_v3] pipeline = [...] token_auth admin_token_auth json_body [...]
结束错误的 keystone-paste.ini 片段
开始正确的 keystone-paste.ini 片段
[pipeline:public_api] pipeline = [...] token_auth json_body [...]
[pipeline:admin_api] pipeline = [...] token_auth json_body [...]
[pipeline:api_v3] pipeline = [...] token_auth json_body [...]
结束正确的 keystone-paste.ini 片段
联系方式 / 参考文献
- 作者:Robert Clark, IBM
- 此 OSSN : https://wiki.openstack.org/wiki/OSSN/OSSN-0064
- 原始 LaunchPad Bug : https://bugs.launchpad.net/ossn/+bug/1545789
- 邮件列表 [Security] 标签 : openstack-dev@lists.openstack.org
- OpenStack Security Group:https://launchpad.net/~openstack-ossg
- Keystone 变更 : https://review.openstack.org/#/c/282104/1/releasenotes/notes/admin_token-c634ec12fc714255.yaml