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
- 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.
- Fault retire olmadan önce hedefi transient olarak üzerine yaz.
- 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¶
- Speculative Buffer Overflows: Attacks and Defenses (Kiriansky & Waldspurger, arXiv:1807.03757)
- Speculative Buffer Overflows (MIT mirror PDF)
- A Systematic Evaluation of Transient Execution Attacks and Defenses (Canella et al., USENIX Security 2019)
- arXiv:1811.05441 — A Systematic Evaluation of Transient Execution Attacks and Defenses
- transient.fail — classification tree and proofs-of-concept