VM-to-VM Exploits: Practical Security Risks Between Virtual Machines on Shared Host Hardware


2 views

Modern hypervisors like VMware ESXi, KVM, and Hyper-V implement rigorous isolation mechanisms, yet academic research and real-world exploits demonstrate that VM-to-VM attacks are more than theoretical. The 2018 "Foreshadow" (L1 Terminal Fault) vulnerability showed how speculative execution could leak data across VMs, while cache-based side-channel attacks like Flush+Reload (CVE-2015-1341) remain relevant to this day.

// Example of cache probing code (simplified for illustration)
void probe_cache_line(char *adrs) {
    volatile unsigned long time;
    asm __volatile__ (
        "mfence\n"
        "rdtsc\n"
        "lfence\n"
        "movl %%eax, %%esi\n"
        "movl (%1), %%eax\n"
        "lfence\n"
        "rdtsc\n"
        "subl %%esi, %%eax\n"
        : "=a" (time)
        : "c" (adrs)
        : "%esi", "%edx"
    );
    return time;
}

Three primary attack surfaces exist:

  • Memory Deduplication: VMware's transparent page sharing (TPS) was exploited in the "Venom" vulnerability (CVE-2015-3456)
  • Shared Hardware Resources: Last-level cache (LLC) timing attacks can extract AES keys (see "Prime+Probe" papers)
  • Virtual Device Emulation: Flaws in virtual network cards or GPU passthrough may enable escapes

For Linux KVM deployments, these kernel parameters significantly harden against side-channel attacks:

# /etc/sysctl.d/10-vm-security.conf
kernel.kptr_restrict=2
kernel.dmesg_restrict=1
vm.mmap_rnd_bits=32
vm.mmap_rnd_compat_bits=16
kernel.unprivileged_bpf_disabled=1
Hypervisor Critical Setting Impact
VMware ESXi isolation.tools.interVM.maxMemCopyMB=0 Blocks shared clipboard attacks
Microsoft Hyper-V Set-VMProcessor -ExposeVirtualizationExtensions $false Prevents nested virtualization exploits
KVM/QEMU -overcommit mem-lock=on Prevents memory ballooning attacks

Emerging technologies like AMD's SEV-SNP (Secure Nested Paging) and Intel's TDX (Trust Domain Extensions) promise hardware-enforced memory encryption. Early benchmarks show 8-12% performance overhead but eliminate traditional side-channel vectors:

# Launching a TDX-protected VM in QEMU
qemu-system-x86_64 \
 -cpu host,-kvm-steal-time,-kvm-poll-control \
 -object tdx-guest,id=tdx,debug=on \
 -machine confidential-guest-support=tdx

Recent studies from ETH Zurich (2023) demonstrate that even with these protections, timing differences in memory access patterns can still potentially leak information between VMs at ≈50bps under optimal conditions.


When virtual machines share physical resources, several attack vectors emerge:

// Theoretical attack path through memory deduplication
1. Attacker VM requests same memory page as target VM
2. Hypervisor enables page sharing (KSM/Transparent Page Sharing)
3. Attacker modifies shared page → CoW not always triggered
4. Data leakage/corruption occurs

The 2013 Flush+Reload attack demonstrated real-world risks:

// Simplified cache timing attack pseudocode
while(monitoring_period) {
    flush(target_memory_address);
    sleep(measurement_interval);
    if (access_time < threshold) {
        // Detected cache hit - victim accessed this address
        record_side_channel_data();
    }
}

Historical CVEs show VM breakout possibilities:

  • CVE-2015-3456 (VENOM): QEMU floppy driver escape
  • CVE-2018-3646 (L1 Terminal Fault): Speculative execution attacks
# KVM hardening example (libvirt XML)
<cpu mode='host-passthrough'>
  <feature policy='disable' name='hypervisor'/>
  <feature policy='require' name='spec-ctrl'/>
  <feature policy='require' name='ssbd'/>
</cpu>

# Disable dangerous features
<features>
  <kvm>
    <hidden state='on'/>
  </kvm>
</features>

Current solutions include:

  • Intel SGX/TDX for memory isolation
  • AMD SEV-SNP for encrypted VM memory
  • ARM Realm Management Extension
# Detect cache-based attacks with perf
perf stat -e \
cpu/event=0xA3,umask=0x4,name=OFFCORE_RESPONSE_0_L3_MISS_LOCAL_DRAM/,\
cpu/event=0xA3,umask=0x8,name=OFFCORE_RESPONSE_0_L3_MISS_REMOTE_HOP0/ \
-p $(pgrep qemu)