Skip to content

Reptar (CVE-2023-23583)

REP MOVSB üzerindeki gereksiz (redundant) bir REX prefix'i, FSRM yeteneğine sahip Intel core'larında tutarsız bir micro-op replay'i tetikler; hang'lere ve — sınırlı durumlarda — CPL3'ten CPL0'a bir privilege escalation'a yol açar.

Not: sidechannel/ altında dosyalanmış olsa da Reptar birincil olarak DoS/EoP'ye yol açan bir microarchitectural correctness bug'ıdır, saf bir data-leak side-channel'ı değil; buraya side-channel'a komşu bir microarchitectural correctness sınıfı olduğu için yerleştirilmiştir.

Mechanism

Sınır neden kırılıyor

Modern Intel core'ları Fast Short Repeat Move (FSRM) uygular; bu, kısa REP MOVSB string kopyalarını hızlandıran bir microcode/hardware optimizasyonudur. Reptar bir decoder/sequencer köşe durumudur: REP MOVSB bir redundant REX prefix ile encode edildiğinde (bu konumda hiçbir architectural anlam taşımayan ve basitçe yok sayılması gereken bir x86 prefix byte'ı), front-end ile FSRM fast path, instruction uzunluğu ve micro-op state konusunda anlaşmazlığa düşer.

Kırılan invariant, speculation/rollback altında architectural-state tutarlılığıdır. Redundant prefix makineyi tasarımcıların öngörmediği bir duruma sokar, dolayısıyla:

  • branch mispredict recovery ve micro-op sequencer, pipeline'ı tutarsız bir durumda bırakabilir,
  • register ve instruction-pointer state'i bozulabilir ya da "takılı" kalabilir,
  • gözlemlenen en kötü durumlarda tutarsızlık, unprivileged (ring 3) kodun privileged (ring 0) yürütmeyi etkilemesine izin verir, yani bir escalation of privilege.

Birincil etki deterministik bir makine hang/crash'idir (bir guest dahil herhangi bir unprivileged context'ten erişilebilir bir denial of service); bu da Reptar'ı saf bir data-leak kanalından çok, side-channel'a komşu ve EoP sonuçları olan bir correctness bug'ı yapar.

Walkthrough

Kamuya açık Google writeup'ı, faulting instruction'ı oluşturmayı ve makinenin takılışını gözlemlemeyi tarif eder. Kavramsal olarak:

; Conceptual: an architecturally-redundant REX prefix in front of a
; fast-short REP MOVSB string move. The exact triggering context is
; microarchitectural and is NOT a copy-paste exploit.
    rep movsb            ; fast short repeat move (FSRM path)
; ...preceded by a redundant REX prefix byte under specific conditions

Advisory ve disclosure'dan yüksek seviyeli reprodüksiyon mantığı:

  1. Redundant-prefix REP MOVSB formunu, FSRM yeteneğine sahip bir core'da sıkı bir döngü / belirli bir speculative pencere içinde çalıştır.
  2. Non-deterministic corruption gözlemle: instruction pointer ya da register state'i architectural tanımdan sapar.
  3. Tek bir thread'de core hang olur; sibling logical core'lar aktifken tüm physical core (ve çoğu zaman makine) kilitlenir.
Gözlemlenen etki (kavramsal)
[thread 0] issues redundant-prefix REP MOVSB ...
[core]     micro-op state inconsistent -> machine check / hard hang
=> unprivileged code halts the physical core (DoS); rare EoP CPL3->CPL0

Warning

Tetikleyici özel bir privilege gerektirmediğinden, kötü niyetli bir VM guest'i ya da container tenant'ı paylaşılan bir host'u hang ettirebilir. Cloud'la ilgili threat model budur: bir multi-tenant sınırı boyunca availability kaybı.

Detection

  • Untrusted workload'larla korele olan beklenmedik core/makine hang'leri ya da machine-check event'leri birincil sinyaldir; IPMI/BMC log'larında, mcelog'da ve kernel ring-buffer hard-lockup uyarılarında MCE/#MC girdilerine bak.
  • Yakın zamanda guest ya da sandbox'lanmış kod çalıştırmış core'larda host watchdog / NMI-watchdog hard-lockup tespitleri.
  • Redundant prefix'li olağandışı instruction stream'leri yayan process'ler için telemetri (perf/ETW instruction sampling, anti-cheat tarzı kod tarayıcıları); meşru compiler'lar REP MOVSB öncesinde redundant bir REX yaymaz.
  • Tek bir tenant tarafından tetiklenen, hypervisor host'larında crash-loop / liveness alarmları.

Mitigation

  • INTEL-SA-00950 / CVE-2023-23583 için Intel'in microcode update'ini uygula. Intel, redundant-prefix işlemesini düzelten microcode yayınladı; distro'lar bunu microcode_ctl / intel-ucode ve OEM BIOS güncellemeleri üzerinden dağıtır.
  • Patch'lenene kadar, SMT/hyper-threading'i devre dışı bırakmak bazı konfigürasyonlarda hang'in etki yarıçapını azaltır (ama ortadan kaldırmaz).
  • Düzeltilmiş microcode'un boot'ta erken yüklenmesi (early-microcode loading) için hypervisor'ı ve OS'i güncel tut.

References