Skip to content

Inception / SRSO (CVE-2023-20569)

Speculative Return Stack Overflow: phantom speculation'ı Training in Transient Execution ile birleştiren unprivileged bir attacker, AMD Zen'in return predictor'ını overflow eder ve bir victim ret'in speculative hedefini ele geçirir; tüm önceki Spectre-v2 savunmalarına rağmen keyfi kernel memory'yi sızdırır.

Mechanism

Neden çalışır (bug sınıfı / invariant)

Inception (Trujillo, Wikner, Razavi; ETH Zurich) CVE-2023-20569 / AMD-SB-7005 altında kataloglanmıştır ve Speculative Return Stack Overflow (SRSO) olarak adlandırılır. User→kernel sınırını, eIBRS/AutoIBRS ve retpoline'in korumak için yapıldığı indirect-branch predictor'ı değil, CPU'nun return address predictor'ını bozarak aşar.

İki primitive birleşir:

  • Phantom speculation: AMD Zen'in predictor'ı, architectural olarak bir branch olmayan bir instruction'da bir transient window açabilir — benign bir instruction speculatif olarak bir call gibi ele alınır.
  • Training in Transient Execution (TTE): bir transient window sırasında yalnızca leak etmek yerine, attack o window'u branch predictor'lara yeni prediction'lar eklemek için kullanır. Bu eklenen prediction'lar ardından daha fazla transient window açar — architectural program yerine microarchitecture'da recursion.

Bunları zincirleyerek CPU, bir instruction'ı bir recursive call olarak ele almaya kandırılır. Her phantom "call", attacker'ın seçtiği bir hedefi return stack'e push eder ve recursion return predictor'ı attacker-controlled hedeflerle overflow eder. Daha sonra kernel'deki legitimate bir ret, attacker'ın hedefine mispredict eder ve Flush+Reload recovery için bir secret byte'ı cache'e encode eden bir disclosure gadget speculatif olarak çalıştırır.

Invariant: return predictor'ın içeriği attacker-controlled non-architectural state'in bir fonksiyonu olur, böylece kernel'in speculatif olarak "döndüğü" yön attacker tarafından seçilir — tüm Zen ailesi boyunca. Bu, Retbleed'in AMD kardeşidir ve AMD inception girdisi aynı aileyi kapsar; SRSO, RSB-poisoning fikrinin tam bir predictor overflow'una itilmiş halidir.

Walkthrough

Kamuya açık ETH writeup'ından ve kernel/AMD advisory'lerinden kavramsal zincir; gadget offset'leri hedefe özgüdür ve kasıtlı olarak atlanmıştır.

1. Phantom-train: associate an attacker PC with a speculative "call" to target T.
2. Overflow (TTE): drive the phantom recursive call so the return predictor
                   fills with target T (the "return stack overflow").
3. Trigger:        enter the kernel (syscall) so a kernel RET mispredicts to T.
4. Disclosure:     T loads a secret kernel byte and touches probe[secret*STRIDE].
5. Recover:        Flush+Reload the probe array; the fast line == secret byte.

Çalışan bir Linux host'unda kernel kendi değerlendirmesini açar:

# SRSO/Inception status and active mitigation
cat /sys/devices/system/cpu/vulnerabilities/spec_rstack_overflow
# e.g. "Mitigation: Safe RET" / "Vulnerable: No microcode" / "Not affected"

# Affected AMD families: 0x17 (Zen1/2), 0x19 (Zen3/4)
grep -m1 -E "vendor_id|cpu family|model name" /proc/cpuinfo
Raporlanan veriler (comsec.ethz.ch / kernel.org / AMD-SB-7005)
Leak target:  arbitrary kernel memory, unprivileged attacker
Leak rate:    ~39 bytes/second
Affected:     all AMD Zen 1-4 (families 0x17, 0x19), including Zen 4
Severity:     CVE-2023-20569, medium
Mitigation overhead (BP flush on context switch): Zen1/1+ ~93%, Zen2 ~217%

Warning

SRSO, Spectre-v2 için "önceden konuşlandırılmış tüm software ve hardware mitigation'ların varlığında" çalışır. eIBRS/AutoIBRS ve retpoline onu durdurmaz; çünkü leak, klasik indirect-branch injection değil, phantom speculation aracılığıyla return predictor üzerinden gelir.

Detection

  • /sys/devices/system/cpu/vulnerabilities/spec_rstack_overflow, çalışan kernel'in CPU'yu etkilenmiş sayıp saymadığını ve hangi mitigation'ın aktif olduğunu raporlar.
  • Kernel mode'da retired ve mispredicted ret'i karşılaştıran perf analizi, Safe-RET path'inin devrede olup olmadığını gösterebilir; branch-misprediction counter'ları gürültülüdür ve tek başlarına güvenilir bir real-time detector değildir.
  • Posture izleme: microcode revision'ının ve kernel mitigation string'inin CPU ailesi için vendor rehberliğiyle eşleştiğini doğrula.

Mitigation

  • Microcode + kernel "Safe-RET" Linux varsayılanıdır: AMD microcode artı, poison'lanmış return prediction'ın kullanılmasını engelleyen bir software dizisi. Mode'lar kernel command line'da seçilebilir:
spec_rstack_overflow={off | microcode | safe-ret | ibpb | ibpb-vmexit}
  • IBPB varyantları, privilege geçişlerinde predictor'ları flush eder; ibpb-vmexit korumayı guest→host sınırıyla daraltır (Xen: spec-ctrl=ibpb-entry).
  • BpSpecReduce raporlayan daha yeni core'lar Mitigation: Reduced Speculation gösterir. AMD, Zen 3 / Zen 4 için microcode patch'ini veya onu içeren bir BIOS güncellemesini önerir; mitigation'ların çalışması için en güncel microcode'un yüklü olması gerekir.

References