Розкрито інформацію про 8 уразливостей у завантажувачі GRUB2, що дозволяють обійти механізм UEFI Secure Boot та домогтися запуску неверифікованого коду, наприклад, здійснити впровадження шкідливого програмного забезпечення, що працює на рівні завантажувача або ядра.
Нагадаємо, що в більшості Linux-дистрибутивів для верифікованого завантаження в режимі UEFI Secure Boot використовується невеликий прошарок shim, завірений цифровим підписом Microsoft. Цей прошарок верифікує GRUB2 власним сертифікатом, що дозволяє розробникам дистрибутивів не завіряти кожне оновлення ядра та GRUB у Microsoft. Вразливості в GRUB2 дозволяють досягти виконання свого коду на етапі після успішної верифікації shim, але до завантаження операційної системи, вклинившись в ланцюжок довіри при активному режимі Secure Boot і отримавши повний контроль за подальшим процесом завантаження, у тому числі для завантаження іншої ОС, модифікації компонентів операційної системи та обходу.
Як і у випадку з минулорічною вразливістю BootHole, для блокування проблеми недостатньо оновити завантажувач, оскільки атакуючий, незалежно від операційної системи, може для компрометації UEFI Secure Boot використовувати завантажувальний носій зі старою вразливою версією GRUB2, завіреною цифровим підписом. Проблема вирішується лише оновленням списку відкликаних сертифікатів (dbx, UEFI Revocation List), але в цьому випадку буде втрачено можливість використання старих інсталяційних носіїв c Linux.
На системах із прошивками, в яких оновлено список відкликаних сертифікатів, у режимі UEFI Secure Boot можна буде завантажити лише оновлені збирання дистрибутивів Linux. Дистрибутивам потрібно буде оновити інсталятори, завантажувачі, пакети з ядром, fwupd-прошивки і shim-прошарку, згенерувавши для них нові цифрові підписи. Користувачі повинні будуть оновити інсталяційні образи та інші завантажувальні носії, а також завантажити список відкликаних сертифікатів (dbx) у прошивку UEFI. До оновлення dbx в UEFI система залишається вразливою незалежно від встановлення оновлень ОС. Статус усунення вразливостей можна оцінити на цих сторінках: Ubuntu, SUSE, RHEL, Debian.
Для вирішення проблем, що виникають при розповсюдженні відкликаних сертифікатів, в майбутньому планується задіяти механізм SBAT (UEFI Secure Boot Advanced Targeting), підтримка якого реалізована для GRUB2, shim і fwupd, і починаючи з наступних оновлень буде використовуватися замість функціональності пакету dbxto. SBAT розроблений спільно з Microsoft і передбачає додавання до виконуваних файлів компонентів UEFI нових метаданих, які включають інформацію про виробника, продукт, компонент і версію. Зазначені метадані завіряються цифровим підписом і можуть додатково включатися до списків дозволених або заборонених компонентів для UEFI Secure Boot. Таким чином, SBAT дозволить при відкликанні маніпулювати номерами версій компонентів без необхідності перегенерації ключів для Secure Boot і формування нових підписів для ядра, shim, grub2 і fwupd.
Виявлені вразливості:
- CVE-2020-14372 — за допомогою команди acpi у GRUB2 привілейований користувач локальної системи може завантажити модифіковані таблиці ACPI, розмістивши SSDT (Secondary System Description Table) у каталозі /boot/efi та змінивши налаштування grub.cfg. Незважаючи на активність режиму Secure Boot, запропонований SSDT буде виконаний ядром і може використовуватися для відключення захисту LockDown, що блокує шляхи обходу UEFI Secure Boot. В результаті атакуючий може домогтися завантаження свого модуля ядра або запуску коду через механізм kexec без перевірки цифрового підпису.
- CVE-2020-25632 — звернення до звільненої області пам'яті (use-after-free) у реалізації команди rmmod, що виявляється при спробі вивантажити будь-який модуль без урахування пов'язаних з ним залежностей. Вразливість не виключає створення експлоїту, який може призвести до виконання коду в обхід верифікації Secure Boot.
- CVE-2020-25647 — запис за межі буфера функції grub_usb_device_initialize(), що викликається при ініціалізації USB-пристроїв. Проблема може бути експлуатована через підключення спеціально підготовленого USB-пристрою, що видає параметри розмір яких не відповідає розміру буфера, виділеного для структур USB. Атакуючий може досягти виконання коду, не верифікованого в Secure Boot, через маніпуляції з USB-пристроями.
- CVE-2020-27749 - переповнення буфера в функції grub_parser_split_cmdline(), яке може бути викликано вказівкою в командному рядку GRUB2 змінних, розміром більше 1 КБ. Вразливість дозволяє досягти виконання коду в обхід Secure Boot.
- CVE-2020-27779 - команда cutmem дає можливість атакуючому видалити діапазон адрес з пам'яті для обходу Secure Boot.
- CVE-2021-3418 – зміни в shim_lock створили додатковий вектор для експлуатації торішньої вразливості CVE-2020-15705. При установці в dbx сертифіката, який використовується для підпису GRUB2, GRUB2 дозволяв завантажити будь-яке ядро безпосередньо без перевірки підпису.
- CVE-2021-20225 - можливість запису даних за межі буфера при запуску команд з дуже великою кількістю опцій.
- CVE-2021-20233 — можливість запису даних за кордон буфера через неправильний розрахунок розміру буфера при використанні лапок. При розрахунку розміру передбачалося, що для екранування одинарної лапки потрібно три символи, хоча насправді потрібно чотири.
Джерело: opennet.ru
