
Technische Analyse von CVE-2017-0037, einer Microsoft-Browser-Speicherkorruptionsschwachstelle, die Remote-Code-Ausführung über Typverwirrung in CSS/JS-Verarbeitung ermöglicht, mit PoC-Exploit-Details und Mitigationsstrategien.
CVE-2017-0037 (Sicherheitslücke durch Speicherbeschädigung im Microsoft-Browser)
Dieses Dokument befasst sich mit CVE-2017-0037- Sicherheitslücke durch Speicherbeschädigung im Microsoft-Browser. Zunächst wird erklärt, was Remote Code Execution (RCE) ist, und anschließend werden einige technische Details besprochen.
Was ist Remote Code Execution?
Ein Cyberangriff, bei dem ein Angreifer aus der Ferne Befehle auf einem anderen Computer ausführen kann, wird als Remote Code Execution bezeichnet. Remote-Code-Execution-Angriffe (RCE) werden am häufigsten durch schädliche Software verursacht, die vom Host heruntergeladen wurde, und können unabhängig vom Standort des Systems auftreten.
Um RCE zu erreichen, können die folgenden Wege genutzt werden:
Injection-Angriffe: Hier liefert der Angreifer fehlerhafte Eingaben mit der Absicht, dass ein Teil davon als Teil des Befehls verarbeitet wird.
Deserialisierungsangriffe: Das Deserialisierungsprogramm kann sorgfältig formulierte Benutzereingaben in den serialisierten Daten als ausführbaren Code lesen.
Out-of-Bounds-Write: Ein Angreifer kann möglicherweise eine Eingabe konstruieren, die über den zugewiesenen Puffer hinausgeht, wenn die Speicherzuweisung schlecht durchgeführt wird. Da ausführbarer Code ebenfalls im Speicher abgelegt ist, kann das Programm möglicherweise vom Benutzer bereitgestellte Daten ausführen, wenn sie an der richtigen Stelle geschrieben werden.
Type-Confusion-Angriff: Es besteht die Gefahr einer Typverwechslung, wenn ein Quellcode keine Maßnahmen ergreift, um die Authentizität einer übergebenen Entität zu überprüfen. Da Typverwechslung es einem Angreifer ermöglicht, Code einzuschleusen, der beliebige Anweisungen ausführen kann, indem er lediglich eine Diskrepanz bei den Objekttypen verursacht, ist sie riskant.
Ausführung eines RCE-Angriffs
Eine RCE-Angriffssequenz ist einfach durchzuführen. Zunächst durchsucht der Bedrohungsakteur das Internet nach gängigen Schwachstellen, die in einem effektiven Angriff ausgenutzt werden können. Nachdem er eine bestimmte Schwachstelle identifiziert hat, nutzt der Hacker den Exploit, um Zugriff zu erhalten. Nachdem er Zugriff erlangt hat, kann er das schädliche Skript verwenden, um seine Ziele zu erreichen, darunter Datenexfiltration, Geldwäsche, umfassende Überwachung und Dienstunterbrechung.
Die Sprache der Zielanwendung wird häufig zum Einschleusen von Code verwendet. Die Sprache wird dann vom serverseitigen Prozessor ausgeführt. Python, Java, Perl, Ruby und PHP sind gängige Programmiersprachen. Code-Injection ist auf Plattformen verbreitet, die ungeprüfte Eingaben sofort analysieren. Öffentliche Webanwendungen sind in der Tat ein großer Fokus für Hacker.
Schädliche Skripte werden typischerweise über Bash-Skripte ausgeführt. Ein Bash-Skript ist ein Textdokument, das Befehle enthält, die normalerweise in die Eingabeaufforderung eingegeben würden. Bash-Skripte ermöglichen es den enthaltenen Befehlen, korrekt zu funktionieren. Es ist üblich, ihnen ein „.sh“ anzuhängen, obwohl es nicht erforderlich ist. Nach der Paketierung fügt der Hacker den Code in eine anfällige App ein, die ihn dann ausführt. Die Anwendung könnte auch eine Entscheidung an den Kernel weitergeben, damit dieser sie ausführt.
Angriffsmetriken
Das folgende Bild zeigt die Basis-Score-Metriken von CVE-2017-0037.

Der CVSS-Bewertungswert beträgt hier 8.1(hoch).
Angriffsvektor- Die anfällige Komponente ist hier an den Netzwerk-Stack gebunden, und der Kreis potenzieller Angreifer reicht von den anderen genannten Alternativen bis zum gesamten Internet.
Die Angriffskomplexität dieser Schwachstelle ist hoch, das heißt, der Erfolg eines Angriffs hängt von Umständen außerhalb der Kontrolle des Angreifers ab. Ein Angriff kann also nicht nach Belieben ausgeführt werden, sondern erfordert vom Angreifer ein erhebliches Maß an Arbeit bei der Planung oder Umsetzung gegen das anfällige Element, bevor er voraussichtlich wirksam werden kann.
Der Vertraulichkeitswert ist hier hoch, was einen vollständigen Verlust der Vertraulichkeit bedeutet; der Angreifer erhält Zugriff auf alle Ressourcen der beschädigten Komponente.
Die Integrität ist hoch, was einen schwerwiegenden Verlust von Integrität und Schutz bedeutet.
Die Verfügbarkeit ist hoch, was einen vollständigen Verlust der Verfügbarkeit bedeutet und es dem Angreifer ermöglicht, den Zugriff auf die Ressourcen der betroffenen Komponente vollständig zu unterbinden.
Angriffsdetails
Die Schwachstelle CVE-2017-0037 war ein Type-Confusion-Fehler, der in Microsoft Edge und im Internet Explorer 10 und 11 auftrat. Er ermöglichte es Angreifern, auf der Zielmaschine remote Code auszuführen, wenn der Benutzer eine bösartige Website besuchte.
Der Fehler wurde von Google-Forscher Ivan Frantic aufgezeigt, und Google veröffentlichte die Details der Schwachstelle, da Microsoft sie nicht innerhalb der 90-tägigen Offenlegungsfrist beheben konnte.

Der vom Forscher veröffentlichte Proof-of-Concept (PoC)-Exploit zeigt, dass er Edge und IE zum Absturz bringen kann, sodass ein Angreifer remote Code ausführen und Administratorrechte auf dem kompromittierten System erlangen kann. Er bestätigte außerdem, dass der Angriff auf der 64-Bit-Version des Internet Explorers unter Windows Server 2012 R2 funktionierte und sowohl den 32-Bit-IE 11 als auch Microsoft Edge betraf.
Die Typverwechslung befindet sich in der
Layout::MultiColumnBoxBuilder::HandleColumnBreakOnColumnSpanningElemnt Funktion in mshtml.dll. Durch die Ausführung von beliebigem Code aus der Ferne über Vektoren, die Cascading Style Sheets (CSS)-Token-Sequenzen und manipulierten JavaScript-Code umfassen, die auf einem TH-Element operieren, kann der Angriff erfolgen.
Der PoC von Ivan Fratric von Google Project Zero
Wie vom Forscher Ivan Frantic angegeben, stürzt der PoC in
MSHTML!Layout::MultiColumnBoxBuilder::HandleColumnBreakOnColumnSpanningElement beim Lesen aus der Adresse 0000007800000070 ab.



Durch die Analyse des Codes rund um den Absturzpunkt kann beobachtet werden, dass an der Speicheradresse 00007ffe`8f330a51 der Inhalt des Registers rbp in das Register rcx gelesen wird. Anschließend weist der Aufruf von
MSHTML!Layout::Patchable<Layout::PatchableArrayData<Layout::MultiColumnBox::SMultiColumnBoxItem> >::Readable rax einen Wert zu (rax ist ein dafür vorgesehenes Register zum Speichern von Rückgabewerten von Funktionen).