This is an automated email from the ASF dual-hosted git repository. lukaszlenart pushed a commit to branch WW-5233-tiles in repository https://gitbox.apache.org/repos/asf/struts.git
commit 01ccc0bcb32b16c3e44a83b2c8c0be1a9b069e55 Author: Lukasz Lenart <lukaszlen...@apache.org> AuthorDate: Fri Jul 14 08:15:19 2023 +0200 WW-5233 Disables XML external entity parsing --- .../definition/digester/DigesterDefinitionsReader.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/plugins/tiles/src/main/java/org/apache/tiles/core/definition/digester/DigesterDefinitionsReader.java b/plugins/tiles/src/main/java/org/apache/tiles/core/definition/digester/DigesterDefinitionsReader.java index 4d756bbb2..ccbed0a81 100644 --- a/plugins/tiles/src/main/java/org/apache/tiles/core/definition/digester/DigesterDefinitionsReader.java +++ b/plugins/tiles/src/main/java/org/apache/tiles/core/definition/digester/DigesterDefinitionsReader.java @@ -21,6 +21,7 @@ package org.apache.tiles.core.definition.digester; import org.apache.commons.digester.Digester; import org.apache.commons.digester.Rule; +import org.apache.struts2.StrutsException; import org.apache.tiles.api.Attribute; import org.apache.tiles.api.Definition; import org.apache.tiles.api.Expression; @@ -30,8 +31,11 @@ import org.apache.tiles.core.definition.DefinitionsReader; import org.xml.sax.Attributes; import org.xml.sax.ErrorHandler; import org.xml.sax.SAXException; +import org.xml.sax.SAXNotRecognizedException; +import org.xml.sax.SAXNotSupportedException; import org.xml.sax.SAXParseException; +import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; import java.io.InputStream; import java.net.URL; @@ -256,6 +260,17 @@ public class DigesterDefinitionsReader implements DefinitionsReader { digester.setNamespaceAware(true); digester.setUseContextClassLoader(true); digester.setErrorHandler(new ThrowingErrorHandler()); + try { + //OWASP + //https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html + digester.setFeature("http://xml.org/sax/features/external-general-entities", false); + digester.setFeature("http://xml.org/sax/features/external-parameter-entities", false); + // Disable external DTDs as well + digester.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); + digester.setXIncludeAware(false); + } catch (ParserConfigurationException | SAXNotRecognizedException | SAXNotSupportedException e) { + throw new StrutsException("Unable to disable external XML entity parsing", e); + } // Register our local copy of the DTDs that we can find String[] registrations = getRegistrations();