Remotangreifbarkeit in der Shim-Schicht, die das Umgehen von UEFI Secure Boot ermöglicht

In der Shim-Schicht, die in den meisten Linux-Distributionen für den verifizierten Boot im UEFI Secure Boot-Modus verwendet wird, wurde eine Schwachstelle (CVE-2023-40547) entdeckt, die zu einer Remotecodeausführung und zur Umgehung des verifizierten Boot-Mechanismus von UEFI Secure Boot führen kann. Ein Angreifer, der den HTTP-Server kontrolliert, auf den Shim zugreift, kann eine speziell gestaltete Antwort zurückgeben, die zu einer kontrollierten Speicherüberschreibung führt, um die Codeausführung früh im Bootprozess zu steuern.

Die Sicherheitsanfälligkeit wird durch einen Fehler im Code zum Laden von Dateien über HTTP verursacht, der bei der Verarbeitung ungültiger Antworten auftritt, die vom HTTP-Server zurückgegeben werden, auf den Shim zugreift. Der HTTPBoot-Modus in Shim wird seit 2016 unterstützt und ermöglicht das Netzwerk-Booting, indem das HTTP-Protokoll verwendet wird, um die Datei mit dem Bootloader zu beziehen, die in der nächsten Phase aufgerufen wird. Shim weist beim Laden von Dateien über HTTP einen Puffer für die empfangenen Daten zu, wobei es nicht die tatsächliche Größe der Daten, sondern die im HTTP-Header „Content-Length“ angegebene Größe berücksichtigt. Folglich kann eine geringere Angabe im Content-Length-Header dazu führen, dass das Ende der Anforderung in den Speicher außerhalb des Puffers geschrieben wird.

Shim ist durch eine digitale Signatur von Microsoft zertifiziert und verifiziert GRUB2 mit einem eigenen Zertifikat, was es Entwicklern der Distributionen ermöglicht, nicht jedes Kernel- und GRUB-Update bei Microsoft zu signieren. Die Schwachstelle in Shim ermöglicht es, sich in die Vertrauenskette während des aktiven Secure Boot-Modus einzuschleusen und vollständige Kontrolle über den weiteren Bootprozess zu erlangen, beispielsweise um ein anderes Betriebssystem zu booten, Betriebssystemkomponenten zu modifizieren und die Lockdown-Schutzmaßnahmen zu umgehen.

Die Schwachstelle wurde in der Version Shim 15.8 behoben, aber um einen vollständigen Angriffsschutz über Shim zu gewährleisten, ist eine Zertifizierung der neuen Version durch Microsoft und deren Implementierung in den Distributionen erforderlich. Der Status der Behebung der Schwachstelle in den Distributionen kann auf diesen Seiten bewertet werden: Debian, Ubuntu, SUSE, RHEL, Fedora. Das Problem besteht darin, dass ohne den Widerruf der Signatur für die alte Version die Behebung sinnlos ist, da ein Angreifer ein bootfähiges Medium mit der verwundbaren Version von Shim verwenden kann, um UEFI Secure Boot zu kompromittieren. Aber der Widerruf der Signatur würde die verifizierte Installation der Distributionen, die weiterhin die alte Version von Shim verwenden, unmöglich machen.

Um eine Schwachstelle zu blockieren, ohne die digitale Signatur zurückziehen zu müssen, 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 gemeinsam mit Microsoft entwickelt und sieht vor, dass in die ausführbaren Dateien von UEFI-Komponenten zusätzliche Metadaten aufgenommen werden, die Informationen über Hersteller, Produkt, Komponente und Version enthalten. Diese Metadaten werden mit einer digitalen Signatur versehen und können separat in die Listen von erlaubten oder verbotenen Komponenten für UEFI Secure Boot aufgenommen werden.

SBAT ermöglicht das Blockieren der Nutzung digitaler Signaturen für bestimmte Versionen von Komponenten, ohne dass Schlüssel für Secure Boot zurückgezogen werden müssen. Das Blockieren von Schwachstellen über SBAT erfordert nicht die Verwendung der Liste zurückgezogener UEFI-Zertifikate (dbx), sondern erfolgt auf der Ebene des Austauschs des internen Schlüssels zur Erstellung von Signaturen und der Aktualisierung von GRUB2, shim und anderen von den Distributionen gelieferten Boot-Artefakten.

Neben der angesprochenen Schwachstelle in Shim 15.8 wurden auch mehrere weniger schwerwiegende 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 Speicherbereich außerhalb des Puffers bei der Ausgabe von Fehlermeldungen über die Funktion LogError().
  • CVE-2023-40549 — Lesen aus einem Speicherbereich außerhalb des Puffers bei der Verarbeitung einer speziell gestalteten Datei im PE-Format in der Funktion verify_buffer_authenticode().
  • CVE-2023-40550 — Lesen aus einem Speicherbereich außerhalb des Puffers in der Funktion verify_buffer_sbat().
  • CVE-2023-40551 — Lesen aus einem Speicherbereich außerhalb des Puffers beim Analysieren von MZ-Dateien.

Quelle: opennet.ru

60GB SSD 8Gb DDR4