CVE-2020-15999: Prinzipielle Analyse des Heap-Überlaufs der Chrome FreeType-Schriftartbibliothek

Schwachstellenprofil

Google gab bekannt, dass es in der FreeType-Schriftartenbibliothek der alten Version des Chrome-Browsers einen Heap-Überlauf gibt, der bei Ausnutzung zu RCE (Remote Code Execution) führen kann.

Sicherheitsexperten empfehlen Benutzern, so schnell wie möglich ein Upgrade auf Versionen nach 86.0.4240.111 durchzuführen, um das Risiko zu beseitigen.

Verletzlichkeitsprinzip

1. TTF eingebettetes Bild


TTF-Schriftarten unterstützen das Einbetten von Bildern im PNG-Format als Glyphendaten. Beim Einbetten werden die Bilddaten in der SBIX-Tabelle der Schriftartdatei gespeichert, und die Schriftartwiedergabe wird durch Extrahieren der Informationen realisiert, auf die im PNG in der SBIX-Tabelle zugegriffen wird wird bearbeitet. Das Format in der SBIX-Tabelle ist wie folgt:

1604646034_5fa4f492b0c85e9b0c6c8.png!klein

Der StrikeOffset in SBIX speichert den Offset der Strikes-Dateninformationen und der glyphDataOffset in Strikes
speichert den Offset der spezifischen Glypheninformationen. Das Format von Strikes und das Format der Glypheninformationen sind wie folgt:

1604646054_5fa4f4a6e70178c682f49.png!klein

1604646061_5fa4f4adac7c510baaad4.png!small

Die Daten in den Schriftartinformationen speichern die eingebetteten Bildinformationen. Nachfolgend finden Sie die SBIX- und gespeicherten Bildinformationen im Beispiel.

1604646107_5fa4f4db88ea03c7b7d49.png!small?1604646107975

PNG-Bildinformationen werden unter Hex(0x1a30 + 0x5aaec + 0x8) = 0x5c524 gespeichert. Über IHDR
können Sie einige grundlegende Informationen zum Bild sehen. Die spezifischen Informationen lauten wie folgt:

1604646115_5fa4f4e3c8de0fe4b9450.png!small?1604646116270

2. Implementierung der Load_SBit_Png-Funktion

Die Extraktion von PNG-Bildinformationen in der FreeType-Bibliothek wird durch die Funktion Load_SBit_Png realisiert. Der Verarbeitungsablauf der Load_SBit_Png-Funktion ist wie folgt:

1. Analysieren Sie den Speicher, auf den die Daten in den Glypheninformationen verweisen, in PNG

2. Extrahieren Sie die in IHDR gespeicherten Informationen des analysierten Bildes (Bildbreite und -höhe, Tiefe und Farbtyp usw.).

3. Extrahieren Sie die analysierten Informationen in Schriftartinformationen

4. Öffnen Sie gemäß den zuvor analysierten Informationen den Speicher zum Speichern der Bildinformationen

3. Verletzlichkeitsprinzip

Die Sicherheitsanfälligkeit tritt beim Extrahieren der analysierten Bildinformationen in die Glypheninformationen auf. Der im IHDR im PNG-Bild gespeicherte Datentyp für Breite und Höhe ist uint32. Beim Speichern der Glypheninformationen werden diese in einen vorzeichenlosen Kurztyp konvertiert Wenn zu diesem Zeitpunkt
die Breiten- und Höheninformationen des Bildes größer als 0x7FFF sind, wird es abgeschnitten.

1604646123_5fa4f4eb9fc6039eeebaa.png!small?1604646123943

Anschließend werden die entsprechenden in den Glypheninformationen gespeicherten Daten in die Bitmap übertragen, die zum Speichern der Glypheninformationen des PNG-Bildes verwendet wird. Die Zeilen in der Bitmap entsprechen der Höhe des Bildes, die Breite entspricht der Breite des Bildes. und der Pitch entspricht der Anzahl der Bytes, die von jeder Zeile der Bitmap belegt werden
. Das ist Breite * 4. Anschließend wird die Funktion ft_glyphslot_alloc_bitmap aufgerufen, um
die Speicherzuweisung zum Speichern von Bildinformationen in der Bitmap abzuschließen. Wie in der folgenden Abbildung dargestellt, beträgt die zugewiesene Speichergröße map->rows * (FT_ULong)map->pitch, also Höhe * die
Anzahl der von jeder Zeile belegten Bytes. Rufen Sie dann png_read_image auf, um die Bildinformationen in den Bitmap->Puffer zu lesen. Wenn
die Höhe des PNG-Bildes abgeschnitten wird, reicht der zugewiesene Speicher nicht aus und beim Lesen der Bildinformationen kommt es zu einem Heap-Überlauf.

1604646129_5fa4f4f1b617f2b69e920.png!small?1604646130023

Die Bitmap-Informationen nach dem Überlauf sind in der folgenden Abbildung dargestellt. Die Länge des Puffers beträgt 0xa3 * 0xc. Überprüfen Sie die Daten nach dem Puffer, um festzustellen, ob sie überschrieben wurden.

1604646136_5fa4f4f8db815ae6b0f0b.png!small?1604646137159

Überprüfung der Schwachstelle

1. Überprüfen Sie 87.0.4247.0 (interne Entwicklerversion).

1604646153_5fa4f50988325776c95e1.png!small?1604646153823

2. Analyse der Versionsreparatur 86.0.4240.111

Vergleichen Sie, ob imgWidth und imgHeight größer als 0x7FFF sind. Wenn größer, beenden Sie den Vorgang.

1604646161_5fa4f511ba47360b0a23e.png!small?1604646162070

Lernroute für Netzwerksicherheitsingenieure auf Unternehmensebene

Zu diesem Zeitpunkt benötigen Sie natürlich einen systematischen Lernweg

Wenn das Bild zu groß und von der Plattform komprimiert ist, können Sie es am Ende des Artikels herunterladen (kostenlos) und auch gemeinsam lernen und kommunizieren.

Einige meiner Sammlung von Einführungen zum Selbststudium zum Thema Cybersicherheit

Einige gute Video-Tutorials, die ich kostenlos bekommen habe:

Die oben genannten Informationen können durch [Scannen des QR-Codes unten] abgerufen und kostenlos weitergegeben werden

Ich denke du magst

Origin blog.csdn.net/text2206/article/details/129843809
Empfohlen
Rangfolge