Skip to content

Commit 9e00d8b

Browse files
authored
Merge pull request #233 from michaelcheers/patch-1
fix: prevent XXE vulnerability in XML parser (CVE-2017-9096)
2 parents 867b621 + a66a3d7 commit 9e00d8b

File tree

3 files changed

+15
-5
lines changed

3 files changed

+15
-5
lines changed

src/iTextSharp.LGPLv2.Core/iTextSharp/text/pdf/XfaForm.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public XfaForm(PdfReader reader)
6767
}
6868

6969
bout.Seek(offset: 0, SeekOrigin.Begin);
70-
using var xtr = XmlReader.Create(bout);
70+
using var xtr = XmlReader.Create(bout, xml.ParserBase.SecureXmlReaderSettings);
7171
_domDocument = new XmlDocument();
7272
_domDocument.PreserveWhitespace = true;
7373
_domDocument.Load(xtr);

src/iTextSharp.LGPLv2.Core/iTextSharp/text/xml/ParserBase.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,16 @@ namespace iTextSharp.text.xml;
88
/// </summary>
99
public abstract class ParserBase
1010
{
11+
/// <summary>
12+
/// Secure XML reader settings that prevent XXE attacks (CVE-2017-9096)
13+
/// by disabling DTD processing and external entity resolution.
14+
/// </summary>
15+
public static readonly XmlReaderSettings SecureXmlReaderSettings = new XmlReaderSettings
16+
{
17+
DtdProcessing = DtdProcessing.Prohibit,
18+
XmlResolver = null
19+
};
20+
1121
/// <summary>
1222
/// This method gets called when characters are encountered.
1323
/// </summary>
@@ -34,7 +44,7 @@ public void Parse(XmlDocument xDoc)
3444
var xml = xDoc.OuterXml;
3545
var stringReader = new StringReader(xml);
3646

37-
var reader = XmlReader.Create(stringReader);
47+
var reader = XmlReader.Create(stringReader, SecureXmlReaderSettings);
3848
Parse(reader);
3949
}
4050

@@ -116,7 +126,7 @@ public void Parse(XmlReader reader)
116126
public void Parse(string url)
117127
{
118128
var stringReader = new StringReader(File.ReadAllText(url));
119-
var reader = XmlReader.Create(stringReader);
129+
var reader = XmlReader.Create(stringReader, SecureXmlReaderSettings);
120130
Parse(reader);
121131
}
122132

@@ -131,4 +141,4 @@ public abstract void StartElement(string uri,
131141
string lname,
132142
string name,
133143
INullValueDictionary<string, string> attrs);
134-
}
144+
}

src/iTextSharp.LGPLv2.Core/iTextSharp/text/xml/xmp/XmpReader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public XmpReader(byte[] bytes)
2828
using var bout = new MemoryStream();
2929
bout.Write(bytes, 0, bytes.Length);
3030
bout.Seek(0, SeekOrigin.Begin);
31-
using var xtr = XmlReader.Create(bout);
31+
using var xtr = XmlReader.Create(bout, ParserBase.SecureXmlReaderSettings);
3232
_domDocument = new XmlDocument();
3333
_domDocument.PreserveWhitespace = true;
3434
_domDocument.Load(xtr);

0 commit comments

Comments
 (0)