Skip to content

Lenovo consumer UEFI driver flaws (CVE-2021-3970 / CVE-2021-3971 / CVE-2021-3972)

ESET, 100'den fazla Lenovo tüketici notebook'unda üç UEFI firmware hatası buldu: SMRAM read/write veren, doğrulanmamış bir pointer'a sahip bir SMM handler (LenovoVariableSmm), artı production'da etkin bırakılmış ve SPI flash korumasını ile UEFI Secure Boot'u NVRAM variable'lar üzerinden devre dışı bırakan yalnızca üretim amaçlı iki driver.

Mechanism

Note

Burada iki ayrı trust boundary kırılıyor. (1) SMM/SMRAM (CVE-2021-3970): LenovoVariableSmm'deki bir SMI handler, SMRAM içinde ring -2'de çalışır ve caller'ından gelen bir physical address'i, o address'in SMRAM'in dışında olduğunu kanıtlamadan kabul eder. Değişmez — bir SMM handler, dereference etmeden önce caller'ın sağladığı her pointer'ı SMRAM aralığına karşı doğrulamalıdır — ihlal edilir, böylece ring-0 bir saldırgan bir SMRAM address'i geçirip SMRAM'in keyfi read/write'ını elde edebilir (confused-deputy bir ring 0 → ring -2 yolu). (2) Etkin bırakılmış üretim driver'ları (CVE-2021-3971/-3972): yalnızca fabrika için tasarlanmış firmware driver'ları production image'larında gönderildi ve özel adlı bir NVRAM (UEFI) variable'ı oluşturularak yeniden etkinleştirilebilir. Kırılan sınır, production firmware'in hiçbir developer/debug yolu içermemesi beklentisidir — bu driver'lar bir kez tetiklendiğinde, bir firmware implant'ını engelleyecek mekanizmaları ortadan kaldırarak SPI flash write protection'ı doğrudan devre dışı bırakır ya da UEFI Secure Boot'u kapatır.

Walkthrough

ESET'in WeLiveSecurity açıklamasından ve Lenovo advisory'sinden (LEN-73440):

  • CVE-2021-3970 — LenovoVariableSmm. NVD: "a potential vulnerability in LenovoVariable SMI Handler due to insufficient validation ... may allow an attacker with local access and elevated privileges to execute arbitrary code." Handler "accepts unvalidated physical addresses," yani bir saldırganın "pass any physical address — including an address from the SMRAM range," yapmasına izin verir ve SMRAM'den/SMRAM'e keyfi read/write üretir (CWE-20).
  • CVE-2021-3971 — SecureBackDoor / SecureBackDoorPeim (PchBiosWriteProtect, BiosRegionLock ile birlikte). LENOVO_BACKDOOR_NAMESPACE_GUID namespace'inde cE! adlı bir NVRAM variable'ı oluşturmak, driver'ın BIOS Control Register ve Protected Range register'larının doğru yapılandırmasını atlamasına neden olur ve SPI flash write protection'ı devre dışı bırakır.
  • CVE-2021-3972 — ChgBootDxeHook / ChgBootSmm. Eşleşen ChgBoot* UEFI variable'ını oluşturmak, hook'un "set the byte value of the Setup UEFI variable at offset 0x4D9 to zero," yapmasına ve böylece UEFI Secure Boot'u devre dışı bırakmasına yol açar.
Kavramsal tetikleyiciler (örnekleme amaçlı, silah hâline getirilmemiş)
# representative, from the public ESET writeup -- NOT weaponized
# CVE-2021-3970: SMI handler reads a physical address from caller and R/W's it
#   -> caller supplies an address inside SMRAM -> arbitrary SMRAM read/write
# CVE-2021-3971: SetVariable("cE!", LENOVO_BACKDOOR_NAMESPACE_GUID, ...) on next
#   boot path -> driver leaves BIOS Control Register / PRx unlocked
# CVE-2021-3972: SetVariable("ChgBoot*", ...) -> Setup[0x4D9] = 0 -> Secure Boot off

Warning

NVD, CVE-2021-3970'i CVSS 3.1 6.7 (MEDIUM, AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H, CWE-20) olarak puanlar. Üçü de zaten ayrıcalıklı, yerel bir saldırgana ihtiyaç duyar. 100'den fazla tüketici modeli (IdeaPad, Legion, Yoga, ThinkBook, V-series) etkilendi; bazı destek dışı modeller düzeltme almadı. (Başlangıçta istenen CVE-2022-3430 / CVE-2021-3614 ID'leri yaklaşıktır; bu sayfa, birincil, kaynakla doğrulanmış materyal olarak ESET WeLiveSecurity üçlüsünü — CVE-2021-3970/-3971/-3972 — belgeler.)

Detection

  • CHIPSEC: SPI flash write protection'ı kontrol etmek için chipsec_main -m common.bios_wp (BIOSWE/BLE/SMM_BWP/PRx); Secure Boot variable durumunu doğrulamak için -m common.secureboot.variables; SMM handler pointer doğrulaması için -m common.smm artı tools.smm.smm_ptr.
  • Binarly FwHunt / ESET araçları: SPI dump'larını SecureBackDoor, ChgBootDxeHook ve LenovoVariableSmm modülleri ile backdoor NVRAM variable namespace'leri için tara.
  • NVRAM variable'larını cE! / ChgBoot* adları ve LENOVO_BACKDOOR_NAMESPACE_GUID namespace'i için enumerate et.

Mitigation

  • Etkilenen model için LEN-73440 doğrultusunda Lenovo BIOS güncellemelerini uygula; düzeltme almayacak destek dışı cihazları değiştir.
  • Firmware üreticileri: üretim/debug driver'larını production image'larından çıkar; her SMI-handler pointer'ını kullanmadan önce SMRAM aralığına karşı doğrula.
  • Patch'lenemeyen birimler için derinlemesine savunma: Secure Boot / firmware-konfigürasyon ölçümlerine seal eden TPM-bilinçli full-disk encryption, böylece bir kurcalama veriyi erişilemez kılar. Donanım dayanakları: kilitli SMRAM (SMRR / D_LCK), SMM_Code_Chk_En ve SMM tarafından ayarlanan SPI flash write protection.

References