ThinkPwn SMM privilege escalation (SystemSmmRuntimeRt)¶
SystemSmmRuntimeRt UEFI driver'ındaki bir SMI handler, attacker-controlled communication buffer'dan okunan bir function pointer üzerinden çağrı yapar ve keyfi System Management Mode (ring -2) kod yürütmesi sağlar.
Mechanism¶
Invariant
Bir SMI handler ring -2'de çalışır ve communication buffer'ın her byte'ını düşman
olarak ele almalıdır. Amaçlanan invariant: handler içindeki hiçbir control-flow
hedefi, validation olmadan non-SMM tarafından sağlanan veriden türetilmemelidir.
SystemSmmRuntimeRt driver'ı (GUID 7C79AC8C-5E6C-4E3D-BA6F-C260EE7C172E) bunu
ihlal eder. CommBuffer'dan bir pointer okur ve ardından onun üzerinden çağrı yapar
— caller tarafından seçilen bir function pointer. Çağrı SMM içinde gerçekleştiği
için saldırganın kodu ring -2'de yürütülür. Kök neden, Lenovo'nun (ve diğerlerinin)
zayıf Intel 8-series referans kodunu copy-paste etmesidir; Intel bunu 2014 ortasında
EDK2'de düzeltmişti ama hatalı sürüm birçok satıcıda kaldı — bu yüzden
"industry-wide 0day".
Not: Bu, klasik bir SMM callout değildir. Fonksiyon pointer'ı SMRAM dışındaki
sabit bir konumdan (ör. gRT/gBS) değil, doğrudan attacker-controlled
CommBuffer'dan okunur — yani bu, commbuffer-smm-pointer-not-in-smram sınıfının
spesifik bir örneğidir.
Walkthrough¶
Public Cr4sh (Dmytro Oleksiuk) açıklamasından — zayıf desen:
// CommunicationBuffer is attacker-controlled
v3 = *(VOID **)(CommunicationBuffer + 0x20); // pointer from caller
...
// indirect call through caller-controlled function table:
(*(v3 + 0x8))(*(VOID **)v3, &dword_AD002290, CommunicationBuffer + 0x18);
v3, doğrudan CommBuffer'dan okunur ve kod v3 + 0x8 adresindeki fonksiyonu çağırır.
Normal RAM'e sahte bir yapı (fake structure) yerleştirip v3'ü ona yönlendirerek
saldırgan çağrı hedefini kontrol eder.
Public PoC kullanımı (exploit bir UEFI app olarak gelir ve UEFI shell'den çalışır):
Repo ayrıca keyfi firmware image'larını parse edip aynı zayıf çağrı desenini içeren SMM driver'larını işaretleyen bir scanner içerir. Etki: flash write protection'ı devre dışı bırakmak, firmware implant etmek, Secure Boot'u devre dışı bırakmak ve Windows VSM (Credential Guard)'ı bypass etmek.
Warning
Savunma/eğitsel amaçlı; yalnızca public, uzun süredir patch'li advisory ve PoC'yi kullanın. Tekrar kullanılabilir ders şudur: "asla CommBuffer'dan türetilen bir pointer üzerinden çağrı yapmayın."
Detection¶
- SMM driver'ları, hedefi CommBuffer / EFI_SMM_COMMUNICATE_HEADER.Data'dan load edilen indirect call'lar için tarayın (efiXplorer, ThinkPwn scanner'ı).
SystemSmmRuntimeRtGUID'ini ve call-through-CommBuffer desenini arayın.
Mitigation¶
- Satıcı firmware güncellemelerini uygulayın; bir çağrı hedefini asla non-SMM girdisinden türetmeyin.
- Tüm CommBuffer pointer'larını doğrulayın (
SmmIsBufferOutsideSmmValid) ve SMRAM'i (smram-not-locked.md), SMRR'ı (smrr-misconfiguration.md) kilitleyin.