VYPR
Critical severity9.8NVD Advisory· Published Oct 27, 2017· Updated May 13, 2026

CVE-2014-3579

CVE-2014-3579

Description

XML external entity (XXE) vulnerability in Apache ActiveMQ Apollo 1.x before 1.7.1 allows remote consumers to have unspecified impact via vectors involving an XPath based selector when dequeuing XML messages.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
org.apache.activemq:apollo-projectMaven
>= 1.0.0, < 1.7.11.7.1

Affected products

8
  • cpe:2.3:a:apache:activemq_apollo:1.0:*:*:*:*:*:*:*+ 7 more
    • cpe:2.3:a:apache:activemq_apollo:1.0:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:activemq_apollo:1.1:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:activemq_apollo:1.2:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:activemq_apollo:1.3:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:activemq_apollo:1.4:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:activemq_apollo:1.5:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:activemq_apollo:1.6:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:activemq_apollo:1.7:*:*:*:*:*:*:*

Patches

1
e5647554e680

https://issues.apache.org/jira/browse/APLO-366 - make xpath parser features configurable

https://github.com/apache/activemq-apolloDejan BosanacAug 26, 2014via ghsa
1 file changed · +41 1
  • apollo-selector/src/main/java/org/apache/activemq/apollo/filter/XalanXPathEvaluator.java+41 1 modified
    @@ -25,11 +25,16 @@
     
     import javax.xml.parsers.DocumentBuilder;
     import javax.xml.parsers.DocumentBuilderFactory;
    +import javax.xml.parsers.ParserConfigurationException;
     import java.io.StringReader;
    +import java.util.ArrayList;
    +import java.util.List;
    +import java.util.Map;
    +import java.util.Properties;
     
     
     public class XalanXPathEvaluator implements XPathExpression.XPathEvaluator {
    -
    +    public static final String DOCUMENT_BUILDER_FACTORY_FEATURE = "org.apache.activemq.apollo.documentBuilderFactory.feature";
         private final String xpath;
     
         public XalanXPathEvaluator(String xpath) {
    @@ -51,7 +56,13 @@ protected boolean evaluate(String text) {
         protected boolean evaluate(InputSource inputSource) {
             try {
                 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    +            factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
    +            factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
    +            factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
    +            setupFeatures(factory);
                 factory.setNamespaceAware(true);
    +            factory.setIgnoringElementContentWhitespace(true);
    +            factory.setIgnoringComments(true);
                 DocumentBuilder dbuilder = factory.newDocumentBuilder();
                 Document doc = dbuilder.parse(inputSource);
     
    @@ -73,4 +84,33 @@ protected boolean evaluate(InputSource inputSource) {
                 return false;
             }
         }
    +
    +    protected void setupFeatures(DocumentBuilderFactory factory) {
    +        Properties properties = System.getProperties();
    +        List<String> features = new ArrayList<String>();
    +        for (Map.Entry<Object, Object> prop : properties.entrySet()) {
    +            String key = (String) prop.getKey();
    +            if (key.startsWith(DOCUMENT_BUILDER_FACTORY_FEATURE)) {
    +                String uri = key.split(DOCUMENT_BUILDER_FACTORY_FEATURE + ":")[1];
    +                Boolean value = Boolean.valueOf((String)prop.getValue());
    +                try {
    +                    factory.setFeature(uri, value);
    +                    features.add("feature " + uri + " value " + value);
    +                } catch (ParserConfigurationException e) {
    +                    throw new RuntimeException("DocumentBuilderFactory doesn't support the feature " + uri + " with value " + value + ", due to " + e);
    +                }
    +            }
    +        }
    +        if (features.size() > 0) {
    +            StringBuffer featureString = new StringBuffer();
    +            // just log the configured feature
    +            for (String feature : features) {
    +                if (featureString.length() != 0) {
    +                    featureString.append(", ");
    +                }
    +                featureString.append(feature);
    +            }
    +        }
    +
    +    }
     }
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

12

News mentions

0

No linked articles in our index yet.