In der Shim-Schicht, die in den meisten Linux-Distributionen für die verifizierte Boot-Sequenz im UEFI Secure Boot verwendet wird, wurde eine Schwachstelle (CVE-2023-40547) entdeckt, die zu einer Remote-Codeausführung und dem Umgehen des UEFI Secure Boot-Mechanismus führen kann. Ein Angreifer, der einen HTTP-Server kontrolliert, zu dem Shim eine Verbindung herstellt, kann eine speziell gestaltete Antwort zurückgeben, die zu einer kontrollierten Überschreibung des Speichers führt, um die Codeausführung bereits zu einem frühen Zeitpunkt im Boot-Prozess zu ermöglichen.
Die Schwachstelle wird durch einen Fehler im Code zum Hochladen von Dateien über HTTP verursacht, der beim Verarbeiten inkorrekter Antworten auftritt, die von dem HTTP-Server zurückgegeben werden, an den sich das Shim wendet. Der HTTPBoot-Modus in Shim wird seit 2016 unterstützt und ermöglicht das Booten über das Netzwerk, indem das HTTP-Protokoll zum Abrufen der Datei mit dem Bootloader verwendet wird, der in der nächsten Phase aufgerufen wird. Bei der Übertragung von Dateien über HTTP reserviert Shim einen Puffer für die empfangenen Daten, wobei nicht die tatsächliche Datenmenge, sondern die im HTTP-Header 'Content-Length' angegebene Größe berücksichtigt wird. Dementsprechend kann man durch das Zurückgeben eines kleineren Werts im Content-Length-Header erreichen, dass das Ende der Anfrage außerhalb des Puffers im Speicher geschrieben wird.
Shim ist durch eine digitale Signatur von Microsoft zertifiziert und verifiziert GRUB2 mit einem eigenen Zertifikat, was es den Entwicklern von Distributionen ermöglicht, nicht jedes Kernel- und GRUB-Update bei Microsoft zu signieren. Die Schwachstelle in Shim ermöglicht es, in die Vertrauenskette im aktiven Secure Boot-Modus einzudringen und die vollständige Kontrolle über den weiteren Bootprozess zu erlangen, beispielsweise um ein anderes Betriebssystem zu laden, Betriebssystemkomponenten zu modifizieren und den Lockdown-Schutz zu umgehen.
Die Sicherheitsanfälligkeit wurde in der Version Shim 15.8 beseitigt. Für eine vollständige Blockierung des Angriffs über Shim sind jedoch eine neue Version von Microsoft erforderlich sowie deren Implementierung in den Distributionen. Der Status der Beseitigung der Sicherheitsanfälligkeit in den Distributionen kann auf den folgenden Seiten eingesehen werden: Debian, Ubuntu, SUSE, RHEL, Fedora. Das Problem besteht darin, dass ohne den Widerruf der Signatur der alten Version der Fix sinnlos ist, da ein Angreifer ein bootfähiges Medium mit der anfälligen Version von Shim verwenden kann, um UEFI Secure Boot zu kompromittieren. Der Widerruf der Signatur führt jedoch dazu, dass eine verifizierte Bootsequenz für Distributionen, die weiterhin die alte Version von Shim nutzen, nicht möglich ist.
Um eine Schwachstelle ohne Widerruf der digitalen Signatur zu schließen, können Distributionen den SBAT-Mechanismus (UEFI Secure Boot Advanced Targeting) verwenden, dessen Unterstützung in den meisten beliebten Linux-Distributionen für GRUB2, shim und fwupd implementiert ist. SBAT wurde in Zusammenarbeit mit Microsoft entwickelt und bedeutet, dass zusätzlich zu den ausführbaren Dateien von UEFI-Komponenten Metadaten hinzugefügt werden, die Informationen über Hersteller, Produkt, Komponente und Version enthalten. Diese Metadaten werden digital signiert und können separat in die Listen der genehmigten oder verbotenen Komponenten für UEFI Secure Boot aufgenommen werden.
SBAT ermöglicht es, die Verwendung digitaler Signaturen für bestimmte Versionsnummern von Komponenten zu blockieren, ohne dass es erforderlich ist, Schlüssel für Secure Boot zu widerrufen. Die Blockierung von Sicherheitsanfälligkeiten über SBAT erfordert nicht die Nutzung einer Liste für widerrufene UEFI-Zertifikate (dbx), sondern erfolgt auf der Ebene des Austauschs des internen Schlüssels zur Erstellung von Signaturen sowie bei der Aktualisierung von GRUB2, Shim und anderen von den Distributionen gelieferten Boot-Artefakten.
Neben der bereits angesprochenen Schwachstelle in Shim 15.8 wurden auch mehrere weniger gefährliche Probleme behoben, die lokal ausgenutzt werden können:
- CVE-2023-40548 – ganzzahliges Überlaufproblem in der Funktion verify_sbat_section, das zu einem Pufferüberlauf auf 32-Bit-Systemen führt.
- CVE-2023-40546 – Lesen aus einem Pufferüberlaufbereich bei der Fehlerausgabe über die Funktion LogError().
- CVE-2023-40549 – Lesen aus einem Pufferüberlaufbereich bei der Verarbeitung einer speziell gestalteten PE-Datei in der Funktion verify_buffer_authenticode().
- CVE-2023-40550 – Lesen aus einem Pufferüberlaufbereich in der Funktion verify_buffer_sbat().
- CVE-2023-40551 – Lesen aus einem Pufferüberlaufbereich während der Analyse von MZ-Dateien.
Quelle: opennet.ru
