Skip to content

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

  1. USB SMI handler'ı EfiSmmUsbDispatch2Protocol üzerinden register edilir ve USB-related SMI'larda SMRAM içinde çalışır.
  2. Handler içinde, çağrı hedefinin SMRAM'de bulunduğunu kontrol etmeden bir EFI_BOOT_SERVICES function'ı çağırır.
  3. DXE phase sırasında (veya lock'tan sonra ring 0'da) çalışan bir attacker, ilgili gBS table pointer'ını DRAM'deki shellcode'un adresiyle overwrite eder.
  4. 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_dma ve tools.smm.smm_ptr SMI fuzzer'ı; SMRAM lock'unu ve SMM_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/gRT veya 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ı.

References