CVE-2020-10683 Overview
CVE-2020-10683 is an XML External Entity (XXE) vulnerability affecting dom4j, a widely-used open source Java library for processing XML documents. The library versions before 2.0.3 and 2.1.x before 2.1.3 allow external DTDs and External Entities by default, enabling attackers to conduct XXE attacks against applications that parse untrusted XML input. While OWASP provides documentation showing how to enable secure, non-default behavior, the insecure default configuration poses significant risk to applications that haven't implemented these mitigations.
Critical Impact
This vulnerability enables attackers to read arbitrary files from the server, perform Server-Side Request Forgery (SSRF), conduct denial of service attacks, and potentially achieve remote code execution depending on the application context and parser configuration.
Affected Products
- dom4j_project dom4j (versions before 2.0.3 and 2.1.x before 2.1.3)
- oracle agile_plm (versions 9.3.3, 9.3.5)
- oracle application_testing_suite (version 13.3.0.1)
- oracle banking_platform
- oracle business_process_management_suite (versions 12.2.1.3.0, 12.2.1.4.0)
- oracle communications_application_session_controller
- oracle fusion_middleware (version 12.2.1.4.0)
- oracle primavera_p6_enterprise_project_portfolio_management
- netapp oncommand_api_services
- netapp snapcenter
- netapp snapmanager
- canonical ubuntu_linux (16.04 ESM)
- opensuse leap (15.1)
Discovery Timeline
- 2020-05-01 - CVE CVE-2020-10683 published to NVD
- 2024-11-21 - Last updated in NVD database
Technical Details for CVE-2020-10683
Vulnerability Analysis
The vulnerability exists in dom4j's default XML parser configuration, which does not disable external DTD and external entity processing. When an application uses dom4j to parse XML from untrusted sources without explicitly configuring secure parser settings, attackers can craft malicious XML documents containing external entity declarations. These declarations can reference external resources, including local files on the server or internal network endpoints.
The insecure default configuration affects the SAXReader class, which is commonly used for reading XML documents. By default, the underlying XMLReader does not have security features enabled to prevent XXE attacks. This design choice, while providing flexibility for legitimate use cases requiring external entities, creates a security gap for applications that don't explicitly implement defensive configurations.
Root Cause
The root cause is CWE-611: Improper Restriction of XML External Entity Reference. The dom4j library's SAXHelper class creates XMLReader instances using system defaults without enabling security features that restrict external entity processing. The SAXReader relies on this helper class, inheriting the insecure defaults. Applications must explicitly configure the SAXParserFactory with appropriate security features to prevent XXE attacks, but this is not the default behavior.
Attack Vector
An attacker can exploit this vulnerability by submitting specially crafted XML content to any application endpoint that uses vulnerable dom4j versions to parse XML. The attack is network-based and requires no authentication or user interaction. The malicious XML payload contains DOCTYPE declarations with external entity references that point to sensitive local files (e.g., /etc/passwd, configuration files) or internal network services.
When the vulnerable parser processes this XML, it resolves the external entities, potentially exposing file contents in error messages or application responses, or triggering outbound connections to attacker-controlled servers. In some configurations, XXE can lead to denial of service through entity expansion attacks (billion laughs) or remote code execution if the application processes the parsed data in unsafe ways.
// Security patch from src/main/java/org/dom4j/io/SAXHelper.java
// The fix adds SAXParserFactory import to enable secure XML parsing
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
+import javax.xml.parsers.SAXParserFactory;
+
/**
* <p>
* <code>SAXHelper</code> contains some helper methods for working with SAX
* and XMLReader objects.
* </p>
- *
+ *
* @author <a href="mailto:james.strachan@metastuff.com">James Strachan </a>
* @version $Revision: 1.18 $
*/
Source: GitHub Commit for dom4j
Detection Methods for CVE-2020-10683
Indicators of Compromise
- Unusual outbound network connections from XML-processing application servers to external or internal hosts
- Error logs containing file paths or sensitive system information that may indicate successful file exfiltration attempts
- Application logs showing XML parsing errors with DOCTYPE or ENTITY declarations from untrusted sources
- Network traffic containing XML payloads with external entity declarations or DTD references
Detection Strategies
- Implement network monitoring to detect anomalous outbound connections from application servers that process XML
- Deploy application-level logging to capture and alert on XML documents containing DOCTYPE or ENTITY declarations
- Use dependency scanning tools to identify applications using vulnerable dom4j versions (before 2.0.3 or 2.1.x before 2.1.3)
- Monitor for patterns consistent with XXE exploitation attempts in web application firewall (WAF) logs
Monitoring Recommendations
- Configure alerts for XML parsing exceptions that include external resource references or file paths
- Implement egress filtering to detect and block unexpected outbound connections from XML processing components
- Enable verbose logging on XML parsing operations to capture potential exploitation attempts
- Regularly audit application dependencies for vulnerable dom4j versions using software composition analysis tools
How to Mitigate CVE-2020-10683
Immediate Actions Required
- Update dom4j to version 2.0.3 or later (for 2.0.x branch) or version 2.1.3 or later (for 2.1.x branch)
- Review all applications using dom4j and identify those parsing XML from untrusted sources
- Apply vendor-specific patches from Oracle, NetApp, and other affected vendors through their respective security advisories
- Implement secure parser configuration as documented in the OWASP XML External Entity Prevention Cheat Sheet
Patch Information
The dom4j project has released patched versions addressing this vulnerability. Version 2.0.3 and version 2.1.3 include security fixes that add proper configuration options for disabling external entities. The GitHub Release Version 2.1.3 contains the security patches. Oracle has addressed this vulnerability across multiple products through their Critical Patch Updates (CPU) from July 2020 through July 2022, as documented in the Oracle July 2020 CPU Security Alerts and subsequent advisories. NetApp has released security advisory NTAP-20200518-0002 for affected products. Ubuntu users should apply USN-4575-1.
Workarounds
- Configure SAXReader to explicitly disable external entities by setting appropriate features on the underlying XMLReader
- Implement input validation to reject XML documents containing DOCTYPE declarations before parsing
- Use application firewalls to filter incoming XML payloads containing external entity declarations
- Isolate XML processing components in network segments with restricted outbound connectivity
// Secure configuration example for dom4j SAXReader
SAXReader reader = new SAXReader();
reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
reader.setFeature("http://xml.org/sax/features/external-general-entities", false);
reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


