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·4 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

•22 minutes ago•CVE-2026-55593
6.5

CVE-2026-55593: Persistent Administrative Hijacking via Cross-Site Request Forgery in Froxlor Ajax Router

Froxlor prior to version 2.3.8 contains a high-severity architectural flaw where the standalone lib/ajax.php entry point bypasses the centralized request validation in lib/init.php. Unauthenticated remote attackers can leverage Cross-Site Request Forgery (CSRF) to induce authenticated administrators to submit forged requests that modify API key whitelists and expiration dates, potentially yielding persistent, out-of-band administrative control.

Amit Schendel
Amit Schendel
0 views•8 min read
•about 2 hours ago•CVE-2026-70666
7.4

CVE-2026-70666: Server-Side Request Forgery in Netflix Lemur ACME Authority Management

CVE-2026-70666 is a critical Server-Side Request Forgery (SSRF) vulnerability in Netflix Lemur's ACME certificate management integration. Prior to version 1.9.3, the system allowed authority-role users to bypass initial ACME URL allowlist validations when updating an existing authority. Additionally, the underlying ACME network client blindly parsed and connected to dynamic endpoint URLs supplied in JSON responses from the configured ACME directory, allowing attackers to route arbitrary JWS-signed requests to internal services or cloud metadata endpoints.

Alon Barad
Alon Barad
2 views•5 min read
•about 3 hours ago•CVE-2026-70667
6.3

CVE-2026-70667: Server-Side Request Forgery Bypass in Netflix Lemur Certificate Verification

A security vulnerability in Netflix Lemur, a TLS certificate management framework, allows authenticated operators to bypass Server-Side Request Forgery (SSRF) mitigations. The issue exists within the certificate revocation verification workflow, specifically inside the CRL and OCSP retrieval logic. By exploiting HTTP redirects or DNS rebinding (Time-of-Check Time-of-Use) mechanisms, an attacker can coerce the server into issuing arbitrary network requests to internal services, such as the cloud instance metadata service (IMDS) or loopback addresses. This bypass neutralizes previous network-boundary validation logic and allows blind read/write SSRF targeting internal infrastructure resources.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 4 hours ago•CVE-2026-71303
7.7

CVE-2026-71303: Server-Side Request Forgery Bypass in Netflix Lemur Authority Updates

Netflix Lemur, an open-source TLS certificate management framework, is affected by a Server-Side Request Forgery (SSRF) vulnerability. This vulnerability arises from an incomplete patch for a previous security flaw, CVE-2026-55166. While Lemur version 1.9.2 validated the ACME directory URL against an allowlist during authority creation, it failed to perform the same checks when updating existing authorities. An authenticated user possessing an authority role can exploit this omission to replace the directory URL with internal or cloud metadata endpoints. During subsequent certificate issuance, the Lemur backend executes unauthorized requests, potentially leaking sensitive metadata or credentials.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 5 hours ago•CVE-2026-71307
7.7

CVE-2026-71307: Plaintext Credential Exposure in Netflix Lemur Destinations API

An authorization bypass and information disclosure vulnerability in Netflix Lemur before version 1.9.3 allows authenticated, low-privilege users to retrieve raw destination configurations, exposing plaintext credentials such as SFTP passwords and private key passphrases.

Amit Schendel
Amit Schendel
2 views•6 min read
•about 6 hours ago•CVE-2026-71308
8.1

CVE-2026-71308: Missing Authorization and Lifecycle Hijacking in Netflix Lemur

Netflix Lemur before 1.9.3 contains a missing authorization vulnerability (CWE-862, CWE-639) when handling certificate creation, upload, or modification. Authenticated non-read-only users can manipulate the replaces parameter to silence expiration notifications and hijack certificate rotation tasks for arbitrary targets, leading to unauthorized TLS certificate deployment and traffic interception.

Alon Barad
Alon Barad
8 views•7 min read