Skip to content

SMRAM write via SMM memory corruption (Binarly Gigabyte/Dell SMRAM-write advisories)

Saldırgan kontrolündeki bir pointer ya da length'in ring-0 kodun SMRAM'in içine yazmasına imkân verdiği, SMI handler state'ini bozan ve ring -2 kod yürütmeye yükselten bir SMI-handler bug sınıfı.

Mechanism

Invariant

SMRAM'in tek yönlü bir güven sınırı olması beklenir: ring-0 software bir communication buffer üzerinden SMM service'lerini talep edebilir, ama asla SMI handler'ın kendi özel belleğini yazamamalıdır. Bir SMI handler, saldırgan etkisindeki girdiler alır (CommBuffer, ya da SMM save-state'te saklanan RBX/RCX gibi CPU register'ları). Handler bunlardan birini, target'ın SMRAM dışında olduğunu doğrulamadan bir destination pointer'ı olarak dereference ederse, saldırgan SMRAM'in içinde bir destination seçer. "SMM-dışı kod SMRAM yazamaz" invariant'ı, hardware range protection'ı yenerek değil, güvenilir handler'a yazmayı saldırgan adına yaptırarak bozulur — ring -2'ye düşen bir confused-deputy write-what-where.

Walkthrough

Kamuya açık Binarly advisory'si BRLY-DVA-2025-008 (CVE-2025-7026), Gigabyte SMM modülü — temsili, çoktan açıklanmış, yalnızca gösterim amaçlı:

  1. Saldırgan, software SMI'yi SwSmiInputValue = 0xB2 ile tetikler (AL'de doğru değerle APMC port 0xB2'ye yazma).
  2. Handler CommandRcx0'a ulaşır; bu, RBX register'ındaki değeri (SMM save-state'ten, saldırgan kontrolünde) SMRAM dışında olduğunu doğrulamadan bir pointer olarak ele alır.
  3. Magic-value kontrolleri ('$DB$' / '2DB$') vardır ama destination'ı sınırlandırmaz; handler ardından yapı alanlarını — RbxRegister->Count, ->Signature, ->MajorRev, ->Length — o pointer üzerinden yazar.
  4. RBX'i SMRAM'in içine işaret ettirerek saldırgan keyfi bir SMRAM write elde eder, handler state'ini bozar ve SMM (ring -2) kod yürütmeye ulaşır.
# Conceptual trigger (illustrative, do not weaponize):
mov al, <subfunction>
mov rbx, <attacker pointer into SMRAM>   ; passed via SMM save-state
out 0xB2, al                              ; raise SW SMI 0xB2

Binarly'nin eşlik eden Dell advisory'leri (örn. BRLY-DVA-2024-022) aynı bug sınıfını kapsar — AMI-tabanlı SMM modüllerinde doğrulanmamış pointer'lar aracılığıyla SMRAM write/read.

Warning

Savunma amaçlı/eğitim amaçlı. Yalnızca yayınlanmış advisory metni üzerine inşa edin. Çıkarılacak ders sınıf'tır — SMRAM write destination'ı olarak kullanılan doğrulanmamış save-state/CommBuffer pointer'ları — anahtar teslim bir zincir değil.

Detection

  • SMM modüllerinin statik analizi (efiXplorer/Binarly tarzı), SmmIsBufferOutsideSmmValid tarzı bir kontrol olmadan save-state register değerlerini ya da CommBuffer pointer'larını write destination olarak kullanan SMI handler'ları için.
  • SW SMI girdilerinin CHIPSEC tools.smm.smm_ptr fuzzing'i SMRAM corruption'ı açığa çıkarabilir.

Mitigation

  • Herhangi bir read/write öncesinde her saldırgan etkisindeki pointer'ı SMRAM aralığına karşı doğrulayın (SmmIsBufferOutsideSmmValid); overlap'leri reddedin.
  • Satıcı firmware güncellemelerini uygulayın (Gigabyte/Dell bu advisory'leri yamaladı).
  • SMRAM'i (smram-not-locked.md) ve SMRR'yi kilitleyin, böylece corruption re-mapping hileleriyle birleştirilemez.

References