GRUB2 shim/bootloader secure-boot bypass cluster (post-BootHole)¶
BootHole'dan sonra açıklanan ve her biri UEFI Secure Boot chain of trust'ını bootloader katmanında kıran bir GRUB2 ve shim memory-safety ve verifier bug'ları ailesi.
Mechanism¶
The invariant being crossed
UEFI Secure Boot, kırılmamış bir chain of trust'a dayanır: firmware shim'i doğrular (Microsoft'un third-party UEFI CA'sı tarafından imzalı), shim GRUB2'yi doğrular (vendor cert) ve GRUB2'nin kontrolü devretmeden önce yüklediği kernel'i ve module'leri doğrulaması beklenir. Güvenlik invariant'ı, privileged pre-OS ortamında hiçbir unsigned veya attacker-controlled kod çalışmamasıdır. GRUB2'deki bir memory-safety bug'ı (veya shim'deki bir verification açığı), early-boot input'larını etkileyebilen bir attacker'ın kernel'in kendi korumaları var olmadan önce zaten güvenilen bootloader'ın içinde arbitrary kod çalıştırmasına izin verir. O kod trusted olarak çalıştığı için ardından bir unsigned kernel yükleyebilir, verification'ı devre dışı bırakabilir veya bir bootkit kurabilir — her imza teknik olarak validate olsa bile chain'i çökertir.
Orijinal BootHole (CVE-2020-10713), GRUB2'nin grub.cfg token parser'ındaki bir heap buffer overflow'uydu: GRUB2 bir flex fatal-error koşulunu kurtarılabilir olarak değerlendirdi ve aşırı boyutlu input'u undersized bir buffer'a kopyalamaya devam etti. BootHole sonrası code review'lar ardından aynı bug sınıflarından tekrarlayan bir cluster yüzeye çıkardı:
- Network/path/option parsing'deki buffer overflow'lar — ör. GRUB2'nin 2022 turundaki crafted input'ları ele alışı ve CVE-2022-28737, shim'in
handle_image()'ında crafted bir EFI binary yüklenirken oluşan bir buffer overflow. - Use-after-free / freed-memory access — ör. chainloader yolundaki CVE-2022-28736.
- Verifier bypass — CVE-2022-28735, burada GRUB2'nin
shim_lockverifier'ı dosya tiplerini düzgün kısıtlayamadı ve shim-protected Secure Boot sistemlerinde non-kernel dosyaların yüklenmesine izin vererek amaçlanan verification'ı bypass etti. - Aynı 2022 advisory ailesinde network-stack parsing açıkları (ör. IP/HTTP işleme).
Her biri tek başına "yalnızca" bir bootloader bug'ıdır, ama bootloader trusted olduğu için her biri bir Secure Boot bypass'ı doğurur.
Walkthrough¶
Kavramsal reproduction, public advisory'lerden (US-CERT VU#174059, Red Hat/Arch/Canonical errata) genelleştirilmiştir:
- Administrative/physical access'i olan bir attacker, signed bootloader'ın parse edeceği bir boot input'unu değiştirir — tarihsel olarak unsigned
grub.cfgveya crafted bir EFI image / network response. - Bozuk input bir memory-safety bug'ını (overflow, UAF) sürer veya hâlâ-trusted GRUB2/shim içindeki bir verifier açığından sızar.
- Attacker, bootloader'ın trust'ıyla UEFI/boot ortamında code execution elde eder.
- Oradan bir unsigned kernel yükler veya kalıcı bir bootkit yerleştirir, hiç imza forge etmeden Secure Boot'u yener.
Revocation is the hard part
Kodu düzeltmek yeterli değil: zafiyetli signed binary'ler, hash/cert'leri UEFI revocation database'ine (dbx) eklenene ya da SBAT generation number'ları üzerinden revoke edilene kadar trusted kalır. Revocation'ları çok erken push etmek hâlâ eski bootloader çalıştıran sistemleri brick'ler, dolayısıyla ekosistemin önce GRUB2, shim, kernel'ler, installer'lar ve recovery medyasını koordineli, aşamalı bir sırada güncellemesi gerekir.
Detection¶
- Boot integrity / measured boot: TPM PCR measurement'ları ve remote attestation, beklenmeyen bootloader veya configuration hash'lerini işaretler.
- Version & revocation auditing: hâlâ fix öncesi GRUB2/shim versiyonları çalıştıran host'ları ya da
dbx/SBAT revocation durumu yayınlanan baseline'ın gerisinde kalan host'ları tespit et. - Beklenmeyen
grub.cfgveya EFI System Partition değişiklikleri: ESP ve GRUB configuration üzerinde file-integrity monitoring. - Failed-boot / fallback pattern'leri revocation rollout'undan sonra ya uyumsuz eski bir binary'yi ya da tampering'i gösterebilir.
Mitigation¶
- GRUB2 ve shim'i patch'le, distribution'ından gelen fix'li versiyonlara (Red Hat, Canonical, Debian, SUSE, Oracle hepsi 2022 cluster'ı için errata yayınladı).
- SBAT revocation'ları /
dbxgüncellemelerini doğru sırada uygula, böylece downlevel, zafiyetli bootloader'lar trust'ı kaybetsin — yalnızca güncellenmiş chain yerine oturduktan sonra. - Mümkün olduğunda per-hash
dbxgirdileri yerine SBAT kullan; generation-number modeli büyük ölçekli revocation'ı yönetilebilir kılar. - measured boot + attestation'ı etkinleştir, böylece beklenmeyen kod yükleyen bir bypass, Secure Boot subvert edilse bile tespit edilir.
- Boot configuration'a admin/physical access'i kısıtla, çünkü bunların çoğu boot input'larını değiştirme yeteneği gerektirir.
İlgili girdilere bakın: BootHole — GRUB2 config buffer overflow, BlackLotus Secure Boot bypass, Baton Drop — Windows Boot Manager rollback, ve Secure Boot bypass via custom PE loader.