CVE-2020-37103 Overview
CVE-2020-37103 is a persistent cross-site scripting (XSS) vulnerability affecting DotNetNuke 9.5, a popular content management system built on the .NET framework. This vulnerability allows authenticated users with normal privileges to upload malicious XML files containing executable scripts through the journal tools feature. By leveraging XHTML namespace scripts within specially crafted XML files, attackers can execute arbitrary JavaScript code in the browsers of other users who view the malicious content.
Critical Impact
Authenticated attackers can achieve persistent JavaScript execution in victim browsers, potentially bypassing CSRF protections and escalating to more damaging attacks including session hijacking and credential theft.
Affected Products
- DotNetNuke 9.5
Discovery Timeline
- 2026-02-03 - CVE-2020-37103 published to NVD
- 2026-02-04 - Last updated in NVD database
Technical Details for CVE-2020-37103
Vulnerability Analysis
This vulnerability stems from insufficient input validation in DotNetNuke's journal tools feature, which fails to properly sanitize XML file uploads. The journal tools component is designed to allow users to share content and files, but it does not adequately filter or neutralize malicious script content embedded within XML files using XHTML namespaces.
When a user uploads an XML file containing scripts within an XHTML namespace declaration, the application stores this content without proper sanitization. Subsequently, when other users view the journal entry containing the malicious file, the embedded JavaScript is rendered and executed in their browser context. This creates a stored (persistent) XSS condition, making it particularly dangerous as the malicious payload persists on the server and affects multiple users over time.
The vulnerability is classified under CWE-79 (Improper Neutralization of Input During Web Page Generation), indicating a fundamental failure to sanitize user-controllable input before rendering it in web pages.
Root Cause
The root cause lies in inadequate input validation and output encoding within the journal tools file upload functionality. Specifically, the application fails to:
- Properly validate XML file content to detect malicious script elements
- Neutralize XHTML namespace declarations that can contain executable JavaScript
- Apply proper output encoding when rendering user-uploaded content
The journal tools feature trusts the content of uploaded XML files without performing sufficient sanitization, allowing the XHTML namespace trick to bypass security controls.
Attack Vector
The attack requires network access and authentication with standard user privileges. The attacker crafts a malicious XML file containing JavaScript embedded within XHTML namespace elements. When uploaded through the journal tools feature, the malicious content is stored on the server. Victims who subsequently view the affected journal entry have the attacker's JavaScript executed in their browser context.
This attack vector is particularly effective because:
- It requires only low-privilege user authentication
- The payload persists on the server, affecting multiple victims
- It can bypass certain CSRF protections by executing in the context of authenticated sessions
- The malicious content appears to come from a trusted source (the DNN platform itself)
For detailed technical information about this vulnerability, see the Medium Article on DNN Security and the Exploit-DB #48124.
Detection Methods for CVE-2020-37103
Indicators of Compromise
- XML files uploaded through journal tools containing XHTML namespace declarations with embedded <script> tags
- Unusual JavaScript execution originating from journal entry pages
- Reports of unexpected browser behavior or pop-ups when viewing journal content
- Log entries showing XML file uploads with suspicious XHTML namespace patterns
Detection Strategies
- Monitor file upload activity in DotNetNuke journal tools for XML files containing XHTML namespace declarations
- Implement web application firewall (WAF) rules to detect and block XSS payloads in uploaded content
- Review server logs for suspicious XML file uploads, particularly those with script-related content
- Deploy browser-based XSS detection tools to identify malicious script execution
Monitoring Recommendations
- Enable detailed logging for all file upload activities within the DotNetNuke journal module
- Configure alerting for XML file uploads containing potential XSS indicators such as <script>, javascript:, or event handlers
- Implement Content Security Policy (CSP) headers to detect and report script execution from unexpected sources
- Regularly audit journal entries for suspicious or malformed XML content
How to Mitigate CVE-2020-37103
Immediate Actions Required
- Restrict file upload permissions to trusted users only until a patch is applied
- Implement strict Content Security Policy (CSP) headers to limit script execution
- Review and audit existing journal entries for potentially malicious XML content
- Consider temporarily disabling the journal tools feature if not business-critical
Patch Information
Organizations should review the DNN Software Official Site for the latest security updates and patches addressing this vulnerability. Additionally, consult the VulnCheck Advisory on DotNetNuke for detailed remediation guidance.
Ensure your DotNetNuke installation is updated to a version that includes fixes for this stored XSS vulnerability in the journal tools feature.
Workarounds
- Disable or restrict access to the journal tools file upload feature until patching is possible
- Implement input validation at the web server level to strip XHTML namespace declarations from uploaded XML files
- Deploy a Web Application Firewall (WAF) with rules specifically targeting XSS patterns in file uploads
- Apply strict Content Security Policy headers to prevent inline script execution
# Example: Implementing Content Security Policy in IIS web.config
# Add to <system.webServer><httpProtocol><customHeaders> section
# <add name="Content-Security-Policy" value="default-src 'self'; script-src 'self'; object-src 'none';" />
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

