Skip to content

Insyde InsydeH2O SMM/DXE memory corruption (CVE-2020-27339, AMI UsbRt-class defect)

Birleşik bir DXE/SMM driver'ı SMM communication buffer'ını (CommBuffer / CommBufferSize) validate etmeyi atlar; bu da privileged bir OS caller'ının ring-0 -> SMM (ring -2) sınırını aşarak firmware veya OS memory'sini corrupt etmesine izin verir.

Mechanism

Note

System Management Mode (SMM), x86'daki en privileged execution context'tir ("ring -2"): locked SMRAM içinden çalışır, bir System Management Interrupt (SMI) ile girilir ve OS ile hypervisor'a görünmezdir. Firmware, OS'un privileged servisler talep edebilmesi için SMI handler'lar expose eder; OS argümanları, tasarım gereği SMRAM dışındaki normal (OS-controlled) memory'de yaşayan, CommBufferSize uzunluğundaki paylaşılan bir SMM communication buffer (CommBuffer) üzerinden geçirir.

Bir SMI handler'ın korumak ZORUNDA olduğu security invariant şudur: CommBuffer'dan gelen pointer'lara, size'lara veya embedded struct'lara asla güvenme. Spesifik olarak, CommBuffer/CommBufferSize'ın (ve içlerine nested edilmiş herhangi bir pointer'ın) onlar üzerinden read ya da write yapmadan önce SMRAM ile overlap etmediğini confirm etmesi gerekir. Bir handler attacker-supplied bir pointer'ı dereference ederse ya da bu check olmadan attacker-chosen bir length'i copy ederse, bir ring-0 attacker SMM kodunu arbitrary memory'yi — SMRAM'in kendisi dahil — read veya write yaptırabilir. Bu klasik bir SMM confused-deputy / memory-corruption primitive'idir ve arbitrary SMM code execution'a, SPI-flash write'larına ve OS'un altında firmware persistence'a giden yoldur.

CVE-2020-27339 tam olarak bu bug class'ıdır. Attribution notu: bu note uzun süredir devam eden "AMI UsbRt" SMM attack-surface soyağacı altında dosyalanmış olsa da (Binarly ve diğerlerinin defalarca defective bulduğu Aptio USB runtime SMM driver ailesi), CVE-2020-27339 için otoriter NVD/CVE kaydı spesifik olarak Insyde InsydeH2O 5.x SMM driver'larını anlatır; bu driver'lar "CommBuffer ve CommBufferSize parametrelerini doğru validate etmiyor, caller'ların ya firmware'i ya da OS memory'sini corrupt etmesine izin veriyordu." Mekanizma — unvalidated bir CommBuffer'a güvenen bir SMM handler'ı — vendor ne olursa olsun aynı defect class'ıdır.

Walkthrough

Bu zafiyete OS kernel privilege'inden (ring 0) erişilir. Kavramsal olarak:

[ring-0 attacker (OS kernel)]
   prepare CommBuffer:  embed pointer / size pointing into SMRAM or arbitrary memory
   trigger SMI  (software SMI, e.g. write to APMC port 0xB2)
        |
        v
[vulnerable SMM driver's SMI handler]
   reads CommBuffer/CommBufferSize WITHOUT checking SMRAM overlap
   read/write through attacker-controlled pointer
        |
        v
[SMRAM / firmware / OS memory corruption  ->  arbitrary SMM code execution]

NVD kaydına göre, CVE-2020-27339 için adı geçen InsydeH2O 5.x driver'ları storage-stack SMM/DXE driver'larıdır: AhciBusDxe, IdeBusDxe, NvmExpressDxe, SdHostDriverDxe ve SdMmcDeviceDxe. Atanan weakness CWE-20 (Improper Input Validation); NVD CVSS v3.1 base 6.7 (AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H) kaydeder.

'Medium' severity'de bile neden önemli

CVSS'in local/high-privilege gereksinimi impact'i olduğundan az gösterir: zaten ring-0 (kernel) code execution'ı olan bir attacker bunu SMM'e girmek için kullanabilir, ki SMM OS trust boundary'sinin altında durur. SMM'den bir attacker SPI-flash write protection'larını disable edebilir ve OS reinstall'larını atlatan, OS-level savunmalardan kaçan persistent firmware implant'ları kurabilir — SMM CommBuffer-validation bug'larının firmware security'de ciddiye alınmasının temel nedeni budur.

Warning

Daha geniş "AMI UsbRt" soyağacı (INTEL-SA-00057 / "Aptiocalypsis", ilk olarak 2016'da raporlandı) bu class'ın ne kadar kalıcı olduğunu gösterir: eşdeğer SMM pointer/CommBuffer-validation defect'leri vendor'lar ve product generation'ları boyunca tekrar tekrar ortaya çıkıyor. Tek bir patch'in tüm yüzeyi kapattığını varsayma.

Detection

Firmware analiz araçları (örn. CHIPSEC'in SMM/CommBuffer check'leri, Binarly'nin scanner'ları) CommBuffer pointer'larını SMRAM-overlap validation'ı olmadan dereference eden SMI handler'larını flag edebilir. Runtime'da, crafted port-0xB2 write'larıyla korele beklenmeyen SMI aktivitesi olası bir indicator'dur, gerçi SMM büyük ölçüde OS'a opak'tır.

Mitigation

Vendor firmware/BIOS update'ini uygula (CVE-2020-27339 için Insyde'ın SA-2021001'i; AMI Aptio-lineage sorunları için ilgili AMI/CERT-CC advisory'leri). Yapısal düzeltme, her SMI handler'ın herhangi bir access'ten önce CommBuffer/CommBufferSize'ın ve tüm nested pointer'ların tamamen SMRAM dışında (ve beklenen OS memory'si içinde) olduğunu validate etmesidir — tam olarak vulnerable handler'ların atladığı check.

References