Shim kihis, mida kasutatakse enamikus Linuxi distributsioonides UEFI Secure Boot kontrollitud käivitamiseks, on tuvastatud haavatavus (CVE-2023-40547), mis võib viia kaugelt koodi täitmise ja UEFI Secure Booti kontrollitud käivitamise mehhanismi ületamiseni. Ründaja, kes kontrollib Shim'iga ühendust juhtivat HTTP-serverit, võib saata spetsiaalselt vormindatud vastuse, mis viib kontrollitud kirjutamiseni puhverpiirist väljas, et korraldada koodi täitmine käivitamise varajases etapis.
Haavatavus on põhjustatud veast HTTP-failide laadimise koodis, mis ilmneb ebaõigete vastuste töötlemisel, mille HTTP-server, kuhu shim suunab, tagastab. HTTPBoot režiim shimis on toetatud alates 2016. aastast ja võimaldab korraldada võrgulaadimist, kasutades HTTP-protokolli laadimisfaili hankimiseks, mida kutsutakse järgmisel etapil. Shim eraldab failide laadimisel HTTP kaudu vastuvõetud andmete jaoks puhvri, arvestades mitte tegelikku andmete suurust, vaid suurust, mis on märgitud HTTP-pealkirjas «Content-Length». Seega, kui tagastada Content-Length pealkirjas väiksem väärtus, on võimalik saavutada päringu sabade kirjutamine puhvri välisse mällu.
Shim on kinnitatud Microsofti digitaalse allkirjaga ja kinnitab GRUB2 oma sertifikaadiga, mis võimaldab distributsioonide arendajatel mitte kinnitada igat kernel- ja GRUB-i värskendust Microsoftis. Haavatavus shimis võimaldab sekkuda usaldusketti aktiivse Secure Boot režiimi ajal ja saada täielikku kontrolli edasise laadimisprotsessi üle, näiteks teise operatsioonisüsteemi laadimine, operatsioonisüsteemi komponentide modifitseerimine ja Lockdowni kaitse ringi minemine.
Haavatavus on kõrvaldatud Shim 15.8 versioonis, kuid rünnaku täielik blokeerimine Shim'i kaudu nõuab uue versiooni allkirjastamise kinnitust Microsoftilt ja selle rakendamist jaotustes. Haavatavuse kõrvaldamise staatust jaotustes saab hinnata järgmistelt lehtedelt: Debian, Ubuntu, SUSE, RHEL, Fedora. Probleem seisneb selles, et ilma vana versiooni allkirjade tagasivõtmiseta on parandamine mõttetu, kuna ründaja võib kasutada haavatavat Shim'i versiooni UEFI Secure Boot'i kompromiteerimiseks. Kuid allkirjade tagasivõtmine tooks kaasa selle, et jaotuste allkirjastatud laadimine, mis kasutavad vana Shim'i versiooni, pole võimalik.
Digitaalallkirja tagasi võtmata haavatavuse blokeerimiseks võivad distributsioonid kasutada SBAT (UEFI Secure Boot Advanced Targeting) mehhanismi, mille toetust on rakendatud GRUB2, shim ja fwupd enamikus populaarsetes Linuxi distributsioonides. SBAT on välja töötatud koostöös Microsoftiga ning see hõlmab täiendavate metainformatsioonide lisamist UEFI komponente sisaldavatesse täiturfailidesse, sealhulgas tootja, toote, komponendi ja versiooni teavet. Mainitud metainformatsioon on digitaalallkirjaga allkirjastatud ja seda saab eraldi lisada lubatud või keelatud komponentide loetellu UEFI Secure Boot jaoks.
SBAT võimaldab blokeerida digitaalallkirja kasutamise üksikute komponentide versioonide numbrite jaoks ilma Secure Boot'i võtmete tagasivõtmiseta. Haavatavuste blokeerimine SBAT-i kaudu ei nõua UEFI tagasivõetud sertifikaatide loendi (dbx) kasutamist, vaid toimub allkirjade koostamiseks ja GRUB2, shim'i ning teiste jaotustega tarnitud laadimisartefaktide värskendamiseks sisemise võtme asendamise tasandil.
Shim 15.8-s on mainitud haavatavuse kõrval on parandatud ka mitu vähem ohtlikku lokaalset probleemi:
- CVE-2023-40548 — täisarvu ülevool funktsioonis verify_sbat_section, mis põhjustab 32-bitistes süsteemides puhversalvi ülevoolu.
- CVE-2023-40546 — mälu lugemine puhversalvist väljapoole vigade logimise funktsiooni LogError() kaudu.
- CVE-2023-40549 — mälu lugemine puhversalvist väljapoole, kui funktsioon verify_buffer_authenticode() töötleb spetsiaalselt vormindatud PE-faili.
- CVE-2023-40550 — mälu lugemine puhversalvist väljapoole funktsioonis verify_buffer_sbat().
- CVE-2023-40551 — mälu lugemine puhversalvist väljapoole MZ-failide töötlemisel.
Allikas: opennet.ru
