KI-gestützte Cyberangriffe: Wie man intelligente Bedrohungen erkennt, verhindert und abwehrt

Jetzt lesen
Wir verwenden künstliche Intelligenz für Website-Übersetzungen, und obwohl wir uns um Genauigkeit bemühen, kann es sein, dass sie nicht immer 100%ig präzise sind. Wir danken Ihnen für Ihr Verständnis.

Behebung der Sicherheitslücke CVE-2024-0517 in Google Chrome

Angetrieben von MetaDefender Endpoint
von OPSWAT
Jetzt teilen
Foto der Teilnehmer des OPSWAT , Hoai Nam Do und Minh Quan Le
Teilnehmer des OPSWAT

Über CVE-2024-0517

CVE-2024-0517 ist eine Out-of-Bounds-Write-Schwachstelle in der V8-JavaScript-Engine von Google Chrome vor Version 120.0.6099.224, die entfernten Angreifern die Ausnutzung von Heap Corruption über eine gestaltete HTML-Seite ermöglicht. Die Sicherheitslücke wurde zuerst von Toan (Suto) Pham von Qrious Secure gemeldet. 

Screenshot mit einer CVSS 3.x Schweregrad-Basisbewertung von 8.8 (Hoch) und einer detaillierten Vektor-Beschreibung aus der NVD
CVE-2024-0517 in der Nationalen Datenbank für Sicherheitslücken (NVD)

Diese Schwachstelle entsteht durch Typverwechslung, die auftritt, wenn eine Anwendung eine Ressource wie einen Zeiger, ein Objekt oder eine Variable unter Verwendung eines Typs zuweist oder initialisiert, aber später auf diese Ressource unter Verwendung eines Typs zugreift, der mit dem ursprünglichen Typ nicht kompatibel ist (CWE-843). In diesem CVE wird die Typverwechslung während eines Speicherzuweisungsprozesses ausgelöst, der als gefaltete Zuweisung bezeichnet wird und von Maglev, einem optimierenden Compiler für die V8 JavaScript-Engine, zur Speicheroptimierung eingesetzt wird. 

Durch Ausnutzung der Typverwirrung und Schreiben von beliebigem Shellcode durch WebAssembly kann ein Angreifer Befehle auf dem Rechner des Opfers ausführen. 

Phasen des Angriffs

Angreifer können eine Website mit einer manipulierten HTML-Seite hosten und Nutzer über Phishing-E-Mails oder soziale Netzwerke dazu verleiten, darauf zuzugreifen. Wenn die Nutzer die Seite mit einer anfälligen Version von Google Chrome besuchen, führt der eingebettete Schadcode beliebige Befehle aus. 

Diagramm, das einen vierstufigen Prozess zur Ausnutzung einer Sicherheitslücke durch eine Phishing-E-Mail mit einer bösartigen HTML-Datei zeigt, die zur Remotecodeausführung führt
Offensivkampagne Schritt für Schritt 

V8-JavaScript-Engine 

Angreifer können eine Website mit einer manipulierten HTML-Seite hosten und Nutzer über Phishing-E-Mails oder soziale Netzwerke dazu verleiten, darauf zuzugreifen. Wenn die Nutzer die Seite mit einer anfälligen Version von Google Chrome besuchen, führt der eingebettete Schadcode beliebige Befehle aus. 

Magnetschwebebahn und gefaltete Zuteilung

Maglev, ein optimierender Compiler in V8, verbessert die Codeausführung und Speicherzuweisung. Maglev wird nur ausgeführt, wenn der Code häufig ausgeführt und als "heiß" markiert wird, was auf die Notwendigkeit einer schnelleren Ausführung durch Kompilierung anstelle der langsameren zeilenweisen Interpretation hinweist. 

Normalerweise erfolgen Zuweisungen in nicht zusammenhängenden Speicherbereichen, was zu einer spärlichen und ineffizienten Speichernutzung führt. Um dieses Problem zu lösen, verwendet V8 eine Technik namens gefaltete Zuweisung, die mehrere Variablen kontinuierlich und gleichzeitig zuweist. Auch Maglev optimiert die Zuweisungen, indem es die gefaltete Zuweisung in seinem Prozess verwendet. 

Diagramm mit farbkodierten Darstellungen von Ordnerzuordnungen mit und ohne zugewiesene Ordner
Malev & Ordnerzuordnung

Generative Müllabfuhr 

Um ungenutzte Speicherbereiche zu bereinigen, verwendet V8 eine Generational Garbage Collection (GC) Technik, die den Speicher in zwei Bereiche unterteilt: die junge Generation und die alte Generation. Außerdem gibt es zwei Garbage Collectors: den Minor Garbage Collector, der für die Bereinigung des Young Space zuständig ist, und den Major Garbage Collector, der die Bereinigung des Old Space übernimmt. Die junge Generation ist der Bereich des Speichers, in dem neu erstellte Objekte anfänglich zugewiesen werden, und die alte Generation ist ein Bereich des Speichers, in dem langlebige Objekte gespeichert werden. Objekte, die mehrere kleinere GC-Zyklen in der jungen Generation überlebt haben, werden schließlich in die alte Generation verschoben. 

Diagramm, das den Prozess der Objektzuweisung in jungen, mittleren und alten Speichergenerationen während der Garbage Collection (GC) zeigt
Erinnerungsräume: junge Generation und alte Generation

Schwachstellenanalyse

Übersicht

Die Schwachstelle tritt auf, wenn ein Objekt aus einer von einer Basisklasse geerbten Klasse ohne explizit definierten Konstruktor (Basis-Standardkonstruktor) erstellt wird und anschließend ein weiteres Objekt erstellt wird. Aufgrund der gefalteten Zuweisung kann auf die Zuweisung des ersten Objekts die Zuweisung des zweiten Objekts folgen. Tritt zwischen diesen beiden Zuweisungen ein Ereignis wie z.B. eine Garbage Collection ein, kann eine Typverwechslungsschwachstelle entstehen.

Analyse der Grundursache 

OPSWAT Graduate Fellows führten eine detaillierte Analyse des V8-Workflows während des Zuteilungsprozesses durch und stellten fest, dass die folgenden Funktionen während dieses Prozesses aufgerufen werden: 

Diagramm zur Veranschaulichung des Arbeitsablaufs von V8 während des Objektzuweisungsprozesses, von der Konstruktorsuche bis zur Erweiterung der Rohzuweisung
V8-Workflow während des Zuteilungsprozesses 

In diesem Prozess wurde ein Problem in der Funktion TryBuildFindNonDefaultConstructorOrConstruct festgestellt: Die Funktion BuildAllocateFastObject erweitert current_raw_allocation_ (ein Zeiger auf den Speicherbereich, der für mehrere Variablen gleichzeitig zugewiesen wird), um die Instanz der Kindklasse zu konstruieren, kann diese aber nicht löschen, indem sie auf null gesetzt wird. 

Infolgedessen wird das nächste erstellte Objekt immer unmittelbar nach dem Speicher, auf den current_raw_allocation_ verweist, zugewiesen, unabhängig von allen Ereignissen vor der zweiten Zuweisung. 

Diagramm zur Erstellung eines neuen Objekts im Speicher, von der "aktuellen Rohzuweisung" zum "nächsten Objekt"
current_raw_allocation' und 'Nächstes Objekt' im Speicherbereich

Wenn GC aufgerufen wird, kann der Speicherbereich neben dem an current_raw_allocation_ angrenzenden Speicher anderen Objekten zugewiesen werden. Dies kann zu einer Situation führen, in der nach dem Auslösen von GC und der Erstellung eines anderen Objekts zwei Zeiger auf denselben Speicherbereich verweisen, aber unterschiedliche Datentypen haben, was zu einer Typverwechslungsschwachstelle führt.

Ein Diagramm, das einen Verwirrungsprozess zeigt, der den Auslöser für die Garbage Collection und die Objektzuweisung veranschaulicht, die zu potenziellen Problemen führen
Typverwechslungsschwachstelle 

Ausbeutung

Um diese Schwachstelle auszunutzen, erstellten OPSWAT WebAssembly-Instanzen, die Shellcode enthielten, und versuchten, eine Typverwechslung durch GC auszulösen, um den Speicher zu kontrollieren und den Shellcode auszuführen: 

Ein Schritt-für-Schritt-Flussdiagramm zum Auslösen von Remotecode-Ausführung durch Typverwechslung in der V8-Engine, vom Auslösen der Typverwechslung bis zur Ausführung von Shellcode
Schritte zum Auslösen von Remote Code Execution in V8 Engine 

Auslösertyp-Verwirrung

Während der Initialisierung definieren wir zunächst ein Array (_arrayObject), das leere Objekte enthält. Als nächstes konstruieren wir eine Instanz der Child-Klasse sowie einen Trigger-Garbage-Collector. Schließlich definieren wir ein weiteres Array mit einer Fließkommazahl, das _arrayDouble heißt. 

Ein Codeschnipsel, der eine Funktion veranschaulicht, die die Garbage Collection in JavaScript auslöst und einen Array-Puffer erstellt

Diese Konstruktionen müssen wiederholt werden, so dass der Code mehrfach ausgeführt wird, was V8 veranlasst, ihn als "heiß" zu markieren und den Maglev-Compiler auszulösen. Wir erreichen dies, indem wir den Konstruktor der Kindklasse innerhalb einer Schleife wie folgt aufrufen: 

Ein kurzer JavaScript-Codeausschnitt zur Veranschaulichung einer Schleife, die mehrere Instanzen einer untergeordneten Klasse erzeugt

Eine Typenverwechslung wird nach wiederholter Initialisierung dieser Objekte in einer Schleife ausgelöst.

Lese- und Schreibprimitive erstellen

Nach erfolgreicher Auslösung der Typenverwechslung muss der Shellcode ausgeführt werden, indem der Speicher gelesen und an einer kontrollierten Adresse überschrieben wird. Zu diesem Zweck haben wir Lese- und Schreibprimitive entwickelt. Exploit-Primitive nutzen die Metadaten in den Objekten, um uns beliebige Lese-/Schreib-Speicherbereiche zu geben und diese zur Ausführung von beliebigem Code zu verwenden. 

Eine visuelle Darstellung des Lese- und Schreibprimitivs, die Speicherbereiche und Werte zeigt, die überschrieben werden
Lesen und Schreiben primitiv 

Lese- und Schreibprimitive in diesem Schritt ermöglichen es uns, den Sprungtabellenzeiger der WebAssembly-Instanz im folgenden Schritt zu steuern. 

WebAssembly-Instanzen erstellen

Als Nächstes haben wir zwei WebAssembly-Instanzen erstellt: eine zum Speichern des Shellcodes und eine weitere zum Auslösen des Shellcodes. Um zu vermeiden, dass der Shellcode über Lese- und Schreibprimitive direkt in den Speicher der WebAssembly-Instanz geschrieben wird, definieren wir einige Fließkomma-Konstantenwerte innerhalb der WebAssembly-Instanz. 

Ein in WebAssembly geschriebener Codeschnipsel, der den Speicherzugriff und die Speicherfunktionen veranschaulicht

Steuersprungtabellenzeiger der WebAssembly-Instanz

Mithilfe von Lese- und Schreibprimitiven passen wir den Sprungtabellenzeiger der zweiten WebAssembly-Instanz so an, dass einige Bytes des kompilierten Codes der Konstanten in der ersten WebAssembly-Instanz übersprungen werden, so dass die Fließkommakonstanten als unser beabsichtigter Shellcode interpretiert werden:

Assembler-Codefragment mit Anweisungen zum Verschieben von Daten in Register

Ausführen der WebAssembly-Instanz zum Ausführen des Shellcodes 

Nach dem Auslösen der Typverwechslung und der Verwendung von Lese-/Schreibprimitiven zur Steuerung der Sprungtabellenzeiger der WebAssembly-Instanzen haben wir schließlich die exportierte Funktion der zweiten WebAssembly-Instanz aufgerufen, die die Ausführung des Shellcodes in der ersten WebAssembly-Instanz bewirkt. 

Der Shellcode, den wir verwenden, ist so konzipiert, dass er alle Prozesse auf einem Linux-Rechner beendet, wie durch den folgenden Befehl: 

Ein einfacher Terminal-Befehlsausschnitt mit dem 'kill'-Befehl zum Beenden von Prozessen

Der Assemblercode zur Ausführung dieses Befehls, der aus den Fließkommazahlen umgewandelt wird, lautet wie folgt: 

Ein Assembler-Codeausschnitt für einen Syscall, der einen Prozess mit dem Befehl 'kill' beendet

Simulieren Sie die Sicherheitslücke 

Um diesen Angriff in einem realen Szenario zu simulieren, erstellten die OPSWAT eine bösartig gestaltete HTML-Seite. 

Ein WebAssembly-Codeausschnitt zur Ausführung von Shellcode durch Speicherzugriff und Datenmanipulation

Das Opfer erhält eine Phishing-E-Mail, die einen Link zu der Domäne enthält, die diese manipulierte HTML-Seite hostet. 

Screenshot einer Phishing-E-Mail in Verbindung mit einem Systemüberwachungsprogramm, der die Ausführung des Angriffs zeigt

Wenn das Opfer über die verwundbare Version von Google Chrome auf den Link zugreift, wird der Shellcode ausgeführt, wodurch alle Prozesse beendet werden. Infolgedessen wird der Benutzer abgemeldet, wie unten dargestellt: 

Screenshot des Anmeldebildschirms für Kali Linux

Sanierung

MetaDefender Endpoint™ wurde eingesetzt, um dieses CVE proaktiv zu entschärfen, indem es seine "Vulnerable Application"-Funktion nutzt. Die Lösung lokalisiert und zeigt alle zugehörigen CVEs für Google Chrome-Anwendungen innerhalb der Endpunktumgebung an. Um die Bedrohung zu neutralisieren, können Benutzer Chrome sofort deinstallieren oder den neuesten Sicherheitspatch anwenden. Durch die Implementierung einer der beiden Gegenmaßnahmen wird die CVE vollständig eingedämmt, wodurch das Risiko eines erfolgreichen Cyberangriffs auf den Endpunkt erheblich verringert wird.

MetaDefender Endpoint zeigt Google Chrome-Schwachstellen, einschließlich Details zu CVEs

Endpoint der nächsten Stufe 

Entdecken Sie, warum Organisationen, Institutionen und Unternehmen auf der ganzen Welt beim Schutz kritischer Endpunkte auf MetaDefender Endpoint vertrauen. Sprechen Sie noch heute mit einem Experten, um mehr zu erfahren, und überzeugen Sie sich selbst in einer kostenlosen Demo.  


Bleiben Sie auf dem Laufenden mit OPSWAT!

Melden Sie sich noch heute an, um die neuesten Unternehmensinformationen zu erhalten, Geschichten, Veranstaltungshinweise und mehr.