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

CVE-2026-62988: Multi-Factor Authentication and Credential Bypass in Froxlor API

Amit Schendel
Amit Schendel
Senior Security Researcher

Aug 19, 2026·6 min read·16 visits

Executive Summary (TL;DR)

Froxlor API endpoints leak raw bcrypt password hashes and raw TOTP seeds to authenticated users, enabling complete multi-factor authentication bypass and administrative takeover.

An insecure data retrieval flaw in the Froxlor server administration panel API allows authenticated remote attackers to retrieve unredacted bcrypt password hashes and Base32-encoded Time-Based One-Time Password (TOTP) seeds. Affected endpoints include several 'get' and 'listing' handlers for customers, administrators, and FTP accounts. Utilizing these leaked parameters, attackers can crack the password hashes offline and concurrently generate valid second-factor authentication codes to completely bypass access controls.

Vulnerability Overview

CVE-2026-62988 is a critical information disclosure and authentication bypass vulnerability affecting Froxlor, an open-source server administration platform. The bug is located in the application's API layer, specifically within the command handlers responsible for managing administrators, customers, and FTP accounts. Affected versions include release 2.3.7 up to, but not including, version 2.3.8.

The attack surface is exposed through the authenticated JSON-RPC and REST API endpoints. Although an attacker must have valid API credentials to call the affected functions, the permissions required do not need to be administrative to access some of the vulnerable customer or FTP paths. This allows horizontal or vertical privilege escalation depending on the user's initial access level.

When queried, the API retrieves complete record definitions from the backend database. This data includes password hashes and multi-factor authentication secrets. Because the API layer originally serialized these records without removing security-critical fields, it returned them in cleartext and raw crypt formats to the calling client.

Root Cause Analysis

The underlying vulnerability is classified as CWE-200 (Exposure of Sensitive Information to an Unauthorized Actor). It stems from insecure over-fetching practices inside the database abstraction layer coupled with a lack of output filtering in the command controllers. The affected files are lib/Froxlor/Api/Commands/Customers.php, lib/Froxlor/Api/Commands/Admins.php, and lib/Froxlor/Api/Commands/Ftps.php.

In the vulnerable implementation, when a client calls the get or listing commands, the backend executes standard database queries using PHP Data Objects (PDO). The return value of these queries is a complete associative array representing the database rows. Crucially, fields containing sensitive secrets—specifically the password column (which stores bcrypt hashes) and the data_2fa column (which contains the Base32-encoded seed for Time-Based One-Time Passwords)—were fetched and retained within this array.

The controller immediately passed this unfiltered associative array into the $this->response() serialization function. This resulted in the direct exposure of both credentials within the API JSON payload. An authenticated user possessing permission to view their own account or other customer accounts could thereby extract the secret keys of targeted profiles.

Code Path & Two-Stage Patch Analysis

The remediation of this vulnerability required two successive patches due to an initial logical flaw and a variable typo.

In the first patch (52a43fb826bb9a058faf9c39feeef7ac4444ceba), the developer attempted to employ a block-list sanitization strategy. The code iterated through the SQL query results and used the PHP unset() function to strip password and data_2fa keys before returning the array to the client.

// In lib/Froxlor/Api/Commands/Admins.php (Commit 1)
while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) {
    unset($row['password']);
    unset($row['data_2fa']);
    $result[] = $row;
}

However, this first patch introduced a critical logical typo inside lib/Froxlor/Api/Commands/Ftps.php:

// In lib/Froxlor/Api/Commands/Ftps.php (Commit 1 - FLOPPED)
$result = Database::pexecute_first($result_stmt, $params, true, true);
if ($result) {
    unset($row['password']); // BUG: $row does not exist in this block; should be $result
    return $this->response($result);
}

Because $row was undefined in the Ftps.php::get() method, the unset() operation silently failed, and the full $result array containing the password field was sent back to the API client.

Furthermore, this global block-list approach broke internal backend processes. When other parts of the panel executed internal API calls (such as calling Admins.get during an update() workflow to check privileges), the sanitized array lacked the passwords and 2FA secrets required for internal validation.

To resolve both the typo and the internal breakage, the second patch (8667fa3a4d77d6e322b7b8f7b9edbc1613ab5797) introduced an internal execution flag checking routine ($this->isInternal()). When internal components invoke API functions, the flag is set to true, and the secrets remain available in the memory array. For external clients, $this->isInternal() evaluates to false, and the fields are stripped correctly.

// In lib/Froxlor/Api/Commands/Admins.php (Commit 2)
if (!$this->isInternal()) {
    unset($result['password']);
    unset($result['data_2fa']);
}

Exploitation Methodology

Exploiting this vulnerability requires network access to the Froxlor API endpoint and valid credentials or an active session token. An attacker sends a crafted API request to retrieve details about an administrator or user account. No user interaction or elaborate chaining is required to execute this step.

{
    "header": {
        "apikey": "attacker_api_key",
        "secret": "attacker_api_secret"
    },
    "body": {
        "command": "Admins.get",
        "params": {
            "id": 1
        }
    }
}

Upon receiving the API response, the attacker parses the JSON string to extract the password and data_2fa fields. The password field contains a standard blowfish/bcrypt password hash. The attacker then conducts offline dictionary or brute-force attacks against the hash using specialized utilities like Hashcat.

hashcat -m 3200 -a 0 froxlor_hash.txt wordlist.txt

Simultaneously, the attacker decodes the data_2fa string, which is the plaintext Base32-encoded TOTP seed. Using a utility such as oathtool, the attacker can instantly generate valid security codes in real-time.

oathtool --totp -b "JBSWY3DPEHPK3PXP"

Combining the cracked password with the synchronously generated TOTP code, the attacker logs in through the primary admin panel interface, completely bypassing multi-factor authentication barriers.

Impact Assessment

The impact of CVE-2026-62988 is severe, warranting a CVSS score of 9.0 (Critical). Because Froxlor is a server administration panel, compromising an administrative account yields full control over the underlying operating system. This allows the attacker to execute shell commands, alter database contents, modify web root files, and manage system services.

By obtaining both the password hash and the active TOTP seed, the attacker invalidates the entire multi-factor authentication model. There is no fallback security layer to prevent the login, as both elements of the 'something you know' and 'something you have' paradigms are exposed concurrently.

Additionally, the leakage of FTP passwords allows attackers to log in directly to file hosting environments via standard FTP clients, circumventing the web application interface entirely. This facilitates easy upload of web shells, ransomware, or arbitrary PHP injection vectors into all hosted websites.

Remediation and Mitigation

The primary and recommended resolution is to upgrade the Froxlor installation to version 2.3.8 or higher. The release package contains both the API sanitization routines and the necessary logical checks to preserve internal backend functionality.

For deployments where immediate upgrading is not feasible, administrators should manually apply the second patch's code changes. It is critical to ensure that both password and data_2fa fields are unset when $this->isInternal() evaluates to false. Ensure that the FTP controller unsets $result['password'] instead of $row['password'] to prevent the typo bypass.

Additionally, after upgrading or applying the patch, administrators should enforce a panel-wide password reset and regenerate all TOTP secrets. Because the database fields were previously exposed, any administrator or customer record queried before the patch was applied should be treated as compromised. Defensive teams should inspect API query logs for anomalous invocations of Admins.get, Admins.listing, Customers.get, and Customers.listing to identify historical exploitation attempts.

Official Patches

froxlorInitial block-list filtering for API commands
froxlorCorrection to internal API execution flag and Ftps typo fix

Fix Analysis (2)

Technical Appendix

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

Affected Systems

Froxlor Server Administration Panel

Affected Versions Detail

Product
Affected Versions
Fixed Version
froxlor
froxlor
>= 2.3.7, < 2.3.82.3.8
AttributeDetail
CWE IDCWE-200
Attack VectorNetwork (AV:N)
CVSS v3.1 Score9.0 (Critical)
Exploit StatusProof of Concept (PoC) documented
CISA KEV StatusNot Listed
ImpactAuthentication Bypass and Account Takeover

MITRE ATT&CK Mapping

T1552Unsecured Credentials
Credential Access
T1005Data from Local System
Collection
CWE-200
Exposure of Sensitive Information to an Unauthorized Actor

The product exposes sensitive information to an actor who is not authorized to have access to that information.

Vulnerability Timeline

Security fixes implemented in commits 52a43fb and 8667fa3
2026-06-09
Release version 2.3.8 published
2026-06-09
CVE-2026-62988 and GHSA-7788-ghfq-c6mh public advisory publication
2026-08-18

References & Sources

  • [1]Official GitHub Advisory
  • [2]NVD Record
  • [3]CVE.org Authority Record
  • [4]Remediation Release Tag

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