注意
本文档适用于 Ceph 开发版本。
CVE-2021-20288: cephx 中未经授权的全局_id 重用
总结
Ceph未能确保重新连接/续订的客户端在回收其全局ID值时呈现现有的凭证。能够进行身份验证的攻击者可以声明另一个客户端正在使用的全局ID,并可能中断其他集群服务。
背景
在Ceph中,每个经过身份验证的客户端或守护进程都被分配了一个数字全局ID标识符。该值假定在整个集群中是唯一的。当客户端重新连接到监控器(例如,由于网络断开连接)或续订其凭证时,它们应该呈现其旧的凭证,以证明先前拥有其全局ID,以便可以回收,从而在客户端实例的整个生命周期中保持不变。
Ceph未能正确检查旧凭证是否有效,允许任意全局ID被回收,即使它正在系统中另一个活动客户端使用。
攻击者要求
任何潜在的攻击者必须:
拥有集群的有效身份验证密钥
知道或猜测另一个客户端的全局ID
运行Ceph客户端代码的修改版本来回收另一个客户端的全局ID
构造适当的客户端消息或请求以中断服务或利用Ceph守护进程关于全局ID唯一性的假设
影响
机密性影响
无
完整性影响
部分影响。攻击者可能利用关于全局ID唯一性的假设来中断其他客户端的访问或中断Ceph守护进程。
可用性影响
高。攻击者可能利用关于全局ID唯一性的假设来中断其他客户端的访问或中断Ceph守护进程。
访问复杂性
高。客户端必须使用修改后的客户端代码来利用其他Ceph守护进程行为中的特定假设。
身份验证
是。攻击者还必须是经过身份验证的,并且能够访问它希望模仿或中断的客户端所访问的相同服务。
获得访问权限
部分影响。攻击者可以部分模仿另一个客户端。
受影响的版本
所有先前的Ceph监控器版本未能确保全局ID回收尝试是经过身份验证的。
此外,从Luminous v12.2.0开始的用户空间守护进程和客户端在提交a2eb6ae3fb57(“mon/monclient:并行搜索多个监控器”)之后未能安全地回收其全局ID。
所有版本的Linux内核客户端都进行了正确的身份验证。
修复版本
Pacific v16.2.1(及更高版本)
Octopus v15.2.11(及更高版本)
Nautilus v14.2.20(及更高版本)
修复详情
修复后的监控器现在正确要求客户端在
auth_allow_insecure_global_id_reclaim
是false
. 最初,默认情况下,此选项设置为true
,以便现有客户端可以在不中断的情况下继续运行,直到所有客户端都已升级。当此选项设置为false时,未修复的客户端在间歇性网络中断破坏其与监控器的连接后,将无法重新连接到集群,或者在其超时时(默认为72小时)无法续订其身份验证凭证。修复后的监控器如果
AUTH_INSECURE_GLOBAL_ID_RECLAIM_ALLOWED
健康警报。auth_allow_insecure_global_id_reclaim
启用,则会触发ceph health mute AUTH_INSECURE_GLOBAL_ID_RECLAIM_ALLOWED 1w
虽然不推荐,但也可以通过以下方式禁用警报:
ceph config set mon mon_warn_on_insecure_global_id_reclaim_allowed false
修复后的监控器可以在新客户端通过身份验证后立即断开连接(强制其重新连接和回收),以确定它们是否安全地回收全局ID。这允许集群和用户快速发现客户端是否会被要求安全回收全局ID所影响:大多数客户端将立即报告身份验证错误。此行为可以通过设置
auth_expose_insecure_global_id_reclaim
tofalse
:ceph config set mon auth_expose_insecure_global_id_reclaim false
修复后的监控器将对任何未安全回收其全局ID的客户端或守护进程触发
AUTH_INSECURE_GLOBAL_ID_RECLAIM
健康警报。auth_allow_insecure_global_id_reclaim
选项之前进行升级,以避免中断客户端访问。默认情况下(如果
auth_expose_insecure_global_id_reclaim
未禁用),客户端未能安全地回收全局ID将立即暴露并触发此健康警报。auth_expose_insecure_global_id_reclaim
已禁用,则不会在客户端被迫重新连接到监控器(例如,由于网络中断)或客户端续订其身份验证凭证(默认为72小时)之前触发此警报。身份验证凭证的默认生存时间(TTL)已从12小时增加到72小时。由于我们之前在回收客户端的全局ID时未能确保客户端的先前的凭证是有效的,因此客户端可以容忍比凭证TTL更长的网络中断,并且仍然可以回收其全局ID。一旦集群开始要求安全回收全局ID,断开连接时间超过TTL的客户端可能无法回收其全局ID,无法重新进行身份验证,并且直到重新启动之前无法继续与集群通信。将默认TTL增加到最小化此变更对用户的影响。
建议
用户应尽快升级到Ceph的修复版本。
用户应尽快升级任何未修复的客户端。默认情况下,可以通过检查
ceph health detail
输出轻松识别这些客户端的AUTH_INSECURE_GLOBAL_ID_RECLAIM
警报。如果所有客户端都无法立即升级,则可以通过以下方式暂时静音健康警报:
ceph health mute AUTH_INSECURE_GLOBAL_ID_RECLAIM 1w # 1 week ceph health mute AUTH_INSECURE_GLOBAL_ID_RECLAIM_ALLOWED 1w # 1 week
在所有客户端都已更新并且
AUTH_INSECURE_GLOBAL_ID_RECLAIM
警报不再存在后,应将集群设置为防止不安全的全局ID回收:ceph config set mon auth_allow_insecure_global_id_reclaim false
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.