
Exploit für CVE-2022-25313 in der Expat XML-Parser-Bibliothek, der die Ausnutzung einer Pufferüberlauf-Schwachstelle in AOSP 10 R33 Umgebungen demonstriert.
Dies ist Expat, eine C-Bibliothek zum Parsen von XML, begonnen von James Clark im Jahr 1997. Expat ist ein stromorientierter XML-Parser. Das bedeutet, dass Sie Handler beim Parser registrieren, bevor Sie mit dem Parsen beginnen. Diese Handler werden aufgerufen, wenn der Parser die zugehörigen Strukturen im geparsten 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 in der Datei
COPYING
kopieren, verbreiten und modifizieren.
Diese Lizenz ist identisch mit der MIT/X Consortium-Lizenz.
Wenn Sie Expat aus einem Check-out des Git-Repositorys erstellen, müssen Sie ein Skript ausführen, das das configure-Skript mit den GNU autoconf- und libtool-Werkzeugen erzeugt. Dazu benötigen Sie autoconf 2.58 oder neuer. Führen Sie das Skript wie folgt aus:
./buildconf.sh
Sobald dies erledigt ist, folgen Sie den gleichen Anweisungen wie für die Erstellung aus einer Quellverteilung.
Um Expat aus einer Quellverteilung zu erstellen, führen Sie zuerst das Konfigurations-Shellskript im obersten Verteilungsverzeichnis aus:
./configure
Es gibt viele Optionen, die Sie configure bereitstellen können (die Sie
durch Ausführen von configure mit der Option --help entdecken können). Aber die
interessanteste ist diejenige, die das Installationsverzeichnis festlegt.
Standardmäßig wird das configure-Skript die Dinge so einrichten, dass
libexpat in /usr/local/lib, expat.h in /usr/local/include und
xmlwf in /usr/local/bin installiert werden. Wenn Sie zum Beispiel
lieber in /home/me/mystuff/lib, /home/me/mystuff/include und
/home/me/mystuff/bin installieren möchten, können Sie configure darüber
informieren 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 an der ABI und wird daher nicht für den allgemeinen Gebrauch empfohlen — z.B. als Teil einer Linux-Distribution — sondern eher für Builds mit besonderen Anforderungen.
Nach dem Ausführen des configure-Skripts wird der Befehl make die Dinge
erstellen und make install wird sie an ihrem richtigen Ort installieren.
Werfen Sie einen Blick auf die Makefile, um zusätzliche make-Optionen zu
erfahren. Beachten Sie, dass Sie Schreibberechtigung in den Verzeichnissen benötigen,
in die die Dinge installiert werden.
Wenn Sie daran interessiert sind, Expat so zu erstellen, dass Dokumentinformationen
in UTF-16-Kodierung anstelle des standardmäßigen UTF-8 bereitgestellt werden,
befolgen Sie diese Anweisungen (nachdem Sie make distclean ausgeführt haben).
Beachten Sie, dass wir mit --without-xmlwf konfigurieren, da xmlwf diesen
Kompilierungsmodus (noch) nicht unterstützt:
Massenweise Makefile.am-Dateien patchen, 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 (das 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 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.
Wenn Sie Expat in einem Projekt verwenden, das autoconf zur Konfiguration nutzt,
können Sie das Prüfungsmakro in conftools/expat.m4 verwenden, um zu bestimmen,
wie Expat eingebunden wird. Weitere Informationen finden Sie in den Kommentaren
am Anfang dieser Datei.
Ein Referenzhandbuch ist in der Datei doc/reference.html in dieser Verteilung
verfügbar.
Führen Sie make install aus (wiederum ohne xmlwf).