Skip to content

LogoFAIL UEFI image-parser bugs (CVE-2023-40238)

Binarly'nin UEFI DXE boot-logo image parser'larındaki firmware açıkları sınıfı (LogoFAIL); CVE-2023-40238, crafted RLE-compressed bir BMP'nin bir integer signedness hatasını ve DXE fazı sırasında, Secure Boot savunabilmeden önce bir arbitrary write'ı tetiklediği Insyde BmpDecoderDxe örneğidir.

Mechanism

Note

Modern UEFI firmware, DXE fazı sırasında bir üretici boot logosu çizer, bu da en ayrıcalıklı early-boot bağlamında çalışan image parser'lar (BMP, GIF, JPEG, PCX, TGA, PNG) ile geldiği anlamına gelir. Kırılan trust boundary data-to-firmware'dir: birçok tasarımda logo image'ı korumalı SPI bölgesini yeniden flash'lamadan değiştirilebilir — korumasız bir firmware volume'unda, EFI System Partition'da ya da OS seviyesinde/fiziksel bir saldırganın yazabileceği bir logo store'da bulunur. Yani saldırgan, Secure Boot herhangi bir şeyi doğrulayabilecek konumda olmadan önce, ayrıcalıklı bir parser'ın tükettiği byte'ları kontrol eder (Secure Boot logoyu kapsamaz).

Başarısız olan değişmez, çok erken çalışan bir parser'daki input validation'dır. Binarly, Insyde, AMI ve Phoenix parser'larında 29 sorun buldu, bunların 15'i code execution için istismar edilebilir. Genel sınıf: hatalı biçimlendirilmiş image header'ları (boyutlar, compression descriptor'ları, chunk uzunlukları) decoder'da out-of-bounds write'ları / overflow'ları sürükler ve decoder DXE'de çalıştığından saldırgan firmware seviyesinde arbitrary code execution kazanır — OS'in altında kalıcı.

Insyde örneği (CVE-2023-40238) için: BmpDecoderDxe'de crafted bir RLE4/RLE8 BMP'yi parse etmek, decode'un "copy data to a specific address during the DXE phase" yapmasına izin veren bir PixelHeight ve PixelWidth'i kapsayan integer signedness hatasına çarpar — bir arbitrary write primitive'i.

Walkthrough

Genel Binarly araştırmasından ve Tianocore/Insyde advisory'sinden kavramsal yeniden üretim; parser açığı bir bootkit olarak değil, örnekleme amaçlı gösterilmiştir.

Logoyu yerleştirme. Etkilenen sistemlerde boot logosu, write-korumalı BIOS bölgesine dokunmadan değiştirilebilir — örn. logoyu firmware'in onu okuduğu konuma yazarak. (Bunun bir re-flash gerektirip gerektirmediği platforma bağlıdır; Binarly birçoğunun gerektirmediğini gösterdi.) Saldırgan kötü niyetli bir BMP saklar.

Parser'ı tetikleme. Bir sonraki boot'ta, DXE logoyu render etmek için BmpDecoderDxe'yi çağırır ve signedness bug'ı tetiklenir:

Conceptual shape of the BMP signedness error (CVE-2023-40238)

/* BITMAPINFOHEADER carries signed biWidth/biHeight; RLE decode uses them. */
/* Advisory: integer signedness error involving PixelHeight and PixelWidth */
/* during RLE4/RLE8 decompression -> data copied to a specific address.    */
INT32 PixelWidth  = Header->PixelWidth;   /* attacker controlled           */
INT32 PixelHeight = Header->PixelHeight;  /* attacker controlled, signed   */

/* RLE run-length copy uses these as bounds; a negative/oversized value     */
/* makes the copy target / length escape the intended framebuffer.          */
rle_decode(dst /* chosen address */, src, PixelWidth, PixelHeight);
"Image parsing of crafted BMP logo files can copy data to a specific address during the DXE phase of UEFI execution" (advisory GHSA-5rp3-83j5-w2g4).

Etki. DXE sırasında arbitrary write, OS yeniden kurulumundan sağ çıkan firmware seviyesinde code execution'a yükselir (bir UEFI implant primitive'i). Etkilenen donanım birçok üreticiyi kapsar (açıklamaya göre Acer, Dell, Framework, Fujitsu, Gigabyte, HP, Intel, Lenovo, MSI, Samsung, Supermicro). Kardeş örnekler için bkz. LogoFAIL Phoenix image parser ve LogoFAIL additional parser CVEs.

Warning

Bu, patch'lenmiş sorunları özetler. DXE write gerçek bir primitive'dir ama tam implant zinciri kasıtlı olarak atlanmıştır; bunu bir build tarifi değil, bug sınıfı açıklaması olarak değerlendir.

Detection

  • Firmware measurement/attestation: kurcalanmış bir logo, ölçülen DXE bileşenlerini değiştirir — TPM PCR'larını izle ve değiştirilmiş logo volume'larını işaretlemek için bir firmware-integrity tarayıcısı (örn. Binarly/efiXplorer tarzı ya da üretici araçları) kullan.
  • Logo store'a / korumasız firmware volume'larına ya da firmware'in logoları okuduğu ESP konumuna yetkisiz yazmaları izle.

Mitigation

  • Parser'ı düzelten üretici firmware güncellemelerini uygula (CVE-2023-40238 doğrultusunda Insyde düzeltmesi; koordineli Aralık 2023 açıklaması).
  • SPI flash write protection'ı zorunlu kıl ve logoyu signature kapsamındaki bölge içinde sakla, böylece yetkili signing olmadan değiştirilemez (SPI flash BIOS write-protection misconfig ile ilişkilendir).
  • Özel boot-logo özelliklerini kısıtla/devre dışı bırak; Secure Boot ve firmware capsule signing'in etkin olduğunu doğrula.

References