В 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.