Уязвимость в UEFI-прошивках Phoenix, затрагивающая многие устройства с CPU Intel

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

Источник: http://www.opennet.ru/opennews/art.shtml?num=61432