Cloudflare修复Containers跨租户磁盘数据泄露漏洞
Cloudflare Containers平台曾出现跨租户磁盘数据泄露问题,该平台同时支撑Cloudflare Sandboxes。部分Workers付费客户可能读取同一主机上其他客户容器遗留的磁盘块。问题根源不在Firecracker虚拟机隔离边界,而在底层存储分配器。安全研究员Oren Yomtov于9月4日通过漏洞赏金计划报告了该漏洞,平台随后完成修复,未发现被恶意利用的证据。
每个容器运行在Firecracker虚拟机内,虚拟机配有通过Linux device mapper精简配置管理的可写根磁盘。受影响资源池使用64 KiB精简块,并启用了skip_block_zeroing,使dm-thin在分配新块时不执行清零操作。攻击者只需向未映射区域写入4 KiB数据,系统就可能分配一个64 KiB物理块;未被覆盖的最多60 KiB空间可能保留前一容器的数据,并在原始磁盘读取时暴露。
研究人员借助ext4目录块校验和区分自身写入与外部数据。在6个生产部署中,5614个可测试目录块全部来自其他用户,共识别出2700个外部目录索引节点。在横跨四大洲的24个部署点和22个底层节点中,分别有18个和20个发现残留数据,恢复内容包括目录结构、数据库页以及结构完整的SQLite数据库。
该漏洞无法让攻击者指定受害者、工作负载或主机,也不能读取仍处于连接状态的磁盘,残留数据是否存在同样无法保证,取决于工作负载调度位置及已释放块的重新分配情况。研究人员没有证明能够篡改其他客户数据,也未展示对服务可用性的影响。相关讨论认为,容器、虚拟机和共享虚拟化环境都应单独验证存储层的租户隔离,不能只依赖网络或虚拟机边界。
Cloudflare在收到报告后于15:26(UTC)创建事件工单,18:45建立处理流程,21:27合并运行时修复,22:03完成新资源池和在线资源池的变更,并在当天23:15开始分批部署,9月7日全部完成。移除skip_block_zeroing只能恢复新分配块的默认清零行为,无法处理现有精简块设备和OCI镜像层缓存中的旧映射。
因此,平台停用了运行中的容器磁盘,在非高峰时段清空主机数据、重启虚拟机,并清理每台主机的镜像缓存,全部工作于9月19日完成。平台还依据“小规模写入后进行大规模读取”的特征,检索历史磁盘I/O遥测数据;结果显示,只有研究人员及内部工程师授权验证时产生过匹配活动。研究人员确认修复后概念验证失效,控制下恢复的数据已删除,Cloudflare于9月14日发放赏金。
本文基于公开渠道信息整理,内容可能存在不准确或遗漏之处,不代表本站立场,如内容涉及侵权或错误,请联系我们处理。
阅读原文