diff --git a/src/iTextSharp.LGPLv2.Core/iTextSharp/text/pdf/XfaForm.cs b/src/iTextSharp.LGPLv2.Core/iTextSharp/text/pdf/XfaForm.cs index 622f093a..b2e6940c 100644 --- a/src/iTextSharp.LGPLv2.Core/iTextSharp/text/pdf/XfaForm.cs +++ b/src/iTextSharp.LGPLv2.Core/iTextSharp/text/pdf/XfaForm.cs @@ -67,7 +67,7 @@ public XfaForm(PdfReader reader) } bout.Seek(offset: 0, SeekOrigin.Begin); - using var xtr = XmlReader.Create(bout); + using var xtr = XmlReader.Create(bout, xml.ParserBase.SecureXmlReaderSettings); _domDocument = new XmlDocument(); _domDocument.PreserveWhitespace = true; _domDocument.Load(xtr); diff --git a/src/iTextSharp.LGPLv2.Core/iTextSharp/text/xml/ParserBase.cs b/src/iTextSharp.LGPLv2.Core/iTextSharp/text/xml/ParserBase.cs index a09bb83b..e81ef255 100644 --- a/src/iTextSharp.LGPLv2.Core/iTextSharp/text/xml/ParserBase.cs +++ b/src/iTextSharp.LGPLv2.Core/iTextSharp/text/xml/ParserBase.cs @@ -8,6 +8,16 @@ namespace iTextSharp.text.xml; /// public abstract class ParserBase { + /// + /// Secure XML reader settings that prevent XXE attacks (CVE-2017-9096) + /// by disabling DTD processing and external entity resolution. + /// + public static readonly XmlReaderSettings SecureXmlReaderSettings = new XmlReaderSettings + { + DtdProcessing = DtdProcessing.Prohibit, + XmlResolver = null + }; + /// /// This method gets called when characters are encountered. /// @@ -34,7 +44,7 @@ public void Parse(XmlDocument xDoc) var xml = xDoc.OuterXml; var stringReader = new StringReader(xml); - var reader = XmlReader.Create(stringReader); + var reader = XmlReader.Create(stringReader, SecureXmlReaderSettings); Parse(reader); } @@ -116,7 +126,7 @@ public void Parse(XmlReader reader) public void Parse(string url) { var stringReader = new StringReader(File.ReadAllText(url)); - var reader = XmlReader.Create(stringReader); + var reader = XmlReader.Create(stringReader, SecureXmlReaderSettings); Parse(reader); } @@ -131,4 +141,4 @@ public abstract void StartElement(string uri, string lname, string name, INullValueDictionary attrs); -} \ No newline at end of file +} diff --git a/src/iTextSharp.LGPLv2.Core/iTextSharp/text/xml/xmp/XmpReader.cs b/src/iTextSharp.LGPLv2.Core/iTextSharp/text/xml/xmp/XmpReader.cs index 3bff8669..62562863 100644 --- a/src/iTextSharp.LGPLv2.Core/iTextSharp/text/xml/xmp/XmpReader.cs +++ b/src/iTextSharp.LGPLv2.Core/iTextSharp/text/xml/xmp/XmpReader.cs @@ -28,7 +28,7 @@ public XmpReader(byte[] bytes) using var bout = new MemoryStream(); bout.Write(bytes, 0, bytes.Length); bout.Seek(0, SeekOrigin.Begin); - using var xtr = XmlReader.Create(bout); + using var xtr = XmlReader.Create(bout, ParserBase.SecureXmlReaderSettings); _domDocument = new XmlDocument(); _domDocument.PreserveWhitespace = true; _domDocument.Load(xtr);