Skip to content

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):

FS1:\> ThinkPwn.efi

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'ı).
  • SystemSmmRuntimeRt GUID'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.

References