abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · litebox-snp-fixed-crng
类别: 加密 / 可预测随机数生成器 影响范围: 本地(客户机对宿主机)
LiteBox v0.1.0(d8556e3)- 微软
SnpLinuxKernel::fill_bytes_crng 是一个进程全局的 FastRng,使用公开种子 0x4d595df4d0f33173 构造,并带有一个 FIXME 注释,要求调用受信任的宿主机。FastRng 文档说明为非加密的 xorshift*(MAGIC = 0x2545F4914F6CDD1D)。在此版本中,CrngProvider trait 仍然要求提供加密安全的流。客户机的 getrandom 和 /dev/urandom 都从这个互斥锁保护的生成器中取数。
SEV-SNP 的威胁模型是不可信的宿主机,它无法读取 C-bit 私有页面。一个公开的确定性 CRNG 不需要绕过 C-bit。任何读过种子的人(种子就在 crate 里)都可以从首次使用开始,或从任何观察到的前缀开始,重放后续每一个 CRNG 字节。
这个遗留问题导致客户机熵可预测。它不是 RCE,不是宿主机内核 RCE,也不是 VMPL0。
| ID | 暂无 CVE |
| 类别 | 加密 / 可预测随机数生成器 |
| 影响范围 | 本地(客户机对宿主机)。仅当客户机网络服务从此流中获取密钥时才可远程利用 |
| CWE | CWE-338、CWE-330 |
| CVSS | 高危:7.1 CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N |
| 产品 | microsoft/litebox |
| 受影响版本 | v0.1.0(d8556e33676e47244bfefa139c1e9ff95bd67d53)litebox_runner_snp。标签之后的 #1555 3715aa7(2026-10-08)是 main 分支上的修复 |
| 认证 | 不可信的 SNP hypervisor,或任何读过公开种子的人 |
| 许可证 | GNU Affero GPL v3.0 |
| 实验环境 | 仅 127.0.0.1。无 SNP 硬件 |
谁:不可信的 SNP hypervisor,或任何克隆了该 crate 的人。受害者是将 getrandom / urandom 视为机密的 SNP 客户机工作负载。
| 方法 + 目标 | 权限 |
|---|---|
独立的 Python xorshift* 对比该版本 FastRng,种子为 0x4d595df4d0f33173 | 相同的 512 字节流(两个 256 字节的 getrandom 块)。前 16 字节为 25c867c61e62ff15c0e2b0ba4fa70b4c |
该版本 snp_impl.rs 仍停留在 v0.1.0 | FIXME: call into the trusted host to get random bytes. 以及 FastRng::new_from_seed(0x4d595df4d0f33173) |
| 方法 + 目标 | 权限 |
|---|---|
客户机 SYS_getrandom -> fill_bytes_crng | 客户机用户空间中公开 xorshift* 流的下一个 256 字节块。GRND_RANDOM / GRND_NONBLOCK 被忽略 |
客户机 read(/dev/urandom) | 同一个互斥锁保护的流 |
| Hypervisor 或机外读取种子者 | 从首次使用开始,或从任何观察到的前缀开始,获取后续每一个 CRNG 字节,无需解密 SNP 私有内存 |
客户机 TLS / 密钥 / nonce 从 getrandom / urandom 获取 | 这些机密可预测。我不声称针对特定 TLS 栈 |
仅凭该 RNG 无法造成影响。
AT_RANDOM 在 Linux shim 上硬编码为 DEADBEEF(独立问题,单独评估低于高危)0x13374a4159421337)- 低于阈值read stdin、write stdio、futex、clock_gettime、clone3、exit),使用内核拥有的指针getrandom;LVBS 使用 ChaCha20 加 RDRAND 加平台根密钥。SNP 是生产平台,却没有这样做在 v0.1.0 上进行了十八次搜寻。SNP 的 fill_bytes_crng 是一个围绕 FastRng::new_from_seed(0x4d595df4d0f33173) 的 spin::mutex,并带有一个 FIXME。Linux 用户态和 LVBS 已经使用了真正的熵源。我没有 SNP 硬件。实验环境编译该版本的 FastRng 模块,在回环地址上提供该流,并与独立的 Python 重放进行匹配。main 分支上的 #1555(2026-10-08)将此函数切换为调用宿主机 getrandom。该提交不在标签中。
cd lab
./run.sh
回环地址 127.0.0.1:19120。Compose 项目 litebox-snp-fixed-crng。见证字符串 LITEBOX-SNP-FIXED-CRNG-WITNESS。最后一行:
SUCCESS litebox-snp-fixed-crng seed=0x4d595df4d0f33173 python-rust-stream-match=yes pin-FIXME-present=yes first16=25c867c61e62ff15c0e2b0ba4fa70b4c LITEBOX-SNP-FIXED-CRNG-WITNESS
从 fill_bytes_crng 调用宿主机 getrandom(或 RDRAND 加平台密钥)。这就是 main 分支上的 #1555 3715aa7。不要将公开种子作为 CrngProvider 发布。
厂商接收渠道为 MSRC(https://msrc.microsoft.com/create-report)。不要在 microsoft/litebox 上公开提交 GitHub issue。
Abraxas Labs - abraxaslabs.tech - github.com/abraxas - @abraxas_null - [email protected]