alopresto commented on a change in pull request #3507: NIFI-6301 - Added a 
SafeXMLConfiguration which disables XML DTDs whic…
URL: https://github.com/apache/nifi/pull/3507#discussion_r289202083
 
 

 ##########
 File path: 
nifi-nar-bundles/nifi-standard-services/nifi-lookup-services-bundle/nifi-lookup-services/src/test/java/org/apache/nifi/lookup/TestXMLFileLookupService.java
 ##########
 @@ -63,4 +63,23 @@ public void testXMLFileLookupService() throws 
InitializationException, LookupFai
         assertEquals(EMPTY_STRING, property4);
     }
 
+    @Test
+    public void testXXEProtection() throws InitializationException {
+
+        // Arrange
+        final TestRunner runner = 
TestRunners.newTestRunner(TestProcessor.class);
+        final XMLFileLookupService service = new XMLFileLookupService();
+        runner.addControllerService("xml-file-lookup-service", service);
+        runner.setProperty(service, XMLFileLookupService.CONFIGURATION_FILE, 
"src/test/resources/test-xxe.xml");
+
+        try {
+            // Act
+            // Service will fail to enable because test-xxe.xml contains a DTD
 
 Review comment:
   When I run the actual NiFi instance, the service _is_ enabled. There is a 
bulletin shown, and a stacktrace in the error log, but the service is enabled. 
   
   <img width="546" alt="Screen Shot 2019-05-30 at 2 57 56 PM" 
src="https://user-images.githubusercontent.com/798465/58670063-b6ad0680-82f2-11e9-81e2-6af11a8c85d5.png";>
   
   ```
   2019-05-30 14:59:20,528 ERROR [Timer-Driven Process Thread-9] 
o.a.n.c.s.StandardControllerServiceNode 
StandardControllerServiceNode{controllerServiceHolder=org.apache.nifi:nifi-lookup-services-nar:1.10.0-SNAPSHOT,
 versionedComponentId=null, comment='', 
processGroup=StandardProcessGroup[identifier=0abd5fbf-016b-1000-00a7-2df537bcba2a],
 active=true} Failed to invoke @OnEnabled method due to 
org.apache.nifi.reporting.InitializationException: 
org.apache.commons.configuration2.ex.ConfigurationException: XML configuration 
file contained an external entity. To prevent XXE vulnerabilities, NiFi has 
external entity processing disabled.: {}
   org.apache.nifi.reporting.InitializationException: 
org.apache.commons.configuration2.ex.ConfigurationException: XML configuration 
file contained an external entity. To prevent XXE vulnerabilities, NiFi has 
external entity processing disabled.
        at 
org.apache.nifi.lookup.configuration2.CommonsConfigurationLookupService.onEnabled(CommonsConfigurationLookupService.java:121)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at 
org.apache.nifi.util.ReflectionUtils.invokeMethodsWithAnnotations(ReflectionUtils.java:142)
        at 
org.apache.nifi.util.ReflectionUtils.invokeMethodsWithAnnotations(ReflectionUtils.java:130)
        at 
org.apache.nifi.util.ReflectionUtils.invokeMethodsWithAnnotations(ReflectionUtils.java:75)
        at 
org.apache.nifi.util.ReflectionUtils.invokeMethodsWithAnnotation(ReflectionUtils.java:52)
        at 
org.apache.nifi.controller.service.StandardControllerServiceNode$2.run(StandardControllerServiceNode.java:435)
        at org.apache.nifi.engine.FlowEngine$2.run(FlowEngine.java:110)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
   Caused by: org.apache.commons.configuration2.ex.ConfigurationException: XML 
configuration file contained an external entity. To prevent XXE 
vulnerabilities, NiFi has external entity processing disabled.
        at 
org.apache.nifi.security.xml.SafeXMLConfiguration.delegateRead(SafeXMLConfiguration.java:139)
        at 
org.apache.nifi.security.xml.SafeXMLConfiguration.read(SafeXMLConfiguration.java:128)
        at 
org.apache.commons.configuration2.io.FileHandler.loadFromStreamDirectly(FileHandler.java:1080)
        at 
org.apache.commons.configuration2.io.FileHandler.loadFromStream(FileHandler.java:1055)
        at 
org.apache.commons.configuration2.io.FileHandler.load(FileHandler.java:990)
        at 
org.apache.commons.configuration2.io.FileHandler.load(FileHandler.java:973)
        at 
org.apache.commons.configuration2.io.FileHandler.load(FileHandler.java:702)
        at 
org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder.initFileHandler(FileBasedConfigurationBuilder.java:312)
        at 
org.apache.commons.configuration2.builder.ReloadingFileBasedConfigurationBuilder.initFileHandler(ReloadingFileBasedConfigurationBuilder.java:185)
        at 
org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder.initResultInstance(FileBasedConfigurationBuilder.java:291)
        at 
org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder.initResultInstance(FileBasedConfigurationBuilder.java:60)
        at 
org.apache.commons.configuration2.builder.BasicConfigurationBuilder.createResult(BasicConfigurationBuilder.java:421)
        at 
org.apache.commons.configuration2.builder.BasicConfigurationBuilder.getConfiguration(BasicConfigurationBuilder.java:285)
        at 
org.apache.nifi.lookup.configuration2.CommonsConfigurationLookupService.onEnabled(CommonsConfigurationLookupService.java:119)
        ... 17 common frames omitted
   Caused by: org.apache.commons.configuration2.ex.ConfigurationException: 
Error parsing 
file:/Users/alopresto/Workspace/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/resources/xxe_from_report.xml
        at 
org.apache.commons.configuration2.XMLConfiguration.load(XMLConfiguration.java:1030)
        at 
org.apache.commons.configuration2.XMLConfiguration.read(XMLConfiguration.java:996)
        at 
org.apache.nifi.security.xml.SafeXMLConfiguration.lambda$read$1(SafeXMLConfiguration.java:129)
        at 
org.apache.nifi.security.xml.SafeXMLConfiguration.delegateRead(SafeXMLConfiguration.java:135)
        ... 30 common frames omitted
   Caused by: org.xml.sax.SAXParseException: DOCTYPE is disallowed when the 
feature "http://apache.org/xml/features/disallow-doctype-decl"; set to true.
        at 
com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)
        at 
com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
        at 
org.apache.commons.configuration2.XMLConfiguration.load(XMLConfiguration.java:1023)
        ... 33 common frames omitted
   2019-05-30 14:59:20,529 ERROR [Timer-Driven Process Thread-9] 
o.a.n.c.s.StandardControllerServiceNode Failed to invoke @OnEnabled method of 
XMLFileLookupService[id=0abec592-016b-1000-192b-309d4b845a7b] due to 
org.apache.nifi.reporting.InitializationException: 
org.apache.commons.configuration2.ex.ConfigurationException: XML configuration 
file contained an external entity. To prevent XXE vulnerabilities, NiFi has 
external entity processing disabled.
   ```

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to