You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by eh...@apache.org on 2015/11/23 17:05:45 UTC

svn commit: r1715863 - in /lucene/dev/trunk/solr: ./ core/src/java/org/apache/solr/handler/ core/src/java/org/apache/solr/handler/admin/ core/src/java/org/apache/solr/util/ core/src/test/org/apache/solr/handler/admin/ solrj/src/java/org/apache/solr/cli...

Author: ehatcher
Date: Mon Nov 23 16:05:45 2015
New Revision: 1715863

URL: http://svn.apache.org/viewvc?rev=1715863&view=rev
Log:
Fix XXE vulnerability in MBeansHandler diff feature

Added:
    lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/util/
    lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/util/EmptyEntityResolver.java
      - copied unchanged from r1715087, lucene/dev/trunk/solr/core/src/java/org/apache/solr/util/EmptyEntityResolver.java
Removed:
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/util/EmptyEntityResolver.java
Modified:
    lucene/dev/trunk/solr/CHANGES.txt
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/DocumentAnalysisRequestHandler.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
    lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/impl/XMLResponseParser.java

Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1715863&r1=1715862&r2=1715863&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Mon Nov 23 16:05:45 2015
@@ -401,6 +401,8 @@ Bug Fixes
 * SOLR-5971: Fix error 'Illegal character in query' when proxying request.
   (Uwe Schindler, Ishan Chattopadhyaya, Eric Bus)
 
+* SOLR-8307: Fix XXE vulnerability in MBeansHandler "diff" feature (Erik Hatcher)
+
 Optimizations
 ----------------------
 

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/DocumentAnalysisRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/DocumentAnalysisRequestHandler.java?rev=1715863&r1=1715862&r2=1715863&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/DocumentAnalysisRequestHandler.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/DocumentAnalysisRequestHandler.java Mon Nov 23 16:05:45 2015
@@ -105,7 +105,7 @@ public class DocumentAnalysisRequestHand
       inputFactory.setProperty("reuse-instance", Boolean.FALSE);
     } catch (IllegalArgumentException ex) {
       // Other implementations will likely throw this exception since "reuse-instance"
-      // isimplementation specific.
+      // is implementation specific.
       log.debug("Unable to set the 'reuse-instance' property for the input factory: " + inputFactory);
     }
   }

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java?rev=1715863&r1=1715862&r2=1715863&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java Mon Nov 23 16:05:45 2015
@@ -106,7 +106,7 @@ public class SolrInfoMBeanHandler extend
     try {
       XMLResponseParser parser = new XMLResponseParser();
       return (NamedList<NamedList<NamedList<Object>>>)
-          parser.processResponse(new StringReader(content.substring(idx))).get("solr-mbeans");
+          parser.processResponse(new StringReader(content)).get("solr-mbeans");
     }
     catch(Exception ex) {
       throw new SolrException(ErrorCode.BAD_REQUEST, "Unable to read original XML", ex);

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java?rev=1715863&r1=1715862&r2=1715863&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java Mon Nov 23 16:05:45 2015
@@ -70,4 +70,19 @@ public class MBeansHandlerTest extends S
     NamedList<NamedList<NamedList<Object>>> nl = SolrInfoMBeanHandler.fromXML(xml);
     assertNotNull( nl.get("QUERYHANDLER").get("org.apache.solr.handler.admin.CollectionsHandler"));
   }
+
+  @Test
+  public void testXMLDiffWithExternalEntity() throws Exception {
+    String file = getFile("mailing_lists.pdf").toURI().toASCIIString();
+    String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+        "<!DOCTYPE foo [<!ENTITY bar SYSTEM \""+file+"\">]>\n" +
+        "<response>\n" +
+        "&bar;" +
+        "<lst name=\"responseHeader\"><int name=\"status\">0</int><int name=\"QTime\">31</int></lst><lst name=\"solr-mbeans\"></lst>\n" +
+        "</response>";
+
+    NamedList<NamedList<NamedList<Object>>> nl = SolrInfoMBeanHandler.fromXML(xml);
+
+    assertTrue("external entity ignored properly", true);
+  }
 }

Modified: lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/impl/XMLResponseParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/impl/XMLResponseParser.java?rev=1715863&r1=1715862&r2=1715863&view=diff
==============================================================================
--- lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/impl/XMLResponseParser.java (original)
+++ lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/impl/XMLResponseParser.java Mon Nov 23 16:05:45 2015
@@ -25,6 +25,7 @@ import org.apache.solr.common.util.DateU
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.common.util.XMLErrorLogger;
+import org.apache.solr.util.EmptyEntityResolver;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -56,6 +57,8 @@ public class XMLResponseParser extends R
   static final XMLInputFactory factory;
   static {
     factory = XMLInputFactory.newInstance();
+    EmptyEntityResolver.configureXMLInputFactory(factory);
+
     try {
       // The java 1.6 bundled stax parser (sjsxp) does not currently have a thread-safe
       // XMLInputFactory, as that implementation tries to cache and reuse the