Skip to content

Meltdown-RW

Meltdown variant 1.2 (Kiriansky & Waldspurger, "Speculative Buffer Overflows"): page-table read-only (R/W) bit'ini transient olarak bypass eder ve #PF retire olmadan önce read-only memory'ye bir speculative store'a izin verir — code pointer'ları bozmak ve hardware read-only enforcement'ına güvenen software sandbox'ları kırmak için kullanılır.

Mechanism

Neden çalışır

Page-table entry'leri bir read/write (R/W) permission bit'i taşır; read-only bir page'e bir store, architectural olarak bir page fault (#PF) yükseltir. Meltdown-RW, Canella et al. taxonomy'sinin read-only-bypass yaprağıdır (Speculative Buffer Overflows'un yazarları başlangıçta ona Spectre variant 1.2 adını verdi, ama o Spectre değil Meltdown-type'tır — leak, branch mistraining'den değil, gecikmeli exception handling'ten gelir).

Invariant: R/W-bit ihlali için #PF lazy biçimde handle edilir. Read-only korumasını pipeline'ın erken aşamasında zorunlu kılmayan CPU'larda, read-only memory'ye bir speculative store, #PF retire olup architectural write'ı squash etmeden önce transient olarak commit eder — microarchitectural state'i günceller ve dependent load'ları besler. Kiriansky & Waldspurger'ın ifade ettiği gibi: "speculative store'lar, sandbox'ları kırmak için read-only data'yı ve code pointer'ları üzerine yazabilir."

Sibling taxonomy'den farkı: Meltdown-RW, kardeş Meltdown yapraklarının tersine bir read leak'i değil, read-only (R/W-bit) page'e bir transient store'dur (integrity ihlali) — present-bit/L1TF (Meltdown-P), bounds #BR (Meltdown-BR), system register #GP (Meltdown-GP), lazy-FPU #NM (Meltdown-NM) ve PKU/PKRU bypass (Meltdown-PK) hepsi confidentiality/read odaklıdır.

Confidentiality odaklı Meltdown leak'lerinin aksine, Meltdown-RW'nin birincil tehlikesi transient window içindeki integrity'dir. Read-only bit'inin ötesine transient olarak yazarak, bir attacker return address'leri, code pointer'ları, vtable'ları ya da diğer control data'yı speculative olarak üzerine yazabilir, ardından transient control flow'u yönlendirebilir — bir güvenlik sınırı olarak hardware-enforced read-only memory'ye güvenen software sandbox'ları (örneğin language seviyesindeki ya da JIT sandbox'ları) bypass ederek. Bu, speculative buffer overflow'lar yaratmak için speculative out-of-bounds store'ları kullanan Spectre 1.1'in write tarafındaki karşılığıdır.

Walkthrough

// Conceptual Meltdown-RW / variant 1.2. Real PoC: Kiriansky & Waldspurger,
// "Speculative Buffer Overflows" (arXiv:1807.03757).
// 'ro_ptr' points at read-only memory (R/W bit clear). The store would raise #PF.
// Inside the transient window the write is forwarded to dependent transient reads,
// e.g. a hijacked code/return pointer used for further transient gadget execution.
*ro_ptr = attacker_value;        // transient store; #PF pending, not yet retired
foo();                            // transient control flow now follows the planted pointer
  1. Read-only memory'ye bir speculative store nişanla (read-only bir page'deki bir code pointer / return address) ki R/W-bit check'i #PF yükseltsin.
  2. Fault retire olmadan önce hedefi transient olarak üzerine yaz.
  3. Zincirle: yerleştirilen değer, sonraki transient execution'ı yönlendirir (örneğin bir gadget'a), sandbox escape / daha fazla transient-execution primitive'ini mümkün kılar — read-only memory'nin değişmez olduğunu varsayan savunmaları çürütür.
Sınıflandırma / disclosure gerçekleri
Taxonomy leaf : Meltdown-RW  (read-only bypass; #PF, R/W-bit violation)
Original name : Spectre variant 1.2  (mis-named; actually Meltdown-type)
Authors       : Kiriansky & Waldspurger, "Speculative Buffer Overflows" (2018)
Sibling       : Spectre 1.1 — speculative-store buffer overflow (OOB writes)
Effect        : transient write to read-only pages -> overwrite code/return
                pointers -> breach sandboxes relying on HW read-only enforcement.

Detection

Architectural iz yok — transient write asla commit etmez. Mitigation, runtime detection değil, defensive coding'dir: read-only mapping'leri katı bir güvenlik sınırı olarak ele alan ve güvenlik açısından önemli store'lardan önce speculation barrier'larından yoksun olan JIT'leri/sandbox'ları denetleyin.

Mitigation

  • Read-only ya da bounds-checked hedeflere yönelik savunmasız store'lardan önce serializing barrier (lfence) ki store transient olarak çalışamasın. Kiriansky & Waldspurger, read-only data'yı ve code pointer'ları koruyan sınırlara speculation barrier'ları eklemeyi önerir.
  • Hardware read-only memory'ye tek başına bir sandbox sınırı olarak güvenmeyin; R/W bit'i transient olarak bypass edilebildiği için onu software bounds/pointer hardening ile birleştirin.
  • KPTI alakasız: Meltdown-RW, read-only mapping'ler üzerinde mevcut privilege level içinde çalışır — cross-privilege bir kernel-memory read değildir, dolayısıyla page-table isolation bunu ele almaz.

References