机密虚拟机LUKS2磁盘加密漏洞
漏洞概述
Trail of Bits披露了八个不同机密计算系统中使用Linux统一密钥设置版本2(LUKS2)进行磁盘加密的漏洞。利用这些漏洞,能够访问存储磁盘的恶意行为者可以提取磁盘上存储的所有机密数据,并可以任意修改磁盘内容。这些漏洞由可延展的元数据头引起,允许攻击者欺骗可信执行环境客户机使用空密码加密秘密数据。
以下CVE与此披露相关:
- CVE-2025-59054
- CVE-2025-58356
这是协调披露;我们已通知以下项目,他们在我们发布之前修复了问题。
受影响项目
- Oasis Protocol: oasis-sdk (v0.7.2)
- Phala Network: dstack (v0.5.4)
- Flashbots TDX: tdx-init (v0.2.0)
- Secret Network: secret-vm-ops
- Fortanix Salmiac: salmiac
- Edgeless Constellation: constellation (v2.24.0)
- Edgeless Contrast: contrast (v1.12.1, v1.13.0)
- Cosmian VM: cosmian-vm
我们通知了cryptsetup的维护者,在cryptsetup v2.8.1中引入了部分缓解措施。
机密虚拟机
受影响的系统是基于Linux的机密虚拟机(CVM)。这些不是具有用户登录的交互式Linux盒子;它们是专门的自动化系统,设计用于在不受信任的环境中处理秘密。典型用例是私有AI推理、私有区块链或多方数据协作。
此类系统应满足以下要求:
- 机密性:主机操作系统不应能够读取CVM内的内存或数据
- 完整性:主机操作系统不应能够干扰CVM的逻辑操作
- 真实性:远程方应能够验证他们正在与运行预期程序的真实CVM交互
LUKS2磁盘格式
使用LUKS2加密格式的磁盘以头开始,后跟实际加密数据。头包含二进制和JSON格式元数据部分的两个相同副本,后跟一些密钥槽。
图1:LUKS2磁盘加密格式
每个密钥槽包含使用单个用户密码或令牌加密的卷密钥副本。JSON元数据部分定义启用哪些密钥槽、用于解锁每个密钥槽的密码以及用于加密数据段的密码。
LUKS,无密钥
默认情况下,LUKS2使用AES-XTS加密,这是一种用于保持大小的加密的标准模式。在cryptsetup版本2.8.0中,以下头将被接受:
图3:加密设置为cipher_null-ecb的可接受头
cipher_null-ecb算法什么都不做。它忽略其密钥并返回未更改的数据。攻击者可以更改密码,调整一些摘要,并将结果磁盘交给不知情的CVM;然后CVM将使用该磁盘,就好像它是安全加密的一样,从完全未加密的卷读取配置数据并将秘密写入其中。
验证LUKS元数据
对于任何机密计算应用程序,在使用前必须完全验证LUKS头。幸运的是,cryptsetup提供了分离头模式,允许从tmpfs文件而不是不受信任的磁盘读取磁盘头。
有三种潜在的方法来验证头,一旦它驻留在受保护内存中:
- 使用MAC确保头在初始创建后未被修改
- 验证头参数以确保仅使用安全值
- 将头作为测量包含在TPM或远程KMS证明中
协调披露
披露按以下时间线发送:
- 2025年10月8日:在安全审查期间发现此模式的实例
- 2025年10月12日:向Cosmian VM披露
- 2025年10月14日:向Flashbots披露
- 2025年10月15日:向上游cryptsetup披露(#954)
- 2025年10月15日:通过Immunefi向Oasis Protocol披露
- 2025年10月18日:向Edgeless、Dstack、Confidential Containers、Fortanix和Secret Network披露
- 2025年10月19日:在cryptsetup 2.8.1中发布禁用密钥槽中cipher_null的部分补丁
截至2025年10月30日,我们已知以下补丁响应这些披露。