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,BiosRegionLockile birlikte).LENOVO_BACKDOOR_NAMESPACE_GUIDnamespace'indecE!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şenChgBoot*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.smmartıtools.smm.smm_ptr. - Binarly FwHunt / ESET araçları: SPI dump'larını
SecureBackDoor,ChgBootDxeHookveLenovoVariableSmmmodülleri ile backdoor NVRAM variable namespace'leri için tara. - NVRAM variable'larını
cE!/ChgBoot*adları veLENOVO_BACKDOOR_NAMESPACE_GUIDnamespace'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_Enve SMM tarafından ayarlanan SPI flash write protection.