Skip to content

GhostRace (CVE-2024-2193)

Conditional branch'ler üzerine kurulu synchronization primitive'leri speculatively bypass edilebilir, bu da architecturally race-free critical section'ları, Speculative Concurrent Use-After-Free (SCUAF) leak'leri sağlayan Speculative Race Condition'lara dönüştürür.

Mechanism

Bug class: Spectre-v1 sadece bounds check'lere değil, synchronization'a uygulandı

Software, mutual exclusion'ı conditional branch'lerle enforce eder — bir mutex_lock, bir spinlock test'i, bir cmpxchg retry loop'u nihayetinde bir critical region'ı "lock taken mı?" üzerine gate eder. Architecturally bunlar, bir seferde region'ın içinde yalnızca tek bir thread olmasını garanti eder.

GhostRace'in içgörüsü, guard'ın bir conditional branch olması ve conditional branch'lerin misprediction'a tabi olmasıdır (Spectre-v1, CVE-2017-5753). Branch predictor'ı mistrain eden bir attacker, bir victim thread'in başka bir thread tarafından architecturally zaten occupied olan bir critical region'a transiently girmesini sağlayabilir. O transient window sırasında olağan concurrency invariant'ı ihlal edilir:

  • İki thread microarchitecturally aynı critical section'ın "içindedir".
  • Bu, klasik concurrency bug'larını — en önemlisi use-after-free'i — speculative path üzerinde yeniden ortaya çıkarır. Paper bunlara Speculative Race Condition'lar (SRC) ve UAF varyantına Speculative Concurrent Use-After-Free (SCUAF) der.

SRC'ler hiçbir architectural iz bırakmaz (crash yok, deadlock yok), çünkü speculation roll back edilir; ama transient memory access'ler, bir Spectre attacker'ının Flush+Reload gibi bir side channel ile okuduğu microarchitectural footprint'ler (cache state) bırakır. Küçük speculative window'u güvenilir kılmak için araştırmacılar IPI storming'i (CVE-2024-26602) tanıttı: victim CPU'yu inter-processor interrupt'larla doldurup victim'ı yavaşlatmak ve exploitation window'unu genişletmek, etkili biçimde race'i single-step'lemek.

Spectre-v1-style conditional-branch misprediction'a sahip her architecture etkilendiği için, GhostRace cross-vendor'dur (Intel, AMD, ARM, IBM) ve OS/hypervisor-agnostic'tir.

Walkthrough

High-level kavramsal akış (VUSec / IBM disclosure)

Yalnızca kavramsal adımlar — gadget chain yok:

  1. SCUAF gadget'larını bul. Araştırmacılar, object'leri free edilen critical section'lar için Linux kernel'ini taramak üzere Coccinelle static-analysis tool'unu kullandı ve potansiyel olarak exploit edilebilir ~1.283 gadget mertebesinde rapor verdi.

  2. Lock branch'ini mistrain et. Branch predictor'ı, "lock held?" check'i not held yönünde mispredict edecek şekilde train et, böylece bir thread, başka bir thread'in zaten sahip olduğu bir region'a transiently sızsın.

if (lock_is_free)        # branch mistrained -> speculatively "free"
    use(object)          # transient access to a concurrently-freed object
  1. Window'u IPI storming ile genişlet. Victim core'u IPI'larla bombardımana tut, böylece victim yavaş ilerleme kaydetsin ve attacker'a race'i tekrar tekrar gerçekleştirmek için neredeyse sınırsız bir transient window versin.

  2. Exfiltrate et. Free edilmiş/attacker-controlled memory'ye yapılan speculative access, secret byte'ları cache state'e encode eder; onları bir Flush+Reload-style covert channel ile recover et. PoC, kernel memory'sini Spectre-class güvenilirlikle kabaca ~12 KB/s mertebesinde leak etti.

Detection

  • IPI rate anomalileri: GhostRace'in güvenilirliği IPI storming'e bağlıdır; tek bir CPU'ya doğru anormal derecede yüksek inter-processor-interrupt sayıları (/proc/interrupts, perf veya hypervisor counter'larında görünür) kilit bir sinyaldir.
  • HPC monitoring: contended lock'lar etrafında yoğunlaşan yükselmiş branch-misprediction ve cache-miss/refill oranları.
  • Telemetry: bir victim CPU'yu pin'leyen ve sürekli interrupt baskısı üreten process'ler; synchronization primitive'leri etrafında sıkı retry loop'ları.
  • Güvenilir bir architectural artifact yoktur (saldırı tasarım gereği architectural seviyede görünmezdir), bu yüzden tespit heuristic/behavioral'dır.

Mitigation

  • Serializing synchronization primitive'leri: araştırmacılar, lock primitive'lerine bir serialization instruction (örneğin lfence-style bir barrier) eklemeyi önerdi (~2 satırlık değişiklik, ~%5 overhead rapor edildi). Linux maintainer'ları performans gerekçesiyle geniş çapta benimsemeyi reddetti.
  • IPI rate limiting: Linux, IPI storming'i körleştirmek için IPI rate-limiting ekledi, ancak yazarlar bunun eksiksiz bir fix olmadığını belirtir.
  • Mevcut Spectre-v1 savunmaları (vulnerable gadget'lar etrafında speculation barrier'lar, array_index_nospec-style hardening) spesifik SCUAF gadget'larına uygulanır.
  • Vendor guidance: AMD (AMD-SB-7016) bunu Spectre-v1-style mis-speculation'a dayandığı şeklinde sınıflandırır ve mevcut v1 mitigation'larına işaret eder; Xen ve diğer projeler advisory yayımladı.

References