В UEFI серверов нашли дыру: код до загрузки ОС одним ICMP-пакетом. Выключите PXE, ждите прошивку

28 октября opennet рассказал о критической дыре CVE-2026-97631 в TianoCore EDK II, открытой эталонной реализации UEFI, на которой собраны прошивки большинства серверных плат. Во время сетевой загрузки по PXE атакующий шлёт серверу один слишком длинный ICMP-пакет об ошибке и получает выполнение своего кода в прошивке, ещё до того, как запустится операционная система и сработает Secure Boot.

Грозит это в первую очередь тем, у кого серверы грузятся по сети: датацентрам, облачным провайдерам, стойкам с автоматической раскаткой ОС. Обычный VPS, который стартует с локального диска, PXE не использует, но железо под ним у хостера вполне может.

Буфер на 504 байта в драйвере UefiPxeBcDxe

Ошибка сидит в драйвере PXE Base Code (NetworkPkg/UefiPxeBcDxe). Пока машина грузится по сети, драйвер слушает ICMP-сообщения об ошибках и складывает каждое в поле Mode.IcmpError фиксированного размера 504 байта. Как пишут в бюллетене TianoCore, цикл копирования неправильно считает границы и в обработчике IPv4, и в обработчике IPv6: длинное сообщение всё равно копируется, а указатель сдвигается на общую длину вместо длины фрагмента. Хвост пакета ложится поверх соседних структур, и длину сообщения по дороге никто не ограничивает.

Что может атакующий: зависание или код в ring 0

Входа не нужно. Достаточно отправить одноадресное ICMP-сообщение на IP машины, причём с любого расстояния по сети, и попасть в момент, пока идёт PXE-загрузка. Дальше два варианта, оба описаны в бюллетене:

  • загрузка гарантированно зависает: портятся данные драйвера, и на следующем ICMP-сообщении ядро DXE падает с исключением процессора. Сервер не получает ОС и не уходит в восстановление;
  • если атакующий знает конкретную сборку прошивки, он кладёт в тот же пакет поддельное событие, и прошивка сама вызывает его байты на этапе DXE, в нулевом кольце, где никакой защиты ОС ещё нет.

Оценка CVSS 4.0 равна 9.5, уровень Critical. По данным Ars Technica, сам вредоносный код после перезагрузки не остаётся, но этого хватает, чтобы поставить что-то, что будет стартовать при каждой загрузке. HD Moore, автор Metasploit и директор по исследованиям в Dragos, говорит там же, что в этот момент у прошивки ещё есть доступ к TPM, и через баг можно добраться до шифрования диска, если у атакующего хоть ненадолго есть доступ к сети, а при краже железа это ещё проще.

Кого задевает: AMI, Insyde, Phoenix и Project Mu

EDK II в 2004 году открыла Intel, и на нём строят прошивки почти все производители BIOS: AMI, Insyde, Phoenix. Уязвимый код есть и в Project Mu, форке EDK II от Microsoft. Ars Technica пишет, что ошибке около 16 лет. В бюллетене затронутой названа ветка master EDK II по состоянию на 14 сентября 2026 года.

В Debian трекер безопасности отмечает пакет edk2 уязвимым во всех ветках: bookworm, trixie, forky и sid. Это тот самый пакет, из которого берётся OVMF для виртуалок в QEMU и KVM. Для trixie проблема помечена как незначительная, отдельного DSA по ней не будет.

Нашли Anthropic и Google, раньше времени выдала AMI

Уязвимость нашли Алекс Матросов из Anthropic и Дэн Холмс-Митра из Google, они же предложили исправление. Раскрывать её собирались согласованно в январе 2027 года. Но инженер AMI выложил исправление открытым pull request #13302 в репозиторий EDK II, и по нему суть дыры стала понятна всем. Мейнтейнеры в обсуждении прямо называют это ошибкой и нарушением эмбарго. Бюллетень TianoCore вышел 22 октября.

Исправление добавляет нормальную проверку границ в обработчики IPv4 и IPv6: слишком длинное ICMP-сообщение теперь просто обрезается, а буфер перед копированием обнуляется. Изменения влиты в master в середине октября. Беда в том, что до серверов они доедут только через обновления прошивок от каждого производителя плат, а это обычно долго.

Что сделать сейчас

  • Следить за обновлениями BIOS и UEFI у производителя своих плат и ставить их, как только появятся.
  • Если PXE-загрузка не нужна, выключить сетевую загрузку в настройках прошивки.
  • Если нужна, держать её в отдельном изолированном сегменте и не пропускать туда ICMP извне.
  • Для виртуалок на OVMF ждать обновлённый пакет edk2 в своём дистрибутиве.

Итого: ошибка в эталонном коде UEFI, на котором стоит почти любой сервер, открывает выполнение кода до ОС и до Secure Boot одним ICMP-пакетом во время сетевой загрузки. Исправление в EDK II уже есть, суть уязвимости публична, а обновлённые прошивки от производителей ещё впереди, так что пока лучше закрыть PXE там, где он не нужен.

Источники и ссылки


Комментарии загружаются…