Skip to content

Meltdown-GP

Variant 3a / Rogue System Register Read (CVE-2018-3640): erişimi bir #GP yükseltmesi gereken privileged system register'ları (MSR'ler, control/segment register'ları) transient olarak okur — değeri general-protection fault retire olmadan önceki window'da sızdırır.

Mechanism

Neden çalışır

Birçok system register — rdmsr ile okunan model-specific register'lar (MSR'ler), control register'lar, debug register'lar ve belirli segment/descriptor state'i — yalnızca privilege level 0'da (ya da privileged bir instruction aracılığıyla) architectural olarak erişilebilir. Böyle bir register'ın unprivileged bir read'i, architectural olarak bir general-protection exception (#GP) yükseltir.

Meltdown-GP, Canella et al. transient-execution taxonomy'sinin #GP yaprağıdır ("Meltdown-GP / System Register Bypass"). Invariant'ı her Meltdown-type etkiyle aynıdır: #GP exception lazy biçimde handle edilir. CPU, access'in illegal olduğunu belirledikten sonra, fault retire olup architectural sonucu squash etmeden önce register'ın değerini dependent instruction'lara transient olarak forward eder ve onların bunu microarchitectural state'e encode etmesine izin verir.

Intel, altta yatan sorunu (INTEL-SA-00115) şöyle tanımlar: "Speculative execution kullanan ve system register'ların speculative read'lerini gerçekleştiren mikroişlemcilere sahip sistemler, local user access'i olan bir attacker'a bir side-channel analysis aracılığıyla system parametrelerinin yetkisiz disclosure'ına izin verebilir." ARM, aynı etkiyi ilk olarak Cache Speculation Side-channels whitepaper'ının güncellenen sürümünde (v2.4, Eylül 2018 ve sonrası) **Variant 3a

(V3a)** olarak belgeledi.

Sibling taxonomy'den farkı: Meltdown-GP'yi belirleyen exception #GP'dir ve hedef system register state'idir — bir bounds ihlali (#BR, Meltdown-BR), lazy-FPU #NM (Meltdown-NM), present-bit/L1TF (Meltdown-P), PKU/PKRU bypass (Meltdown-PK) ya da read-only R/W-bit transient store (Meltdown-RW) değil.

Sızdırılan değer system register state'idir, keyfi memory değil. Bu, Meltdown-GP'yi memory okuyan Meltdown'dan daha düşük severity'li yapar (CVSS 4.3 Medium, AV:L/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N): configuration/parametre bitlerini (örneğin bir attacker'ın okuyamaması gereken MSR'lerin içeriğini) açığa çıkarır; bu da diğer şeylerin yanı sıra KASLR tarzı gizlilik varsayımlarını çürütebilir ya da daha fazla saldırıyı zincirlemek için yararlı state'i ifşa edebilir.

Walkthrough

Privileged bir system-register read'i transient olarak gerçekleştirilir ve değer,

GP retire olmadan önce bir Flush+Reload oracle'ına encode edilir:

// Conceptual Meltdown-GP (Variant 3a). Real PoCs: https://transient.fail/
// Reading this MSR/control reg from CPL>0 architecturally raises #GP.
// Run inside a fault-suppression harness (signal handler, or the shadow of a
// mispredicted branch / TSX transaction) so the window stays open.
uint64_t v = __read_privileged_register();   // transient: #GP pending, value forwarded
(void)probe[(v & 0xff) * 4096];              // encode low byte into cache state
// decode: time probe[i*4096]; fastest line index == leaked byte
  1. Privileged read'i gönder (rdmsr, ya da mevcut privilege level'da erişilemeyen bir control/segment register'ının read'i) → #GP yükseltilir ama ertelenir.
  2. Transient olarak encode et: forward edilen register byte'ını, pre-#GP window sırasında 256-entry'lik bir probe array'e.
  3. Flush+Reload ile decode et — cache'lenmiş probe line, sızdırılan byte'ı ortaya çıkarır; register'ı yeniden oluşturmak için byte byte tekrarla.
Sınıflandırma / disclosure gerçekleri
Taxonomy leaf : Meltdown-GP  (exception = #GP, general protection)
Aliases       : Variant 3a, Rogue System Register Read (RSRR / RSRE)
CVE           : CVE-2018-3640
Advisory      : INTEL-SA-00115
CVSS 3.0      : 4.3 Medium  (AV:L/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N)
Origin        : ARM "Cache Speculation Side-channels" whitepaper (Variant 3a);
                Intel x86-based systems affected.
Leaked        : system register state (MSRs / control / segment registers),
                not arbitrary memory.

Detection

Güvenilir bir victim tarafı architectural iz yok — illegal read hiçbir commit edilmiş sonuç bırakmaz. Host/static sezgiler: rdmsr ya da privileged-register read'lerini fault-suppression veya branch-misprediction harness'leri içinde gönderen, sıkı Flush+Reload timing loop'larıyla eşleştirilmiş unprivileged code.

Mitigation

  • CPU microcode güncellemesi. Memory okuyan Meltdown'ın aksine, Variant 3a tamamen Intel microcode ile fix edilir — "İşletim Sistemi yazılımının yardımı olmadan, CPU Microcode güncellemeleri kullanılarak çözülecektir" — ancak deployment BIOS/firmware aracılığıyla (ve/veya early-boot microcode loading ile) teslim edilir. intel-microcode 3.20180703.1 / 3.20180807a.1 sürümleri fix'leri içerir.
  • KPTI burada alakasız: Meltdown-GP, user/kernel mapping'i boyunca kernel memory'sini okumaz; page-table isolation, speculative system-register read'lerini ele almaz. Microcode mitigation'ı doğru fix'tir.

References