Binarly SMM callout in HP firmware (BRLY-2022-022 / CVE-2022-35408)¶
Bir USB-legacy SMI handler'ı (UsbLegacyControlSmm.efi) SMRAM içinden
EFI_BOOT_SERVICESçağırıyor; DXE sırasında bir Boot Services pointer'ını relocate eden bir attacker,EfiSmmReadyToLock'tan sonra bile ring -2'de arbitrary code execution elde ediyor.
Mechanism¶
Note
SMM, x86'nın "ring -2"sidir: kodu ve datası SMRAM içinde durur, ring-0 OS'tan kilitlidir
ve yalnızca bir System Management Interrupt (SMI) CPU'yu o korumalı bölgeye geçirip
dispatcher kayıtlı bir handler'a yönlendirdiğinde erişilebilir. Tüm isolation modeli, SMM kodunun
yalnızca SMRAM içine çağrı yapmasına dayanır. Bir
handler, EFI_BOOT_SERVICES table'ı (gBS) üzerinden bir servis çağırırsa — ya da
located ettiği bir protocol interface — normal DRAM'de SMRAM dışında yaşayan bir yapıya
uzanıyor demektir. EfiSmmReadyToLock ateşlendikten sonra o DRAM OS'a aittir,
bu yüzden bir ring-0 (veya DXE-phase) attacker Boot Services table'ı içindeki bir function pointer'ı
overwrite edebilir. SMI handler bir sonraki sefer o pointer üzerinden çağrı yaptığında,
attacker kodunu SMRAM içinde tam SMM privilege'inde çalıştırır. Bu SMM callout
pattern'idir: privileged inside-SMRAM kodunun, unprivileged bir aktörün
kontrol ettiği bir hedefe doğru dışarı çağrı yapması.
Walkthrough¶
Binarly advisory BRLY-2022-022'den (CVE-2022-35408); module
UsbLegacyControlSmm.efi, file GUID 88ea1fcb-3a5d-4acf-a0b3-aacb36d4e90f,
vulnerable kod offset 0x13F4'te. (Binarly bu class'ı HP enterprise device'larında
açıkladı; advisory'nin yeniden üretilen binary'si, Insyde module'ünü paylaşan Framework/Insyde firmware'idir.)
- USB SMI handler'ı
EfiSmmUsbDispatch2Protocolüzerinden register edilir ve USB-related SMI'larda SMRAM içinde çalışır. - Handler içinde, çağrı hedefinin SMRAM'de bulunduğunu kontrol etmeden bir
EFI_BOOT_SERVICESfunction'ı çağırır. - DXE phase sırasında (veya lock'tan sonra ring 0'da) çalışan bir attacker, ilgili
gBStable pointer'ını DRAM'deki shellcode'un adresiyle overwrite eder. - USB SMI'ı tetiklemek, handler'ın SMRAM içinde overwrite edilmiş pointer üzerinden çağrı yapmasını sağlar →
SMM'de arbitrary code execution,
EfiSmmReadyToLock'tan sonra bile.
Conceptual trigger path (illustrative, not weaponized)
// staged during DXE / ring 0, before the USB SMI:
// gBS (EFI_BOOT_SERVICES, in DRAM, outside SMRAM):
// gBS-><bootsvc fn> = &payload; // payload also in DRAM
// then generate the USB SMI that reaches UsbLegacyControlSmm's handler
// -> handler calls gBS-><bootsvc fn> == &payload inside SMRAM (ring -2)
Warning
Advisory'ye göre: CVSS v3.1 7.5 (High), vector
AV:L/AC:H/PR:H/UI:N/S:C/C:H/I:H/A:H. (Daha geniş HP 16-bug
batch'ine dair bazı basın haberleri farklı skorlar verir; bu sayfa primary advisory'yi
takip eder.) Bu, authorized research için kavramsal bir repro'dur, tam bir exploit değil.
Detection¶
- CHIPSEC: SMI handler'larında unsafe pointer dereference'ları açığa çıkarmak için
chipsec_main -m common.smm,common.smm_dmavetools.smm.smm_ptrSMI fuzzer'ı; SMRAM lock'unu veSMM_Code_Chk_En'i doğrula. - Binarly FwHunt,
UsbLegacyControlSmm.efi'deki vulnerable callout'a match eden, BRLY-2022-022'ye (Insyde) bağlı bir rule'a sahiptir; SPI flash dump'larını tara. - Static review: lock'tan sonra
gBS/gRTveya located-protocol bir interface üzerinden çağrı yapan SMI handler'larını — özellikle legacy-USB/dispatch handler'larını — işaretle.
Mitigation¶
- CVE-2022-35408'i remediate eden HP/Insyde (ve Framework) BIOS update'lerini uygula.
- Callout'u kaldır: ihtiyaç duyulan servisleri/protokolleri
EfiSmmReadyToLock'tan önce SMRAM-resident storage'a resolve edip kopyala; bir SMI handler'dan DRAM pointer'larına asla dışarı çağrı yapma. - CommBuffer/handler input'undan ulaşılabilen pointer'ların SMRAM dışındaki belleği hedeflediğini ve bounds-check edildiğini doğrula (EDK II SMM communication guidance).
- Hardware backstop'lar:
SMM_Code_Chk_En(SMRAM dışında SMM execution'ı reddet), locked SMRAM (SMRR / D_LCK) ve desteklenen yerde bir SMM supervisor / deprivileging katmanı.