
High local crypto: LiteBox v0.1.0 SNP CrngProvider is public-seed FastRng 0x4d595df4d0f33173
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · litebox-snp-fixed-crng
Class: Crypto / Predictable RNG Reach: Local (guest-vs-host)
LiteBox v0.1.0 (d8556e3) - Microsoft
SnpLinuxKernel::fill_bytes_crng is a process-global FastRng constructed with public seed 0x4d595df4d0f33173 and a FIXME to call the trusted host. FastRng is documented non-cryptographic xorshift* (MAGIC = 0x2545F4914F6CDD1D). On this pin the CrngProvider trait still requires a cryptographically secure stream. Guest getrandom and /dev/urandom both draw from this mutexed generator.
SEV-SNP's threat is an untrusted host that cannot read C-bit private pages. A public deterministic CRNG does not need a C-bit bypass. Anyone who read the seed (it is in the crate) can replay every subsequent CRNG byte from first use, or from any observed prefix.
This leftover is predictable guest entropy. It is not RCE, not host-kernel RCE, and not VMPL0.
| ID | no CVE yet |
| Class | Crypto / Predictable RNG |
| Reach | Local (guest-vs-host). Remote only if a guest network service draws keys from this stream |
| CWE | CWE-338, CWE-330 |
| CVSS | High: 7.1 CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N |
| Product | microsoft/litebox |
| Affected | v0.1.0 (d8556e33676e47244bfefa139c1e9ff95bd67d53) litebox_runner_snp. Post-tag #1555 3715aa7 (2026-10-08) is the fix on main |
| Auth | untrusted SNP hypervisor, or anyone who read the public seed |
| License | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1 only. No SNP hardware |
Who: an untrusted SNP hypervisor, or anyone who cloned the crate. Victim is the SNP guest workload that treats getrandom / urandom as secret.
| Method + sink | Privilege |
|---|---|
Independent Python xorshift* vs pin FastRng with seed 0x4d595df4d0f33173 | Identical 512-byte stream (two 256-byte getrandom chunks). First 16 bytes 25c867c61e62ff15c0e2b0ba4fa70b4c |
Pin snp_impl.rs still on v0.1.0 | FIXME: call into the trusted host to get random bytes. plus FastRng::new_from_seed(0x4d595df4d0f33173) |
| Method + sink | Privilege |
|---|---|
Guest SYS_getrandom -> fill_bytes_crng | next 256-byte chunks of the public xorshift* stream in guest userspace. GRND_RANDOM / GRND_NONBLOCK are ignored |
Guest read(/dev/urandom) | the same mutexed stream |
| Hypervisor or off-box reader of the seed | every subsequent CRNG byte from first use, or from any observed prefix, without decrypting SNP private memory |
Guest TLS / keys / nonces drawn from getrandom / urandom | those secrets are predictable. I do not claim a specific TLS stack |
None from the RNG alone.
AT_RANDOM are hardcoded DEADBEEF on the Linux shim (separate, below High by itself)0x13374a4159421337) - below barread stdin, write stdio, futex, clock_gettime, clone3, exit) with kernel-owned pointersgetrandom; LVBS uses ChaCha20 plus RDRAND plus a platform root key. SNP is the production platform that does notEighteen hunts on v0.1.0. SNP fill_bytes_crng is a spin::mutex around FastRng::new_from_seed(0x4d595df4d0f33173) with a FIXME. Linux userland and LVBS already do real entropy. I did not have SNP hardware. The lab compiles the pin FastRng module, serves the stream on loopback, and matches an independent Python replay. #1555 on main (2026-10-08) switches this function to host getrandom. That commit is not in the tag.
cd lab
./run.sh
Loopback 127.0.0.1:19120. Compose project litebox-snp-fixed-crng. Witness LITEBOX-SNP-FIXED-CRNG-WITNESS. Last line:
SUCCESS litebox-snp-fixed-crng seed=0x4d595df4d0f33173 python-rust-stream-match=yes pin-FIXME-present=yes first16=25c867c61e62ff15c0e2b0ba4fa70b4c LITEBOX-SNP-FIXED-CRNG-WITNESS
Call host getrandom (or RDRAND plus a platform secret) from fill_bytes_crng. That is #1555 3715aa7 on main. Do not ship a public seed as CrngProvider.
Vendor intake is MSRC (https://msrc.microsoft.com/create-report). Do not open a public GitHub issue on microsoft/litebox.
Abraxas Labs - abraxaslabs.tech - github.com/abraxas - @abraxas_null - [email protected]