UEFIcanhazbufferoverflow: Phoenix SecureCore TPM variable overflow (CVE-2024-0762)¶
Phoenix SecureCore,
TCG2_CONFIGURATIONUEFI variable'ını yeniden valide edilmeyen bir GetVariable boyutu kullanarak fixed-size bir stack buffer'a okur; bu buffer'ı overflow eder ve firmware-level code execution'ı mümkün kılar.
Mechanism¶
Invariant
İki-çağrılı GetVariable idiom'u standarttır: boyutu öğrenmek için önce küçük
bir buffer ile çağır (servis EFI_BUFFER_TOO_SMALL ve gerekli DataSize'ı
döndürür), o boyutu allocate et, sonra tekrar çağır. Güvenlik invariant'ı
şudur: destination buffer, ikinci çağrıda geçtiğin DataSize kadar büyük
olmalıdır. Phoenix SecureCore TPM-configuration kodunda (modül GUID'i
E6A7A1CE-5881-4B49-80BE-69C91811685C), TCG2_CONFIGURATION için ikinci
GetVariable, daha büyük dönen bir DataSize geçerken aynı küçük fixed
buffer'ı yeniden kullanır — "aralarında yeterli kontrol olmadan, aynı
DataSize ile iki GetVariable çağrısı." UEFI variable'lar saldırgan tarafından
etkilenebilir olduğundan (lokal bir saldırgan variable'ı set edebilir),
DataSize buffer'ı aşar ve copy, stack'i overflow eder. CWE-120: fixed-size
bir buffer'a kopyalamada klasik yetersiz bounds check.
Walkthrough¶
Public Eclypsium disclosure'ı — temsili vulnerable pattern:
char buffer[8]; // fixed-size stack buffer
EVar = GetVariable("TCG2_CONFIGURATION", &guid, NULL, &data_size, buffer);
if (EVar == EFI_BUFFER_TOO_SMALL) { // data_size now > 8
EVar = GetVariable("TCG2_CONFIGURATION", &guid, NULL, &data_size, buffer);
// second call reuses the 8-byte buffer with the larger data_size
// -> stack buffer overflow when the variable is > 8 bytes
}
Conceptual trigger: lokal bir saldırgan TCG2_CONFIGURATION variable'ını fixed
buffer'dan daha büyük bir boyuta set eder, sonra kod path'ini tetikler (örn.
firmware setup üzerinden bir reboot), firmware içindeki stack'i overflow eder ve
firmware/SMM seviyesinde code execution kazanır — bir UEFI bootkit'e benzer
persistence için kullanılabilir.
Warning
Defensive/educational; yalnızca public Eclypsium advisory'si üzerine inşa et. Etkilenenler: birçok Intel ailesinde Phoenix SecureCore (Alder/Coffee/Comet/ Ice/Jasper/Kaby/Meteor/Raptor/Rocket/Tiger Lake); CVSS 7.5; Phoenix tarafından 2024-05-14'te patch'lendi.
Detection¶
- Firmware'i, etkilenen Phoenix SecureCore modül GUID'i / versiyonları için envanterle; vendor advisory'lerini uygula (Lenovo/Dell/HP/Acer güncelleme yayınladı).
- Firmware integrity / measured boot, sonuçta oluşan bir implant'ı tespit edebilir.
Mitigation¶
- Phoenix/OEM firmware güncellemesini uygula (ikinci GetVariable'dan önce buffer boyutunu yeniden valide eder).
- Genel fix: iki-çağrılı GetVariable idiom'unda undersized bir buffer'ı asla
yeniden kullanma; kopyalamadan önce
DataSize'ı allocation'a karşı yeniden kontrol et.