OSSN/OSSN-0023
Keystone 在 INFO 日志级别下将认证令牌记录在 URL 中
总结
当客户端使用 Identity API 第 2 版访问 Keystone 时,令牌将作为某些请求 URL 的一部分被记录。具体来说,所有对 tokens 资源的请求都将在 INFO 级别被记录。
受影响的服务 / 软件
Keystone, Grizzly, Havana, Icehouse, Juno
讨论
令牌用于授权用户对 OpenStack 服务进行 API 请求。这允许先前已认证的用户无需再次提供其认证信息(例如用户名和密码)即可进行 API 请求。因此,在存储和通过网络传输时,它们非常敏感。理想情况下,令牌不应存储在磁盘上,以避免攻击者获取本地存储访问权限并在系统中重用它们。
Keystone 以 INFO 级别记录请求 URL,以便于系统操作和支持。不幸的是,当访问 tokens 资源时,URL 包含用户的密钥令牌,例如:(单行,换行)
INFO eventlet.wsgi.server [-] 10.0.0.66 - - [22/Aug/2014 12:39:01] "GET /v2.0/tokens/<plaintext_token> HTTP/1.1" 403 325 0.006539
大型系统通常使用远程日志记录机制,这些机制可能会使用未加密的协议,例如 syslog/udp。这可能导致将包含令牌的日志条目以明文形式分发到不受信任的网络上。目标日志收集系统也可能使用与本地日志文件不同的授权规则,这可能允许支持人员或存储日志的第三方访问令牌。
此外,任何处理相同请求的负载均衡器和代理服务器也可能会记录 URL。它们对此问题的配置和解决方案不在本说明的范围内,应单独检查。
Identity API 第 3 版不再通过 URL 传递令牌。这些信息而是使用请求标头或 POST 数据发送。
建议的操作
在可能的情况下,与 Keystone 服务交互的用户和服务应使用 Identity API v3 端点。如果不可能,将 Keystone 的日志级别限制为 WARN 将解决直接问题,但代价是删除潜在的有用日志信息。由于 Keystone 部署和配置的各种方式,'debug'、'verbose'、'default_log_levels' 以及任何 wsgi 服务器选项的交互都应考虑在此更改中。通过 eventlet 以外的服务器部署的 Keystone 需要他们自己的解决方案。
如果需要记录所有请求,可以通过使用第三方代理(如 Apache 或 Nginx)来实现,该代理具有配置,不会将完整的 URL 写入日志。例如,Nginx 可以配置为仅对匹配位置 '/v2.0/tokens/...’ 的请求切换到自定义日志格式,使用指令 'access_log'。
联系方式 / 参考文献
- 作者:Stanislaw Pitucha,HPE
- 此 OSSN:https://wiki.openstack.org/wiki/OSSN/OSSN-0023
- 原始 LaunchPad Bug:https://bugs.launchpad.net/keystone/+bug/1348844
- OpenStack Security ML:openstack-security@lists.openstack.org
- OpenStack Security Group:https://launchpad.net/~openstack-ossg