Skip to content

Insyde Int15ServiceSmm SMM callout (CVE-2021-42060)

InsydeH2O'daki bir Int15ServiceSmm SW SMI handler'ı, attacker'ın etkileyebildiği bir pointer üzerinden SMRAM dışına çağrı yapıyor; bu da ring-0'daki bir aktörün execution flow'u ele geçirip ring 0'dan ring -2'ye (SMM) yükselmesine imkân veriyor.

Mechanism

Note

SMM, x86'nın "ring -2"sidir: code'u ve data'sı, ring-0 OS'ten kilitlenmiş bir bölge olan SMRAM'de yaşar ve buraya yalnızca bir System Management Interrupt (SMI) CPU'yu o protected mode'a geçirip dispatcher kayıtlı bir handler'a route ettiğinde girilir. Isolation invariant'ı basittir: SMRAM içindeki code sadece SMRAM içindeki target'ları çağırmalıdır. Bir "callout" bu invariant'ı kırar — tam SMM privilege'iyle çalışan bir SMI handler'ı, normal DRAM'de SMRAM dışında yaşayan bir pointer üzerinden bir fonksiyon çağırır (örn. bir EFI_BOOT_SERVICES/gBS entry'si, locate edilmiş bir protocol interface'i ya da bir real-mode INT 15h legacy service vector'ü). EfiSmmReadyToLock'tan sonra o DRAM OS'e aittir, dolayısıyla ring-0 veya DXE-phase'deki bir attacker target'ı overwrite edebilir. Bir sonraki SMI, güvenilen handler'ın zehirlenmiş pointer üzerinden SMRAM içinde çağrı yapmasını sağlar ve attacker code'u ring -2'de çalışır. Int15ServiceSmm driver'ı tam da bu tür bir dışa çağrı yapan bir software SMI handler'ı register eder; dolayısıyla call target'ın kontrolü SMM code execution'a dönüşür.

Walkthrough

Insyde advisory'sine (SA-2022007) ve CVE-2021-42060 için NVD'ye göre etkilenen bileşen, InsydeH2O'daki Int15ServiceSmm driver'ıdır ve Binarly efiXplorer ekibine atfedilmiştir. NVD metni bunu "an Int15ServiceSmm SMM callout vulnerability [that] allows an attacker to hijack execution flow of code running in System Management Mode." diye tanımlar.

  1. Int15ServiceSmm, ilgili SW SMI tetiklendiğinde SMRAM içinde çalışan bir software SMI handler'ı (INT 15h tarzı bir legacy service path) register eder.
  2. Handler içinde execution, DRAM'de SMRAM dışında bulunan bir pointer/service üzerinden dışarı akar — klasik callout pattern'i (bkz. smm-callout.md).
  3. Ring 0'da (ya da DXE phase sırasında) çalışan bir attacker, o dışa çağrı target'ını DRAM'deki shellcode'un adresiyle overwrite eder.
  4. SW SMI'yı tetiklemek, handler'ın zehirlenmiş target üzerinden SMRAM içinde dispatch etmesini sağlar ve ring 0 → ring -2 yükselmesi olur.
Kavramsal tetikleme yolu (örnekleme amaçlı, silahlandırılmamış)
# representative, from public advisory class — NOT a working chain
# 1. stage payload + overwrite the outward call target (DRAM, outside SMRAM)
# 2. raise the Int15ServiceSmm software SMI (write the trigger value to the SW SMI port)
# 3. handler calls through the attacker-controlled target -> code runs in SMM

Warning

Skorlar kaynaklar arasında farklılaşıyor: Insyde advisory'si CVSS 3.1 7.5 (AV:L/AC:H/PR:H/UI:N/S:C/C:H/I:H/A:H) listeliyor; NVD ise 8.2 (AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H) veriyor. Kesin SW SMI numarası ve code offset'i birincil advisory'de yayımlanmamış; bu sayfa onları kavramsal tutuyor. Bu, Insyde'ın "23 vulnerabilities" açıklamasının bir parçası (bkz. insydeh2o-smm-memory-corruption-cluster.md).

Detection

  • CHIPSEC: chipsec_main -m common.smm ve tools.smm.smm_ptr SMI fuzzer'ını çalıştırıp güvensiz/relocatable pointer'ları dereference eden SMI handler'larını ortaya çıkar; SMRAM'in locked olduğunu ve SMM_Code_Chk_En'in set edildiğini doğrula.
  • Binarly FwHunt: SPI flash dump'larını efiXplorer/Binarly rule set'iyle tarayıp Int15ServiceSmm callout pattern'ini ara.
  • Static review: lock'tan sonra SMRAM'de bulunduğu kanıtlanmamış bir pointer veya service üzerinden çağrı yapan SMI handler'larını (özellikle legacy INT 15h / dispatch handler'larını) işaretle.

Mitigation

  • InsydeH2O firmware update'lerini uygula: Kernel 5.0 → 05.08.49, 5.1 → 05.16.49, 5.2 → 05.23.22, 5.3 → 05.32.22 (SA-2022007'ye göre 5.4/5.5 etkilenmemiş). Build'i platform/OEM vendor'ından temin et.
  • Callout'u kaldır: gereken her service/protocol'ü EfiSmmReadyToLock'tan önce SMRAM-resident bir storage'a kopyala; bir SMI handler'ından asla bir DRAM pointer'ı üzerinden dispatch etme.
  • Hardware backstop'lar: SMM_Code_Chk_En (SMRAM dışında SMM execution'ı reddet), locked SMRAM (SMRR / D_LCK) ve desteklenen yerlerde bir SMM supervisor / deprivileging katmanı.

References