OSSN/1254619
Keystone 在使用 REMOTE_USER 进行外部认证时可能允许用户身份冒用
总结
当使用“ExternalDefault”插件通过外部认证与 Keystone 交互时,包含“@”字符的外部用户名会在“@”字符处被截断,然后再映射到本地 Keystone 用户。这可能导致不同的外部用户映射到同一个本地 Keystone 用户,从而可能导致用户身份冒用。
受影响的服务 / 软件
Keystone, Havana
讨论
当 Keystone 在 Apache HTTP Server 中运行时,Web 服务器可以处理认证并将认证后的用户名作为 REMOTE_USER 环境变量传递给 Keystone。Keystone 中的认证插件处理外部认证行为。在 OpenStack 的 Havana 版本中,如果 REMOTE_USER 环境变量中提供的外部用户名包含“@”字符,Keystone 在使用“ExternalDefault”认证插件时只会使用“@”字符之前的部分作为用户名。这导致多个唯一的外部用户名可以映射到 Keystone 中的单个用户名。例如,外部用户名“jdoe@example1.com”和“jdoe@example2.com”都会映射到 Keystone 用户“jdoe”。这种行为可能被滥用,允许一个人冒用另一个类似命名的外部用户。
在 Havana 之前的 OpenStack 版本中,Keystone 使用 REMOTE_USER 环境变量中包含的整个值,因此这些版本不受此身份冒用问题的影响。
建议的操作
如果 Havana 版本中使用“ExternalDefault”插件进行外部认证,您应该确保外部用户名不包含“@”字符,除非您希望将类似命名的外部用户合并为 Keystone 侧的单个用户。
如果您的外部用户名包含“@”字符,并且您不希望将类似命名的外部用户合并为 Keystone 侧的单个用户,您可以尝试使用“ExternalDomain”插件。该插件将外部用户名中“@”字符之后的部分视为用户在 Keystone 中所属的域。如果外部用户名中“@”字符之后的部分映射到 Keystone 域名称,则允许类似命名的外部用户映射到单独的 Keystone 用户。要配置“ExternalDomain”认证插件,请将 Keystone keystone.conf 的“[auth]”部分中的“external”参数设置为如下所示
[auth] methods = external,password,token external = keystone.auth.plugins.external.ExternalDomain
如果以上建议都不适用于您的部署,可以创建一个自定义认证插件,该插件按原样使用包含“@”字符的外部用户名。
联系方式 / 参考文献
- Nathan Kinder, Red Hat
- 此 OSSN:https://bugs.launchpad.net/ossn/+bug/1254619
- 原始 LaunchPad Bug:https://bugs.launchpad.net/keystone/+bug/1254619
- OpenStack Security ML:openstack-security@lists.openstack.org
- OpenStack Security Group:https://launchpad.net/~openstack-ossg