В слоя Shim, използван в повечето Linux дистрибуции за проверяване на зареждането в режим UEFI Secure Boot, е открито уязвимост (CVE-2023-40547), която може да доведе до отдалечено изпълнение на код и заобикалянето на механизма за проверка на зареждането UEFI Secure Boot. Атакувач, контролиращ HTTP сървър, към който се обръща Shim, може да върне специално форматиран отговор, предизвикващ контролирано записване извън границите на буфера за иницииране на изпълнението на код на ранния етап на зареждане.
Уязвимостта е причинена от грешка в кода за зареждане на файлове по HTTP, която се проявява при обработка на некоректни отговори, върнати от HTTP сървъра, към който се обръща shim. Режимът HTTPBoot в Shim се поддържа от 2016 г. и позволява организирането на зареждане по мрежата, използвайки протокол HTTP за извличане на файл с товара, който ще бъде извикан на следващия етап. При зареждане на файлове през HTTP Shim заделя буфер за получаваните данни, вземайки предвид не действителния размер на данните, а размера, указан в 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
