В прослойката Shim, използвана в повечето Linux дистрибуции за проверена загрузка в режим UEFI Secure Boot, е открита уязвимост (CVE-2023-40547), която може да доведе до отдалечено изпълнение на код и заобикаляне на механизма за проверена загрузка UEFI Secure Boot. Нападател, контролиращ HTTP сървър, на който се обръща Shim, може да върне специално форматиран отговор, водещ до контролирано записване в област извън буфера, за да се осигури изпълнението на кода на ранния етап на зареждане.
Уязвимостта е причинена от грешка в кода за зареждане на файлове по HTTP, която се проявява при обработката на некоректни отговори, върнати от HTTP сървъра, на който се обръща shim. Режимът HTTPBoot в Shim се поддържа от 2016 г. и позволява зареждане по мрежата, използвайки протокола HTTP за извличане на файла с товарача, извикван на следващия етап. Shim при зареждане на файлове чрез HTTP заделя буфер за получените данни, вземайки предвид не фактическия размер на данните, а размера, указан в HTTP заглавката „Content-Length“. Съответно, като върнете по-малка стойност в заглавката Content-Length, може да се постигне запис на края на заявката в паметта извън буфера.
Shim е удостоверен с цифров подпис от Microsoft и верифицира GRUB2 със собствен сертификат, което позволява на разработчиците на дистрибуции да не удостоверяват всяко обновление на ядрото и GRUB в Microsoft. Уязвимостта в Shim дава възможност за намеса в веригата на доверието при активен режим Secure Boot и получаване на пълен контрол над по-нататъшния процес на зареждане, например за зареждане на друга ОС, модификация на компоненти на операционната система и заобикаляне на защитата Lockdown.
Уязвимостта е отстранена в версия Shim 15.8, но за пълно блокиране на атаката чрез Shim е необходимо удостоверяване на новата версия от Microsoft и внедряването й в дистрибуции. Статусът на отстраняване на уязвимостта в дистрибуции може да се оцени на следните страници: Debian, Ubuntu, SUSE, RHEL, Fedora. Проблемът е, че без отзоваване на подписа на старата версия, корекцията е безсмислена, тъй като нападателят може да използва зареждащо устройство с уязвима версия на Shim, за да компрометира UEFI Secure Boot. Но отзоваването на подписа ще доведе до невъзможност за проверена загрузка на дистрибуции, които продължават да използват старата версия на Shim.
За блокиране на уязвимостта без отзоваване на цифровия подпис, дистрибутивите могат да използват механизма SBAT (UEFI Secure Boot Advanced Targeting), чиято поддръжка е реализирана за GRUB2, shim и fwupd в повечето популярни дистрибутиви на Linux. SBAT е разработен съвместно с Microsoft и предполага добавяне в изпълняемите файлове на компонентите на UEFI допълнителни метаданни, които включват информация за производителя, продукта, компонента и версията. Посочените метаданни са удостоверени с цифров подпис и могат отделно да бъдат включвани в списъците с разрешени или забранени компоненти за UEFI Secure Boot.
SBAT позволява блокиране на използването на цифровия подпис за отделни номера на версии на компонентите без необходимост от отзоваване на ключовете за Secure Boot. Блокирането на уязвимостите чрез SBAT не изисква използване на списък с отзовани сертификати UEFI (dbx), а се извършва на ниво замяна на вътрешния ключ за формиране на подписи и обновление на GRUB2, shim и други доставяни от дистрибутивите стартерни артефакти.
Освен разгледаната уязвимост, в Shim 15.8 също е поправено няколко по-малко опасни проблеми, експлоатирани локално:
- CVE-2023-40548 — целочислено препълване в функцията verify_sbat_section, водещо до препълване на буфера на 32-битови системи.
- CVE-2023-40546 — четене от паметта извън буфера при извеждане на съобщения за грешки чрез функцията LogError().
- CVE-2023-40549 — четене от паметта извън буфера при обработка в функцията verify_buffer_authenticode() на специално оформен файл във формат PE.
- CVE-2023-40550 — четене от паметта извън буфера в функцията verify_buffer_sbat().
- CVE-2023-40551 — четене от паметта извън буфера при разбор на файлове във формат MZ.
Източник: opennet.ru
