From: Olyutorskii Date: Wed, 3 Jul 2019 15:38:09 +0000 (+0900) Subject: Prevent XXE vulnerabilities from external resources. X-Git-Tag: release-2.103.2^2~5^2 X-Git-Url: http://git.osdn.net/view?p=mikutoga%2FVmd2XML.git;a=commitdiff_plain;h=a5f64a9889b2e0dcb446afd8574c7e70fc415e0b Prevent XXE vulnerabilities from external resources. --- diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 5f7f8b1..e35847b 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -5,7 +5,8 @@ Vmd2XML 変更履歴 X.XXX.X () - * JRE version-checking modified. + * Prevent XXE vulnerabilities from external resources. + * Upgrade ToaGem to 3.122.2 2.102.2 (2019-06-06) ・必須環境をJavaSE8に引き上げ。 diff --git a/src/main/java/jp/sfjp/mikutoga/vmd2xml/XmlInputUtil.java b/src/main/java/jp/sfjp/mikutoga/vmd2xml/XmlInputUtil.java index f965d9c..f48ad92 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd2xml/XmlInputUtil.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd2xml/XmlInputUtil.java @@ -14,6 +14,7 @@ import java.io.InputStream; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; +import javax.xml.XMLConstants; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; @@ -25,6 +26,8 @@ import jp.sfjp.mikutoga.xml.NoopEntityResolver; import jp.sfjp.mikutoga.xml.SchemaUtil; import org.xml.sax.InputSource; import org.xml.sax.SAXException; +import org.xml.sax.SAXNotRecognizedException; +import org.xml.sax.SAXNotSupportedException; import org.xml.sax.XMLReader; /** @@ -32,6 +35,16 @@ import org.xml.sax.XMLReader; */ final class XmlInputUtil { + private static final String F_DISALLOW_DOCTYPE_DECL = + "http://apache.org/xml/features/disallow-doctype-decl"; + private static final String F_EXTERNAL_GENERAL_ENTITIES = + "http://xml.org/sax/features/external-general-entities"; + private static final String F_EXTERNAL_PARAMETER_ENTITIES = + "http://xml.org/sax/features/external-parameter-entities"; + private static final String F_LOAD_EXTERNAL_DTD = + "http://apache.org/xml/features/nonvalidating/load-external-dtd"; + + /** * 隠しコンストラクタ。 */ @@ -111,7 +124,20 @@ final class XmlInputUtil { factory.setNamespaceAware(true); factory.setValidating(false); factory.setXIncludeAware(false); -// factory.setFeature(name, value); + + try{ + factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); + factory.setFeature(F_DISALLOW_DOCTYPE_DECL, true); + factory.setFeature(F_EXTERNAL_GENERAL_ENTITIES, false); + factory.setFeature(F_EXTERNAL_PARAMETER_ENTITIES, false); + factory.setFeature(F_LOAD_EXTERNAL_DTD, false); + }catch( ParserConfigurationException + | SAXNotRecognizedException + | SAXNotSupportedException e + ){ + assert false; + throw new AssertionError(e); + } factory.setSchema(schema); @@ -134,7 +160,13 @@ final class XmlInputUtil { throw new AssertionError(e); } -// parser.setProperty(name, value); + try{ + parser.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, ""); + parser.setProperty(XMLConstants.ACCESS_EXTERNAL_SCHEMA, ""); + }catch(SAXNotRecognizedException | SAXNotSupportedException e){ + assert false; + throw new AssertionError(e); + } return parser; }