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ı:
- Saldırgan, software SMI'yi
SwSmiInputValue = 0xB2ile tetikler (AL'de doğru değerle APMC port 0xB2'ye yazma). - 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. - 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. - 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ı),
SmmIsBufferOutsideSmmValidtarzı 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_ptrfuzzing'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.