Subject: [ASA-202106-43] grub: выполнение произвольного кода Рекомендация по безопасности UBLinux ASA-202106-43 ================================================== Уровень : Средний Дата : 2022-10-18 CVE-ID : CVE-2020-14372 CVE-2020-25632 CVE-2020-25647 CVE-2020-27749 CVE-2020-27779 CVE-2021-20225 CVE-2021-20233 Пакет : grub Тип : выполнение произвольного кода Удалённо : Нет Ссылка : https://security.ublinux.ru/AVG-34 Сводка ======= Пакет grub до версии 2:2.06-1 имеет уязвимость выполнение произвольного кода including выполнение произвольного кода and обход ограничения доступа. Решение ========== Обновление до версии 2:2.06-1. # pacman -Syu "grub>=2:2.06-1" Проблема(ы) была устранена в апстриме в версии 2.06. Путь для обхода ========== Нет. Описание =========== - CVE-2020-14372 (выполнение произвольного кода) GRUB2 позволяет использовать команду acpi, даже если прошивка сигнализирует о безопасной загрузке. Злоумышленник с локальными привилегиями root может поместить небольшой SSDT в /boot/efi и изменить grub.cfg, чтобы поручить grub загрузить указанный SSDT. Затем SSDT запускается ядром и перезаписывает конфигурацию блокировки ядра, позволяя злоумышленнику загружать неподписанные модули ядра и неподписанный код kexec. - CVE-2020-25632 (выполнение произвольного кода) Реализация rmmod для grub2 ошибочна, позволяя злоумышленнику выгрузить модуль, используемый в качестве зависимости, не проверяя, загружен ли какой-либо другой зависимый модуль. Это приводит к сценарию использования после освобождения, который может позволить злоумышленнику выполнить произвольный код и обойти защиту безопасной загрузки. - CVE-2020-25647 (выполнение произвольного кода) grub_usb_device_initialize() вызывается для обработки инициализации USB-устройства. Он считывает необходимые дескрипторы с USB-устройства и использует эти данные для заполнения некоторых структур данных USB. grub_usb_device_initialize() выполняет очень небольшую проверку границ и просто предполагает, что USB-устройство обеспечивает разумные значения. Такое поведение может вызвать повреждение памяти. При правильном использовании это приведет к выполнению произвольного кода, что позволит злоумышленнику обойти механизм безопасной загрузки. - CVE-2020-27749 (выполнение произвольного кода) grub_parser_split_cmdline() расширяет имена переменных, представленные в предоставленной командной строке, до их соответствующего содержимого переменных и использует буфер стека размером 1 КБ для временного хранения без достаточной проверки границ. Если функция вызывается с командной строкой, которая ссылается на переменную с достаточно большой полезной нагрузкой, возможно переполнение буфера стека, повреждение кадра стека и управление выполнением. Злоумышленник может использовать это, чтобы обойти защиту Secure Boot. - CVE-2020-27779 (обход ограничения доступа) Команда cutmem GRUB2 не поддерживает блокировку безопасной загрузки. Это позволяет привилегированному злоумышленнику удалять диапазоны адресов из памяти, создавая возможность обойти защиту безопасной загрузки после надлежащей сортировки схемы памяти grub. - CVE-2021-20225 (выполнение произвольного кода) Анализатор опций в GRUB2 позволяет злоумышленнику записывать за конец буфера, выделенного в куче, вызывая определенные команды с большим количеством конкретных кратких форм опций. - CVE-2021-20233 (выполнение произвольного кода) В коде рендеринга меню GRUB2 есть ошибка setparam_prefix() в коде рендеринга меню. Он выполняет вычисление длины в предположении, что для выражения одинарной кавычки потребуется 3 символа, тогда как на самом деле требуется 4 символа. Это позволяет злоумышленнику испортить память на один байт для каждой кавычки во входных данных. Влияние ====== Когда безопасная загрузка включена, полное нарушение целостности перспективы могут быть достигнуты за счет злонамеренного использования существующих команд, модули с боковой загрузкой, команда acpi, rmmod, ссылки на переменные и парсеры опций. Рекомендации ========== https://lists.gnu.org/archive/html/grub-devel/2021-03/msg00007.html https://git.savannah.gnu.org/gitweb/?p=grub.git;a=commit;h=3e8e4c0549240fa209acffceb473e1e509b50c95 https://git.savannah.gnu.org/gitweb/?p=grub.git;a=commit;h=7630ec5397fe418276b360f9011934b8c034936c https://git.savannah.gnu.org/gitweb/?p=grub.git;a=commit;h=128c16a682034263eb519c89bc0934eeb6fa8cfa https://git.savannah.gnu.org/gitweb/?p=grub.git;a=commit;h=4ea7bae51f97e49c84dc67ea30b466ca8633b9f6 https://git.savannah.gnu.org/gitweb/?p=grub.git;a=commit;h=d298b41f90cbf1f2e5a10e29daa1fc92ddee52c9 https://git.savannah.gnu.org/gitweb/?p=grub.git;a=commit;h=2a330dba93ff11bc00eda76e9419bc52b0c7ead6 https://git.savannah.gnu.org/gitweb/?p=grub.git;a=commit;h=2f533a89a8dfcacbf2c9dbc77d910f111f24bf33 https://security.ublinux.ru/CVE-2020-14372 https://security.ublinux.ru/CVE-2020-25632 https://security.ublinux.ru/CVE-2020-25647 https://security.ublinux.ru/CVE-2020-27749 https://security.ublinux.ru/CVE-2020-27779 https://security.ublinux.ru/CVE-2021-20225 https://security.ublinux.ru/CVE-2021-20233