В прошивках MegaRAC от компании American Megatrends (AMI), которые применяются в контроллерах BMC (Baseboard Management Сontroller), используемых производителями серверов для организации автономного управления оборудованием, выявлена уязвимость, позволяющая неаутентифицированному атакующему удалённо прочитать содержимое памяти процесса, обеспечивающего функционирование web-интерфейса. Уязвимость проявляется в прошивках, выпускаемых с 2019 года, и вызвана поставкой старой версии HTTP-сервера Lighttpd, содержащей неисправленную уязвимость.
В кодовой базе Lighttpd данная уязвимость была устранена ещё в 2018 году в версии 1.4.51, но исправление было внесено без присвоения CVE-идентификатора и без публикации отчёта с описанием характера уязвимости. В примечании к выпуску, было упомянуто об устранении проблем с безопасностью, но основное внимание было акцентировано на уязвимости в mod_userdir, связанной с использованием символов “..” и “.” в имени пользователя.
В списке изменений также была упомянута проблема с обработкой HTTP-заголовков, но данное исправление было пропущено разработчиками прошивки и не перенесено в состав продукта, так как примечание о потенциальном устранении уязвимости класса use-after-free присутствовало лишь в тексте коммита, а в общем списке изменений не было указано, что ошибка приводит к обращению к памяти после освобождения.
Уязвимость позволяет прочитать содержимое памяти за пределами выделенного буфера. Проблема вызвана ошибкой в коде слияния HTTP-заголовков, применяемом при указании нескольких экземпляров HTTP-заголовка “If-Modified-Since”. При обработке второго экземпляра заголовка lighttpd выделял новый буфер, чтобы вместить объединённое значение и освобождал память под буфер, в который было помещено значение из первого заголовка. При этом указатель con->request.http_if_modified_since не изменялся и продолжал указывать на уже освобождённую область памяти.
Так как данный указатель использовался при операциях сравнения содержимого заголовка If-Modified-Since, результат которых приводил к генерации разных кодов возврата, атакующий мог путём перебора угадать новое содержимое памяти, которую ранее занимал первый буфер. Проблема могла использоваться в сочетании с другими уязвимостями, например, для определения раскладки памяти для обхода механизмов защиты, таких как ASLR (рандомизация адресного пространства).
Наличие уязвимости подтверждено в серверных платформах Lenovo и Intel, но данные компании не планируют выпускать обновления прошивок из-за истечения времени поддержки, использующих данные прошивки продуктов, и низкого уровня опасности уязвимости. Проблема проявляется в прошивках к платформам Intel M70KLP и Lenovo HX3710, HX3710-F и HX2710-E (уязвимость присутствует среди прочего в последних версиях прошивок Lenovo 2.88.58 и Intel 01.04.0030). Дополнительно сообщается, что уязвимость в lighttpd также проявляется в прошивках к оборудованию Supermicro и в серверах, на которых используются BMC-контроллеры компаний Duluth и AETN.