File: CVE-2018-1000825.patch

package info (click to toggle)
freecol 0.11.6%2Bdfsg2-3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 55,724 kB
  • sloc: java: 133,656; xml: 6,902; sh: 453; awk: 21; makefile: 14
file content (142 lines) | stat: -rw-r--r-- 6,999 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
From: Markus Koschany <apo@debian.org>
Date: Mon, 24 Feb 2020 12:33:58 +0100
Subject: CVE-2018-1000825

Bug-Debian: https://bugs.debian.org/917023
Origin: https://github.com/FreeCol/freecol/commit/8963506897e3270a75b062f28486934bcb79b1e3
---
 src/net/sf/freecol/common/io/FreeColXMLReader.java   | 19 +++++++++++++++++--
 src/net/sf/freecol/common/model/FreeColObject.java   |  3 +++
 src/net/sf/freecol/common/networking/Connection.java |  3 +++
 src/net/sf/freecol/common/networking/DOMMessage.java |  3 +++
 src/net/sf/freecol/tools/GenerateDocumentation.java  |  3 +++
 5 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/src/net/sf/freecol/common/io/FreeColXMLReader.java b/src/net/sf/freecol/common/io/FreeColXMLReader.java
index dd78a40..abbaba6 100644
--- a/src/net/sf/freecol/common/io/FreeColXMLReader.java
+++ b/src/net/sf/freecol/common/io/FreeColXMLReader.java
@@ -88,7 +88,7 @@ public class FreeColXMLReader extends StreamReaderDelegate
         super();
 
         try {
-            XMLInputFactory xif = XMLInputFactory.newInstance();
+            XMLInputFactory xif = newXMLInputFactory();
             setParent(xif.createXMLStreamReader(inputStream, "UTF-8"));
         } catch (XMLStreamException e) {
             throw new IOException(e);
@@ -109,7 +109,7 @@ public class FreeColXMLReader extends StreamReaderDelegate
         super();
 
         try {
-            XMLInputFactory xif = XMLInputFactory.newInstance();
+            XMLInputFactory xif = newXMLInputFactory();
             setParent(xif.createXMLStreamReader(reader));
         } catch (XMLStreamException e) {
             throw new IOException(e);
@@ -118,6 +118,21 @@ public class FreeColXMLReader extends StreamReaderDelegate
         this.readScope = ReadScope.NORMAL;
     }
 
+    /**
+     * Create a new XMLInputFactory.
+     *
+     * Respond to CVE 2018-1000825.
+     *
+     * @return A new <code>XMLInputFactory</code>.
+     */
+    private static XMLInputFactory newXMLInputFactory() {
+        XMLInputFactory xif = XMLInputFactory.newInstance();
+        // This disables DTDs entirely for that factory
+        xif.setProperty(XMLInputFactory.SUPPORT_DTD, false); 
+        // disable external entities
+        xif.setProperty("javax.xml.stream.isSupportingExternalEntities", false);
+        return xif;
+    }
 
     /**
      * Should reads from this stream intern their objects into the
diff --git a/src/net/sf/freecol/common/model/FreeColObject.java b/src/net/sf/freecol/common/model/FreeColObject.java
index 01c9887..d8f3754 100644
--- a/src/net/sf/freecol/common/model/FreeColObject.java
+++ b/src/net/sf/freecol/common/model/FreeColObject.java
@@ -49,6 +49,7 @@ import javax.xml.transform.TransformerException;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
+import javax.xml.XMLConstants;
 
 import net.sf.freecol.common.ObjectWithId;
 import net.sf.freecol.common.io.FreeColXMLReader;
@@ -895,6 +896,8 @@ public abstract class FreeColObject
     public void readFromXMLElement(Element element) {
         try {
             TransformerFactory factory = TransformerFactory.newInstance();
+            factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
+            factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
             Transformer xmlTransformer = factory.newTransformer();
             StringWriter stringWriter = new StringWriter();
             xmlTransformer.transform(new DOMSource(element),
diff --git a/src/net/sf/freecol/common/networking/Connection.java b/src/net/sf/freecol/common/networking/Connection.java
index f88d2ed..48954bd 100644
--- a/src/net/sf/freecol/common/networking/Connection.java
+++ b/src/net/sf/freecol/common/networking/Connection.java
@@ -40,6 +40,7 @@ import javax.xml.transform.TransformerException;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
+import javax.xml.XMLConstants;
 
 import net.sf.freecol.common.FreeColException;
 import net.sf.freecol.common.debug.FreeColDebugger;
@@ -101,6 +102,8 @@ public class Connection implements Closeable {
         Transformer myTransformer = null;
         try {
             TransformerFactory factory = TransformerFactory.newInstance();
+            factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
+            factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
             myTransformer = factory.newTransformer();
             myTransformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,
                                             "yes");
diff --git a/src/net/sf/freecol/common/networking/DOMMessage.java b/src/net/sf/freecol/common/networking/DOMMessage.java
index 7181a7d..8fe7295 100644
--- a/src/net/sf/freecol/common/networking/DOMMessage.java
+++ b/src/net/sf/freecol/common/networking/DOMMessage.java
@@ -37,6 +37,7 @@ import javax.xml.transform.TransformerException;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
+import javax.xml.XMLConstants;
 
 import net.sf.freecol.common.io.FreeColXMLWriter;
 import net.sf.freecol.common.debug.FreeColDebugger;
@@ -448,6 +449,8 @@ public class DOMMessage {
     public static String elementToString(Element element) {
         try {
             TransformerFactory factory = TransformerFactory.newInstance();
+            factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
+            factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
             Transformer xt = factory.newTransformer();
             StringWriter sw = new StringWriter();
             xt.transform(new DOMSource(element), new StreamResult(sw));
diff --git a/src/net/sf/freecol/tools/GenerateDocumentation.java b/src/net/sf/freecol/tools/GenerateDocumentation.java
index aac0f55..a52cf5b 100644
--- a/src/net/sf/freecol/tools/GenerateDocumentation.java
+++ b/src/net/sf/freecol/tools/GenerateDocumentation.java
@@ -35,6 +35,7 @@ import javax.xml.transform.Source;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.TransformerFactory;
+import javax.xml.XMLConstants;
 
 import net.sf.freecol.common.i18n.Messages;
 import net.sf.freecol.common.model.StringTemplate;
@@ -192,6 +193,8 @@ public class GenerateDocumentation {
                 Messages.loadMessageBundle(Messages.getLocale(languageCode));
                 try {
                     TransformerFactory factory = TransformerFactory.newInstance();
+                    factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
+                    factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
                     Source xsl = new StreamSource(new File("doc", XSL));
                     Transformer stylesheet;
                     try {