Skip to content

Commit 672c137

Browse files
authored
Merge pull request #56 from albfernandez/fix_cve_2017_9096
Fix for CVE-2017-9096 iText XML External Entity Vulnerability
2 parents a82b5b6 + aa4ac5f commit 672c137

3 files changed

Lines changed: 26 additions & 4 deletions

File tree

openpdf/src/main/java/com/lowagie/text/pdf/XfaForm.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,9 @@
5353
import java.io.ByteArrayOutputStream;
5454
import java.io.File;
5555
import java.io.FileInputStream;
56-
import java.io.FileOutputStream;
5756
import java.io.IOException;
5857
import java.io.InputStream;
58+
import java.io.StringReader;
5959
import java.util.ArrayList;
6060
import java.util.Collection;
6161
import java.util.EmptyStackException;
@@ -67,9 +67,9 @@
6767
import javax.xml.parsers.ParserConfigurationException;
6868

6969
import org.w3c.dom.Document;
70-
import org.w3c.dom.Element;
7170
import org.w3c.dom.Node;
7271
import org.w3c.dom.NodeList;
72+
import org.xml.sax.EntityResolver;
7373
import org.xml.sax.InputSource;
7474
import org.xml.sax.SAXException;
7575

@@ -148,6 +148,12 @@ else if (xfa instanceof PRStream) {
148148
DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
149149
fact.setNamespaceAware(true);
150150
DocumentBuilder db = fact.newDocumentBuilder();
151+
db.setEntityResolver(new EntityResolver() {
152+
@Override
153+
public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
154+
return new InputSource(new StringReader(""));
155+
}
156+
});
151157
domDocument = db.parse(new ByteArrayInputStream(bout.toByteArray()));
152158
extractNodes();
153159
}
@@ -1119,7 +1125,13 @@ public void fillXfaForm(InputStream is) throws ParserConfigurationException, SAX
11191125

11201126
public void fillXfaForm(InputSource is) throws ParserConfigurationException, SAXException, IOException {
11211127
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
1122-
DocumentBuilder db = dbf.newDocumentBuilder();
1128+
DocumentBuilder db = dbf.newDocumentBuilder();
1129+
db.setEntityResolver(new EntityResolver() {
1130+
@Override
1131+
public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
1132+
return new InputSource(new StringReader(""));
1133+
}
1134+
});
11231135
Document newdoc = db.parse(is);
11241136
fillXfaForm(newdoc.getDocumentElement());
11251137
}

openpdf/src/main/java/com/lowagie/text/xml/xmp/XmpReader.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import java.io.ByteArrayInputStream;
5050
import java.io.ByteArrayOutputStream;
5151
import java.io.IOException;
52+
import java.io.StringReader;
5253

5354
import javax.xml.parsers.DocumentBuilder;
5455
import javax.xml.parsers.DocumentBuilderFactory;
@@ -58,6 +59,8 @@
5859
import org.w3c.dom.NamedNodeMap;
5960
import org.w3c.dom.Node;
6061
import org.w3c.dom.NodeList;
62+
import org.xml.sax.EntityResolver;
63+
import org.xml.sax.InputSource;
6164
import org.xml.sax.SAXException;
6265

6366
import com.lowagie.text.ExceptionConverter;
@@ -85,6 +88,12 @@ public XmpReader(byte[] bytes) throws SAXException, IOException {
8588
DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
8689
fact.setNamespaceAware(true);
8790
DocumentBuilder db = fact.newDocumentBuilder();
91+
db.setEntityResolver(new EntityResolver() {
92+
@Override
93+
public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
94+
return new InputSource(new StringReader(""));
95+
}
96+
});
8897
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
8998
domDocument = db.parse(bais);
9099
} catch (ParserConfigurationException e) {

pdf-toolbox/src/main/java/com/lowagie/tools/BuildTutorial.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import java.io.FileWriter;
5555
import java.io.IOException;
5656

57+
import javax.xml.XMLConstants;
5758
import javax.xml.transform.Result;
5859
import javax.xml.transform.Source;
5960
import javax.xml.transform.Templates;
@@ -171,7 +172,7 @@ public static void convert(File infile, File xslfile, File outfile) {
171172
try {
172173
// Create transformer factory
173174
TransformerFactory factory = TransformerFactory.newInstance();
174-
175+
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
175176
// Use the factory to create a template containing the xsl file
176177
Templates template = factory.newTemplates(new StreamSource(
177178
new FileInputStream(xslfile)));

0 commit comments

Comments
 (0)