Alon Bar-Lev has uploaded a new change for review.

Change subject: core: fix CVE-2014-3573
......................................................................

core: fix CVE-2014-3573

single place in which DocumentBuilderFactory is constructed to apply
security settings.

Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1139000
Change-Id: Icf27db1ec13b6a16d9b7c77fd9710e8e6f6ec3c9
Signed-off-by: Alon Bar-Lev <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InstallerMessages.java
M backend/manager/modules/restapi/interface/definition/pom.xml
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/rsdl/RsdlManager.java
M 
backend/manager/modules/restapi/interface/definition/src/main/modules/org/ovirt/engine/api/restapi-definition/main/module.xml
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/XmlUtils.java
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/xml/XmlDocument.java
A 
backend/manager/modules/uutils/src/main/java/org/ovirt/engine/core/uutils/xml/SecureDocumentBuilderFactory.java
7 files changed, 36 insertions(+), 6 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/63/32563/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InstallerMessages.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InstallerMessages.java
index f254f06..4dfa01e 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InstallerMessages.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InstallerMessages.java
@@ -1,7 +1,6 @@
 package org.ovirt.engine.core.bll;
 
 import java.io.StringReader;
-import javax.xml.parsers.DocumentBuilderFactory;
 
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.core.common.AuditLogType;
@@ -10,6 +9,7 @@
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
+import org.ovirt.engine.core.uutils.xml.SecureDocumentBuilderFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.xml.sax.InputSource;
@@ -91,7 +91,7 @@
         boolean error = false;
         Document doc = null;
         try {
-            doc = 
DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new 
InputSource(new StringReader(message)));
+            doc = 
SecureDocumentBuilderFactory.newDocumentBuilderFactory().newDocumentBuilder().parse(new
 InputSource(new StringReader(message)));
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
diff --git a/backend/manager/modules/restapi/interface/definition/pom.xml 
b/backend/manager/modules/restapi/interface/definition/pom.xml
index 82497d0..517ea60 100644
--- a/backend/manager/modules/restapi/interface/definition/pom.xml
+++ b/backend/manager/modules/restapi/interface/definition/pom.xml
@@ -40,6 +40,12 @@
 
     <dependency>
       <groupId>org.ovirt.engine.core</groupId>
+      <artifactId>uutils</artifactId>
+      <version>${engine.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.ovirt.engine.core</groupId>
       <artifactId>common</artifactId>
       <version>${engine.version}</version>
     </dependency>
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/rsdl/RsdlManager.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/rsdl/RsdlManager.java
index 806faa6..06715b4 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/rsdl/RsdlManager.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/rsdl/RsdlManager.java
@@ -9,7 +9,6 @@
 import javax.xml.bind.JAXB;
 import javax.xml.bind.JAXBElement;
 import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.xpath.XPath;
 import javax.xml.xpath.XPathConstants;
@@ -20,6 +19,7 @@
 import org.ovirt.engine.api.model.RSDL;
 import org.ovirt.engine.api.utils.ApiRootLinksCreator;
 import org.ovirt.engine.core.common.mode.ApplicationMode;
+import org.ovirt.engine.core.uutils.xml.SecureDocumentBuilderFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
@@ -94,7 +94,7 @@
         // as parameter:
         Document document;
         try {
-            DocumentBuilder parser = 
DocumentBuilderFactory.newInstance().newDocumentBuilder();
+            DocumentBuilder parser = 
SecureDocumentBuilderFactory.newDocumentBuilderFactory().newDocumentBuilder();
             try (InputStream in = RsdlIOManager.loadAsStream(fileName)) {
                 document = parser.parse(in);
             }
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/modules/org/ovirt/engine/api/restapi-definition/main/module.xml
 
b/backend/manager/modules/restapi/interface/definition/src/main/modules/org/ovirt/engine/api/restapi-definition/main/module.xml
index aa8d01f..a69455f 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/modules/org/ovirt/engine/api/restapi-definition/main/module.xml
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/modules/org/ovirt/engine/api/restapi-definition/main/module.xml
@@ -34,6 +34,7 @@
     <module name="org.codehaus.jackson.jackson-mapper-asl"/>
     <module name="org.codehaus.jackson.jackson-xc"/>
     <module name="org.ovirt.engine.core.common"/>
+    <module name="org.ovirt.engine.core.uutils"/>
     <module name="org.slf4j"/>
     <module name="org.yaml.snakeyaml"/>
   </dependencies>
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/XmlUtils.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/XmlUtils.java
index ad12f4c..f872a7f 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/XmlUtils.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/XmlUtils.java
@@ -7,6 +7,7 @@
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.ovirt.engine.core.uutils.xml.SecureDocumentBuilderFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.xml.sax.InputSource;
@@ -23,7 +24,7 @@
      * @throws IOException
      */
     public static Document loadXmlDoc(String xmlString) throws 
ParserConfigurationException, SAXException, IOException {
-        DocumentBuilderFactory docBuilderFactory = 
DocumentBuilderFactory.newInstance();
+        DocumentBuilderFactory docBuilderFactory = 
SecureDocumentBuilderFactory.newDocumentBuilderFactory();
         DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
         InputSource is = new InputSource(new StringReader(xmlString));
         Document doc = docBuilder.parse(is);
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/xml/XmlDocument.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/xml/XmlDocument.java
index e0a09fe..8d61549 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/xml/XmlDocument.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/xml/XmlDocument.java
@@ -9,6 +9,7 @@
 import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
 
+import org.ovirt.engine.core.uutils.xml.SecureDocumentBuilderFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
@@ -30,7 +31,7 @@
 
     private void LoadXml(String ovfstring) throws Exception {
         // load doc
-        DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
+        DocumentBuilderFactory fact = 
SecureDocumentBuilderFactory.newDocumentBuilderFactory();
         fact.setNamespaceAware(true);
         DocumentBuilder builder = fact.newDocumentBuilder();
         doc = builder.parse(new InputSource(new StringReader(ovfstring)));
diff --git 
a/backend/manager/modules/uutils/src/main/java/org/ovirt/engine/core/uutils/xml/SecureDocumentBuilderFactory.java
 
b/backend/manager/modules/uutils/src/main/java/org/ovirt/engine/core/uutils/xml/SecureDocumentBuilderFactory.java
new file mode 100644
index 0000000..d628229
--- /dev/null
+++ 
b/backend/manager/modules/uutils/src/main/java/org/ovirt/engine/core/uutils/xml/SecureDocumentBuilderFactory.java
@@ -0,0 +1,21 @@
+package org.ovirt.engine.core.uutils.xml;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+public class SecureDocumentBuilderFactory {
+
+    public static DocumentBuilderFactory newDocumentBuilderFactory() {
+        DocumentBuilderFactory documentBuilderFactory = 
DocumentBuilderFactory.newInstance();
+        documentBuilderFactory.setExpandEntityReferences(false);
+        try {
+            
documentBuilderFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl";,
 true);
+            
documentBuilderFactory.setFeature("http://xml.org/sax/features/external-general-entities";,
 false);
+            
documentBuilderFactory.setFeature("http://xml.org/sax/features/external-parameter-entities";,
 false);
+        } catch(ParserConfigurationException e) {
+            throw new RuntimeException(e);
+        }
+        return documentBuilderFactory;
+    }
+
+}


-- 
To view, visit http://gerrit.ovirt.org/32563
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Icf27db1ec13b6a16d9b7c77fd9710e8e6f6ec3c9
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Alon Bar-Lev <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to