disable DTD loading
git-svn-id: https://svn.apache.org/repos/asf/jackrabbit/commons/filevault/trunk@1844061 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/meta/xml/XmlEntries.java b/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/meta/xml/XmlEntries.java
index 62efe93..ba1721d 100644
--- a/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/meta/xml/XmlEntries.java
+++ b/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/meta/xml/XmlEntries.java
@@ -82,6 +82,8 @@
try {
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
+ // disable DTD loading (bug #36897)
+ factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(source);
Element doc = document.getDocumentElement();
diff --git a/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/TextXMLEntries.java b/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/TextXMLEntries.java
index 08ecb33..6a55c8a 100644
--- a/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/TextXMLEntries.java
+++ b/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/TextXMLEntries.java
@@ -16,10 +16,14 @@
*/
package org.apache.jackrabbit.vault.vlt.meta;
+import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
import org.apache.jackrabbit.vault.vlt.VltException;
+import org.apache.jackrabbit.vault.vlt.meta.xml.XmlEntries;
import org.apache.jackrabbit.vault.vlt.meta.xml.zip.ZipMetaDir;
/**
@@ -52,4 +56,27 @@
}
+ public void testXSS() throws VltException {
+ String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<!DOCTYPE entries [\n" +
+ " <!ENTITY % foo \"bar\">\n" +
+ "]>\n" +
+ "<entries path=\"/home/users/m/mCY2rm1YSMlKFlJ-NEN3\">\n" +
+ " <entry name=\".content.xml\" rp=\"\" ap=\"/home/users/m/mCY2rm1YSMlKFlJ-NEN3\">\n" +
+ " <base date=\"2018-10-02T11:44:02.000+02:00\" md5=\"268b8e1f6d7b3fc9ec71226ee1a9dc70\" contentType=\"text/xml\" size=\"946\"/>\n" +
+ " <work date=\"2018-10-02T11:44:02.000+02:00\" md5=\"268b8e1f6d7b3fc9ec71226ee1a9dc70\" contentType=\"text/xml\" size=\"946\"/>\n" +
+ " </entry>\n" +
+ " <entry name=\"_rep_policy.xml\" rp=\"\" ap=\"/home/users/m/mCY2rm1YSMlKFlJ-NEN3/rep:policy\">\n" +
+ " <base date=\"2018-10-02T11:44:02.000+02:00\" md5=\"5a788decc1968551e2838bc46914f75a\" contentType=\"text/xml\" size=\"500\"/>\n" +
+ " <work date=\"2018-10-02T11:44:02.000+02:00\" md5=\"5a788decc1968551e2838bc46914f75a\" contentType=\"text/xml\" size=\"500\"/>\n" +
+ " </entry>\n" +
+ "</entries>";
+ try {
+ XmlEntries entries = XmlEntries.load(new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8)));
+ assertTrue(entries.hasEntry(".content.xml"));
+ fail("XML entries with DTD should fail.");
+ } catch (VltException e) {
+ // ok
+ }
+ }
}
\ No newline at end of file