Zephyrnet-Logo

Chrome Zero-Day: „Dieser Exploit ist in freier Wildbahn“, also überprüfen Sie jetzt Ihre Version

Datum:

Das neueste Chrome-Update von Google ist da, und dieses Mal das Unternehmen hat kein Blatt vor den Mund genommen über einen der beiden darin enthaltenen Sicherheitspatches:

Google ist sich bewusst, dass ein Exploit für CVE-2023-3079 kommt in freier Wildbahn vor.

Es gibt keine zweistufige Trennungsformel, wie wir sie oft bei Google gesehen haben, um zu sagen, dass dem Unternehmen „Berichte über einen Exploit bekannt sind“.

Dieses Mal heißt es: „Wir sind uns dessen ganz allein bewusst“, was noch deutlicher übersetzt werden kann: „Wir wissen, dass Betrüger dies missbrauchen, während wir sprechen“, da der Fehlerbericht direkt von Googles eigener Threat Research Group stammt.

Wie üblich bedeutet dies, dass Google einen aktiven Angriff untersuchte (ob gegen Google selbst oder eine externe Organisation, wir wissen nicht), bei dem Chrome von einer bisher unbekannten Sicherheitslücke betroffen war.

Der Fehler wird einfach wie folgt beschrieben: Typverwirrung in V8. (Verständlicherweise sagt Google zum jetzigen Zeitpunkt nicht mehr als das.)

Wie wir bereits erklärt haben, a Verwirrung eingeben Ein Fehler tritt auf, wenn Sie einem Programm einen Datenblock bereitstellen, den es analysieren, validieren, verarbeiten und auf eine bestimmte Weise bearbeiten soll …

… aber später gelingt es Ihnen, das Programm dazu zu bringen, die Daten auf eine andere, unautorisierte, nicht validierte und möglicherweise gefährliche Weise zu interpretieren.

Gefahren durch Typverwechslung erklärt

Stellen Sie sich vor, Sie schreiben ein Programm in C. (Ob Sie C beherrschen oder nicht, spielt keine Rolle, Sie können einfach mitmachen.)

In C deklarieren Sie Variablen normalerweise einzeln und reservieren so nicht nur Speicher, wo sie gespeichert werden können, sondern signalisieren dem Programm auch, wie diese Variablen verwendet werden sollen.

Beispielsweise:

 long long int JulianDayNumber; signiertes Zeichen* Kundenname;

Die erste Variablendeklaration reserviert 64 Bits zum Speichern eines einfachen alten ganzzahligen Werts, der die astromonomische Tageszahl darstellt. (Falls Sie sich fragen, heute Nachmittag ist JDN 23157 – Julianische Tage beginnen um Mittag, nicht um Mitternacht, da Astronomen oft nachts arbeiten und Mitternacht die Mitte ihres Arbeitstages ist.)

Die zweite reserviert 64 Bit zum Speichern einer Speicheradresse, an der die Textzeichenfolge eines Kundennamens zu finden ist.

Wie Sie sich vorstellen können, sollten Sie diese beiden Werte besser nicht verwechseln, da eine Zahl, deren Verwendung als Tageszahl sinnvoll und sicher ist, wie z. B. 23157, mit ziemlicher Sicherheit nicht sicher als Speicheradresse verwendet werden kann.

Wie Sie diesem Speicherauszug eines laufenden Windows-Programms entnehmen können, beginnt die niedrigste Speicheradresse, die zur Verwendung zugewiesen ist, bei 0x00370000, was in Dezimalzahl 3,604,480 ist, viel größer als jede vernünftige Tageszahl.

Die tatsächlich von Windows verwendeten Speicheradressen variieren im Laufe der Zeit zufällig, um es Kriminellen zu erschweren, Ihr Speicherlayout zu erraten. Wenn Sie also dasselbe Programm ausführen würden, würden Sie Werte erhalten, die aber dennoch ähnlich sind:

Und (obwohl es sich am unteren Rand des Bildes oben befindet) die Speicheradressen des Abschnitts mit den Laufzeitbenutzerdaten, von dem aus dieses Programm ausgeführt wurde 0x01130000 zu 0x01134FFF, was den unwahrscheinlichen Datumsbereich vom 22. Juli 44631 bis 16. August 44687 darstellt.

Wenn Sie tatsächlich versuchen, diese beiden Variablen zu verwechseln, sollte der Compiler versuchen, Sie zu warnen, beispielsweise so:

 JulianDayNumber = Kundenname; Kundenname = JulianDayNumber; Warnung: Zuweisung macht Ganzzahl aus Zeiger ohne Umwandlung Warnung: Zuweisung macht Zeiger aus Ganzzahl ohne Umwandlung

Wenn Sie schon einmal in C programmiert haben, wissen Sie, dass Sie der Einfachheit halber Variablen mit mehreren unterschiedlichen Interpretationen deklarieren können, indem Sie die verwenden union Stichwort, so:

 Union { long long int JulianDayNumer; signiertes Zeichen* Kundenname; } Daten;

Sie können jetzt auf zwei verschiedene Arten auf genau dieselbe Variable im Speicher verweisen.

Wenn du schreibst data.JulianDayNumber, interpretieren Sie die gespeicherten Daten auf magische Weise als Ganzzahl, aber schreibend data.CustomerName teilt dem Compiler mit, dass Sie auf eine Speicheradresse verweisen, auch wenn Sie auf dieselben gespeicherten Daten zugreifen.

Was Sie tun, ist mehr oder weniger, dem Compiler zu gestehen, dass Sie die Daten, die Sie haben, manchmal als Datum und manchmal als Speicheradresse behandeln, und das auch Sie übernehmen die Verantwortung dafür, sich daran zu erinnern, welche Interpretation zu welchem ​​Zeitpunkt gilt im Code.

Sie könnten sich für eine zweite Variable entscheiden, die als a bekannt ist tag (normalerweise eine Ganzzahl), die zu Ihrem passt union um den Überblick darüber zu behalten, mit welcher Art von Daten Sie gerade arbeiten, zum Beispiel:

 struct { int tag; Union { long long int JulianDayNumer; signiertes Zeichen* Kundenname; } Daten; } Wert;

Sie könnten das wann entscheiden value.tag eingestellt ist 0, die Daten sind noch nicht zur Verwendung initialisiert, 1 bedeutet, dass Sie ein Datum speichern, 2 bedeutet, dass es sich um eine Speicheradresse handelt, und alles andere weist auf einen Fehler hin.

Nun, lassen Sie besser nicht zu, dass jemand anderes sich damit anlegt value.tag Andernfalls kann es zu dramatischen Fehlfunktionen Ihres Programms kommen.

Ein besorgniserregenderes Beispiel könnte etwa so aussehen:

 struct { int tag; // 1 = Hash, 2 = Funktionszeiger Union { unsigned char hash[16]; // entweder einen zufälligen Hash speichern struct { void* openfunc; // oder zwei sorgfältig validierte void* closefunc; // Codezeiger zur späteren Ausführung } validieren; } } Wert;

Jetzt überlasten wir denselben Speicherblock, sodass wir ihn manchmal zum Speichern eines 16-Byte-Hashs und manchmal zum Speichern von zwei 8-Byte-Zeigern auf Funktionen verwenden können, die unser Programm später aufrufen wird.

Ganz klar, wann value.tag == 1, würden wir unserer Software gerne erlauben, überhaupt jede 16-Byte-Zeichenfolge in dem für die Union zugewiesenen Speicher zu speichern, da Hashes pseudozufällig sind, sodass jede Ansammlung von Bytes gleich wahrscheinlich ist.

Aber wenn value.tag == 2, müsste unser Code besonders vorsichtig sein, um zu verhindern, dass der Benutzer nicht validierte, nicht vertrauenswürdige oder unbekannte Funktionsadressen zur späteren Ausführung bereitstellt.

Stellen Sie sich nun vor, Sie könnten einen Wert an diesen Code senden, während das Tag auf 1 gesetzt war, sodass er nicht überprüft und validiert wurde ...

… aber später, kurz bevor das Programm den gespeicherten Wert tatsächlich verwendete, konnten Sie den Code dazu verleiten, das Tag auf 2 umzustellen.

Der Code würde dann Ihre nicht validierten Funktionsadressen als „bekannt und bereits als sicher verifiziert“ akzeptieren (obwohl dies nicht der Fall war) und die Programmausführung vertrauensvoll an einen betrügerischen Speicherort weiterleiten, den Sie zuvor heimlich ausgewählt hatten.

Und das passiert bei einem Typverwirrungsfehler, wenn auch anhand eines erfundenen und vereinfachten Beispiels:

Speicher, der sicher verbraucht werden könnte, wenn er auf eine Art und Weise gehandhabt würde, wird in böswilliger Absicht an das Programm übergeben, um es auf eine andere, unsichere Art und Weise zu verarbeiten.

Was ist zu tun?

Stellen Sie sicher, dass Sie über die neueste Version von Chrome oder Chromium verfügen.

Sie möchten Chrome 114.0.5735.106 oder später auf Mac und Linux, und 114.0.5735.110 oder später unter Windows.

Auch Microsoft Edge, das auf Chromium basiert, ist von diesem Fehler betroffen.

Microsoft hat bisher [2023-06-06T16:25:00Z] darauf hingewiesen, dass

Microsoft ist sich der aktuellen Exploits im Umlauf bewusst. Wir arbeiten aktiv an der Veröffentlichung eines Sicherheitspatches.

Edge hat derzeit die Version 114.0.1823.37, also alles nummeriert später sollte die CVE-2023-3079-Patches von Microsoft enthalten.

So überprüfen Sie Ihre Version und erzwingen ein Update, falls Sie eines noch nicht erhalten haben:

  • Google Chrome. Drei-Punkte-Menü (⋮) > Hilfe > Über Chrome.
  • Microsoft Edge. Einstellungen und mehr (…) > Hilfe und Feedback > Über Microsoft Edge.

Bitte.


spot_img

Neueste Intelligenz

spot_img

Chat mit uns

Hallo! Wie kann ich dir helfen?