
CVE-2022-25314 Exploit für den Expat XML-Parser (AOSP 10 r33). Demonstriert eine Buffer-Overread-Schwachstelle in der XML-Parsing-Bibliothek, die gezielte Ausnutzung und Sicherheitstests ermöglicht.
Dies ist Expat, eine C-Bibliothek zum Parsen von XML, gestartet von James Clark im Jahr 1997. Expat ist ein stromorientierter XML-Parser. Das bedeutet, dass Sie Handler beim Parser registrieren, bevor Sie das Parsen starten. Diese Handler werden aufgerufen, wenn der Parser die zugehörigen Strukturen im zu parsenden Dokument entdeckt. Ein Start-Tag ist ein Beispiel für die Art von Strukturen, für die Sie Handler registrieren können.
Windows-Benutzer sollten das
expat_win32-Paket verwenden,
das sowohl vorkompilierte Bibliotheken und ausführbare Dateien als auch Quellcode für
Entwickler enthält.
Expat ist freie Software.
Sie dürfen es unter den Bedingungen der Lizenz, die in der mit diesem Paket verteilten Datei
COPYING enthalten ist,
kopieren, verteilen und modifizieren.
Diese Lizenz ist identisch mit der MIT/X Consortium-Lizenz.
Wenn Sie Expat aus einem Checkout des Git-Repositorys erstellen, müssen Sie ein Skript ausführen, das das configure-Skript mit den GNU autoconf- und libtool-Tools generiert. Dazu benötigen Sie autoconf 2.58 oder neuer. Führen Sie das Skript wie folgt aus:
./buildconf.sh
Sobald dies erledigt ist, befolgen Sie die gleichen Anweisungen wie für das Erstellen aus einer Quellverteilung.
Um Expat aus einer Quellverteilung zu erstellen, führen Sie zuerst das Konfigurations-Shell-Skript im obersten Verzeichnis der Distribution aus:
./configure
Es gibt viele Optionen, die Sie configure bereitstellen können (Sie können sie
entdecken, indem Sie configure mit der Option --help ausführen). Die
interessanteste ist die, die das Installationsverzeichnis festlegt.
Standardmäßig richtet das configure-Skript die Installation so ein, dass
libexpat in /usr/local/lib, expat.h in /usr/local/include, und
xmlwf in /usr/local/bin installiert werden. Wenn Sie beispielsweise
in /home/me/mystuff/lib, /home/me/mystuff/include, und
/home/me/mystuff/bin installieren möchten, können Sie configure
dies mitteilen mit:
./configure --prefix=/home/me/mystuff
Eine weitere interessante Option ist die Aktivierung der 64-Bit-Integer-Unterstützung für Zeilen- und Spaltennummern sowie den gesamten Byte-Index:
./configure CPPFLAGS=-DXML_LARGE_SIZE
Eine solche Modifikation wäre jedoch eine brechende Änderung des ABIs und wird daher nicht für den allgemeinen Gebrauch empfohlen — z.B. als Teil einer Linux-Distribution — sondern eher für Builds mit speziellen Anforderungen.
Nachdem Sie das configure-Skript ausgeführt haben, erstellt der Befehl make
die Dinge und make install installiert sie an ihren richtigen Platz.
Werfen Sie einen Blick auf die Makefile, um weitere make-Optionen
kennenzulernen. Beachten Sie, dass Sie Schreibberechtigung in den
Verzeichnissen haben müssen, in die die Dinge installiert werden.
Wenn Sie daran interessiert sind, Expat zu erstellen, um Dokumentinformationen
in UTF-16-Kodierung anstelle des standardmäßigen UTF-8 bereitzustellen,
befolgen Sie diese Anweisungen (nachdem Sie make distclean ausgeführt haben).
Bitte beachten Sie, dass wir mit --without-xmlwf konfigurieren, da xmlwf
diesen Kompilierungsmodus (noch) nicht unterstützt:
Führen Sie einen Massen-Patch der Makefile.am-Dateien durch, um libexpatw.la
als Bibliotheksnamen zu verwenden:
find -name Makefile.am -exec sed -e 's,libexpat\.la,libexpatw.la,' -e 's,libexpat_la,libexpatw_la,' -i {} +
Führen Sie automake aus, um die Makefile.in-Dateien neu zu schreiben:
automake
Für UTF-16-Ausgabe als unsigned short (und Versions-/Fehlerstrings als char)
führen Sie aus:
./configure CPPFLAGS=-DXML_UNICODE --without-xmlwf
Für UTF-16-Ausgabe als wchar_t (inkl. Versions-/Fehlerstrings) führen Sie aus:
./configure CFLAGS="-g -O2 -fshort-wchar" CPPFLAGS=-DXML_UNICODE_WCHAR_T --without-xmlwf
Hinweis: Letzteres erfordert libc, das ebenfalls mit -fshort-wchar kompiliert wurde.
Führen Sie make aus (welches xmlwf ausschließt).
Die Verwendung von DESTDIR wird unterstützt. Es funktioniert wie folgt:
make install DESTDIR=/path/to/image
überschreibt das in-makefile gesetzte DESTDIR, da die Priorität der
Variablensetzung wie folgt ist:
Hinweis: Dies gilt nur für die Expat-Bibliothek selbst. Das Erstellen von UTF-16-Versionen von xmlwf und der Tests wird derzeit nicht unterstützt.
Bei der Verwendung von Expat mit einem Projekt, das autoconf zur Konfiguration
verwendet, können Sie das Abfrage-Makro in conftools/expat.m4 verwenden, um
zu bestimmen, wie Expat eingebunden werden soll. Weitere Informationen finden Sie
in den Kommentaren am Anfang dieser Datei.
Ein Referenzhandbuch ist in der Datei doc/reference.html in dieser Distribution
verfügbar.
Führen Sie make install aus (wiederum ohne xmlwf).