В UEFI-прошивките Phoenix SecureCore, използвани на много лаптопи, компютри и сървъри с процесори Intel, е установена уязвимост (CVE-2024-0762), която позволява при наличен достъп до системата да се постигне изпълнение на код на ниво фърмуер. Уязвимостта може да се използва след успешна атака на системата, за да се остави бекдор във фърмуера, който работи над операционната система, заобикаля механизми за сигурност на ОС, остава незабелязан от програми за откриване на злонамерен софтуер и запазва своето присъствие след преинсталиране на ОС.
Уязвимостта е причинена от небезопасно използване на променливата TCG2_CONFIGURATION в конфигурацията на TPM (Trusted Platform Module), манипулации с която могат да доведат до препълване на буфера и потенциално изпълнение на код с привилегии на UEFI-фърмуера, т.е. на ниво SMM (System Management Mode), което е с по-висок приоритет от хипервизорния режим и нулевото защитно ниво, предоставяйки неограничен достъп до цялата системна памет. Уязвимостта присъства в кода за обработка на конфигурацията на TPM в UEFI и се проявява независимо от наличието на TPM-чип.
Причината за възникващото препълване е некоректен двоен повик към UEFI-сервиза GetVariable, ако стойността на TCG2_CONFIGURATION надвишава размера, първоначално заделен в стека на буфера, като въпреки това в двете повиквания е използвана една и съща променлива с размер data_size без промяна след първото повикване. Ако атакуващият има възможност да промени стойността на UEFI-променливата TCG2_CONFIGURATION по време на работа на системата, той може да я зададе достатъчно висока, така че първото повикване да върне кода EFI_BUFFER_TOO_SMALL. Следователно, след първото повикване стойността на data_size вместо първоначално зададения размер на съществуващия буфер ще бъде зададена на размера на променливата TCG2_CONFIGURATION, което ще доведе до препълване на буфера при второто повикване.
void Function_0000537c(void){
…
ulonglong data_size;
char buffer [8];
…
EVar1 = (*gRS_2->GetVariable)
((CHAR16 *)TCG2_CONFIGURATION, &gTCG2_CONFIG_FORM_SET_GUID,
(UINT32 *)0x0, &data_size, buffer);
if (EVar1 == EFI_BUFFER_TOO_SMALL) {
EVar1 = (*gRS_2->GetVariable)
((CHAR16 *)TCG2_CONFIGURATION,&gTCG2_CONFIG_FORM_SET_GUID,
(UINT32 *)0x0,&data_size,buffer)
Проблемата се проявява в фърмуерите Phoenix SecureCore, използвани на устройства с процесори Intel от семейството AlderLake, CoffeeLake, CometLake, IceLake, JasperLake, KabyLake, MeteorLake, RaptorLake, RocketLake и TigerLake. Възможността за извършване на атака на конкретна система зависи от настройките на фърмуера и възможността за достъп до променливата TCG2_CONFIGURATION. Пример за експлоатация на уязвимостта е демонстриран на лаптопите Lenovo ThinkPad X1 Carbon от поколение Gen и Lenovo ThinkPad X1 Yoga 4 от поколение. Уязвимостта е отстранена в априлските и майските актуализации на фърмуерите от Technologies и Lenovo.
Източник: opennet.ru
