CVE-2026-62988
Froxlor: Credential and 2FA secret disclosure via Froxlor API endpoints
Froxlor is open source server administration software. From 2.3.7 until 2.3.8, the Customers.get, Customers.listing, Admins.get, Admins.listing, Ftps.get, and Ftps.listing API commands in lib/Froxlor/Api/Commands/Customers.php, lib/Froxlor/Api/Commands/Admins.php, and lib/Froxlor/Api/Commands/Ftps.php retrieve full database rows and return them without removing password and data_2fa fields. An authenticated API caller with permission to use these endpoints can obtain customer, administrator, and FTP password hashes as well as Base32-encoded TOTP seeds for administrator and customer accounts. Password hashes can be cracked offline, and TOTP seeds can generate valid second-factor codes until two-factor authentication is reset. Exposure of both values for an account can enable takeover of the hosting panel or hosted resources and can defeat both authentication factors. This issue is fixed in version 2.3.8.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- High
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- Low
Exploit likelihood
What each source reports
CVE List Score used
9.0
Froxlor: Credential and 2FA secret disclosure via Froxlor API endpoints
Froxlor is open source server administration software. From 2.3.7 until 2.3.8, the Customers.get, Customers.listing, Admins.get, Admins.listing, Ftps.get, and Ftps.listing API commands in lib/Froxlor/Api/Commands/Customers.php, lib/Froxlor/Api/Commands/Admins.php, and lib/Froxlor/Api/Commands/Ftps.php retrieve full database rows and return them without removing password and data_2fa fields. An authenticated API caller with permission to use these endpoints can obtain customer, administrator, and FTP password hashes as well as Base32-encoded TOTP seeds for administrator and customer accounts. Password hashes can be cracked offline, and TOTP seeds can generate valid second-factor codes until two-factor authentication is reset. Exposure of both values for an account can enable takeover of the hosting panel or hosted resources and can defeat both authentication factors. This issue is fixed in version 2.3.8.
- Record
CVE-2026-62988- CVSS 3.1
- 9.0 Critical
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:L - Weakness
- CWE-200
- Updated
- 2026-11-02
EUVDEUVD-2026-61216
9.0
Froxlor is open source server administration software. From 2.3.7 until 2.3.8, the Customers.get, Customers.listing, Admins.get, Admins.listing, Ftps.get, and Ftps.listing API commands in lib/Froxlor/Api/Commands/Customers.php, lib/Froxlor/Api/Commands/Admins.php, and lib/Froxlor/Api/Commands/Ftps.php retrieve full database rows and return them without removing password and data_2fa fields. An authenticated API caller with permission to use these endpoints can obtain customer, administrator, and FTP password hashes as well as Base32-encoded TOTP seeds for administrator and customer accounts. Password hashes can be cracked offline, and TOTP seeds can generate valid second-factor codes until two-factor authentication is reset. Exposure of both values for an account can enable takeover of the hosting panel or hosted resources and can defeat both authentication factors. This issue is fixed in version 2.3.8.
- Record
EUVD-2026-61216- CVSS 3.1
- 9.0 Critical
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:L - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-7788-ghfq-c6mh
9.0
Froxlor: Credential and 2FA secret disclosure via Froxlor API endpoints
Summary
Several Froxlor API command classes return sensitive authentication material in JSON API responses. The affected endpoints retrieve full database rows using SELECT *, SELECT alias.*, or equivalent full-row queries, then return the results directly through $this->response(...) without removing credential-related fields.
The exposed fields include password hashes for customers, administrators, and FTP users, as well as TOTP 2FA seed material for administrator and customer accounts.
This exposes credential-equivalent data to API clients that should not receive it. Password hashes can be cracked offline and reused for account takeover, while exposed TOTP seeds allow generation of valid 2FA codes for affected accounts. When both a password hash and TOTP seed are exposed for the same account, the vulnerability can defeat both authentication factors if the password hash is cracked or the password is otherwise obtained.
Details
The affected API classes retrieve entire database rows and return them without filtering sensitive fields:
lib/Froxlor/Api/Commands/Customers.php
Customers.get() and Customers.listing() select and return customer rows containing sensitive fields, including:
passwordtype_2fadata_2fa
When type_2fa = 2, the data_2fa value represents the Base32-encoded TOTP seed used by the customer's authenticator application.
The result is returned through $this->response($result) or $this->response(['list' => $result]) without removing these fields.
lib/Froxlor/Api/Commands/Admins.php
Admins.get() and Admins.listing() return administrator rows containing sensitive fields, including:
passwordtype_2fadata_2fa
When type_2fa = 2, the data_2fa value represents the Base32-encoded TOTP seed used by the administrator's authenticator application.
These fields are not stripped before returning the API response.
lib/Froxlor/Api/Commands/Ftps.php
Ftps.get() and Ftps.listing() return FTP user rows containing:
password
The password field is not stripped before returning the API response.
This behavior appears inconsistent with Froxlor's existing safe response patterns. For example, other API command classes explicitly remove password-related fields before returning responses. This indicates that credential material and sensitive internal fields are already treated as non-response data in other parts of the product.
Proof of Concept
Preconditions
- Froxlor API is enabled.
- A valid API key and secret exist for an account allowed to call the affected API endpoints.
- At least one customer or administrator account exists with TOTP 2FA enabled.
- For
Admins.*, the API account must have the required permission to call the affected administrator endpoint.
Set variables:
export FROXLOR_BASE='https://froxlor.example.com'
export API_KEY='<api_key>'
export API_SECRET='<api_secret>'
PoC 1: Customer password hash and TOTP seed exposure
curl -k -sS -u "$API_KEY:$API_SECRET" \
-H 'Content-Type: application/json' \
-X POST \
-d '{"command":"Customers.listing","params":{}}' \
"$FROXLOR_BASE/api.php" | jq '.data.list[] | {customerid, loginname, password, type_2fa, data_2fa, email}'
Example vulnerable response:
{
"customerid": 1,
"loginname": "customer1",
"password": "$2y$12$REDACTED_HASH_VALUE...",
"type_2fa": 2,
"data_2fa": "REDACTED_BASE32_TOTP_SEED",
"email": "[email protected]"
}
The same issue can be verified with Customers.get:
curl -k -sS -u "$API_KEY:$API_SECRET" \
-H 'Content-Type: application/json' \
-X POST \
-d '{"command":"Customers.get","params":{"id":1}}' \
"$FROXLOR_BASE/api.php"
PoC 2: Administrator password hash and TOTP seed exposure
curl -k -sS -u "$API_KEY:$API_SECRET" \
-H 'Content-Type: application/json' \
-X POST \
-d '{"command":"Admins.listing","params":{}}' \
"$FROXLOR_BASE/api.php" | jq…
- Record
GHSA-7788-ghfq-c6mh- CVSS 3.1
- 9.0 Critical
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:L - Weakness
- CWE-200
- Updated
- 2026-11-02
NVD
9.0
Froxlor is open source server administration software. From 2.3.7 until 2.3.8, the Customers.get, Customers.listing, Admins.get, Admins.listing, Ftps.get, and Ftps.listing API commands in lib/Froxlor/Api/Commands/Customers.php, lib/Froxlor/Api/Commands/Admins.php, and lib/Froxlor/Api/Commands/Ftps.php retrieve full database rows and return them without removing password and data_2fa fields. An authenticated API caller with permission to use these endpoints can obtain customer, administrator, and FTP password hashes as well as Base32-encoded TOTP seeds for administrator and customer accounts. Password hashes can be cracked offline, and TOTP seeds can generate valid second-factor codes until two-factor authentication is reset. Exposure of both values for an account can enable takeover of the hosting panel or hosted resources and can defeat both authentication factors. This issue is fixed in version 2.3.8.
- Record
CVE-2026-62988- CVSS 3.1
- 9.0 Critical
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:L - Weakness
- CWE-200
- Updated
- 2026-11-02
OSV
9.0
Froxlor: Credential and 2FA secret disclosure via Froxlor API endpoints
Froxlor is open source server administration software. From 2.3.7 until 2.3.8, the Customers.get, Customers.listing, Admins.get, Admins.listing, Ftps.get, and Ftps.listing API commands in lib/Froxlor/Api/Commands/Customers.php, lib/Froxlor/Api/Commands/Admins.php, and lib/Froxlor/Api/Commands/Ftps.php retrieve full database rows and return them without removing password and data_2fa fields. An authenticated API caller with permission to use these endpoints can obtain customer, administrator, and FTP password hashes as well as Base32-encoded TOTP seeds for administrator and customer accounts. Password hashes can be cracked offline, and TOTP seeds can generate valid second-factor codes until two-factor authentication is reset. Exposure of both values for an account can enable takeover of the hosting panel or hosted resources and can defeat both authentication factors. This issue is fixed in version 2.3.8.
- Record
CVE-2026-62988- CVSS 3.1
- 9.0 Critical
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:L - Weakness
- CWE-200
- Updated
- 2026-11-02
OSVGHSA-7788-ghfq-c6mh
9.0
Froxlor: Credential and 2FA secret disclosure via Froxlor API endpoints
Summary
Several Froxlor API command classes return sensitive authentication material in JSON API responses. The affected endpoints retrieve full database rows using SELECT *, SELECT alias.*, or equivalent full-row queries, then return the results directly through $this->response(...) without removing credential-related fields.
The exposed fields include password hashes for customers, administrators, and FTP users, as well as TOTP 2FA seed material for administrator and customer accounts.
This exposes credential-equivalent data to API clients that should not receive it. Password hashes can be cracked offline and reused for account takeover, while exposed TOTP seeds allow generation of valid 2FA codes for affected accounts. When both a password hash and TOTP seed are exposed for the same account, the vulnerability can defeat both authentication factors if the password hash is cracked or the password is otherwise obtained.
Details
The affected API classes retrieve entire database rows and return them without filtering sensitive fields:
lib/Froxlor/Api/Commands/Customers.php
Customers.get() and Customers.listing() select and return customer rows containing sensitive fields, including:
passwordtype_2fadata_2fa
When type_2fa = 2, the data_2fa value represents the Base32-encoded TOTP seed used by the customer's authenticator application.
The result is returned through $this->response($result) or $this->response(['list' => $result]) without removing these fields.
lib/Froxlor/Api/Commands/Admins.php
Admins.get() and Admins.listing() return administrator rows containing sensitive fields, including:
passwordtype_2fadata_2fa
When type_2fa = 2, the data_2fa value represents the Base32-encoded TOTP seed used by the administrator's authenticator application.
These fields are not stripped before returning the API response.
lib/Froxlor/Api/Commands/Ftps.php
Ftps.get() and Ftps.listing() return FTP user rows containing:
password
The password field is not stripped before returning the API response.
This behavior appears inconsistent with Froxlor's existing safe response patterns. For example, other API command classes explicitly remove password-related fields before returning responses. This indicates that credential material and sensitive internal fields are already treated as non-response data in other parts of the product.
Proof of Concept
Preconditions
- Froxlor API is enabled.
- A valid API key and secret exist for an account allowed to call the affected API endpoints.
- At least one customer or administrator account exists with TOTP 2FA enabled.
- For
Admins.*, the API account must have the required permission to call the affected administrator endpoint.
Set variables:
export FROXLOR_BASE='https://froxlor.example.com'
export API_KEY='<api_key>'
export API_SECRET='<api_secret>'
PoC 1: Customer password hash and TOTP seed exposure
curl -k -sS -u "$API_KEY:$API_SECRET" \
-H 'Content-Type: application/json' \
-X POST \
-d '{"command":"Customers.listing","params":{}}' \
"$FROXLOR_BASE/api.php" | jq '.data.list[] | {customerid, loginname, password, type_2fa, data_2fa, email}'
Example vulnerable response:
{
"customerid": 1,
"loginname": "customer1",
"password": "$2y$12$REDACTED_HASH_VALUE...",
"type_2fa": 2,
"data_2fa": "REDACTED_BASE32_TOTP_SEED",
"email": "[email protected]"
}
The same issue can be verified with Customers.get:
curl -k -sS -u "$API_KEY:$API_SECRET" \
-H 'Content-Type: application/json' \
-X POST \
-d '{"command":"Customers.get","params":{"id":1}}' \
"$FROXLOR_BASE/api.php"
PoC 2: Administrator password hash and TOTP seed exposure
curl -k -sS -u "$API_KEY:$API_SECRET" \
-H 'Content-Type: application/json' \
-X POST \
-d '{"command":"Admins.listing","params":{}}' \
"$FROXLOR_BASE/api.php" | jq…
- Record
GHSA-7788-ghfq-c6mh- CVSS 3.1
- 9.0 Critical
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:L - Weakness
- CWE-200
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
froxlor/froxlorPackagist |
before 2.3.8 | 2.3.8 |
froxlor/froxlorPackagist |
before 2.3.8, plus listed versions 0.10.00.10.0-rc10.10.0-rc20.10.10.10.10 Show 45 moreShow less0.10.110.10.120.10.130.10.140.10.150.10.160.10.170.10.180.10.190.10.20.10.200.10.210.10.220.10.230.10.23.10.10.240.10.250.10.260.10.270.10.280.10.290.10.29.10.10.30.10.300.10.310.10.320.10.330.10.340.10.34.10.10.350.10.35.10.10.360.10.370.10.380.10.38.10.10.38.20.10.38.30.10.40.10.50.10.60.10.70.10.80.10.92.0.02.0.1 |
2.3.8 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-62988 is a critical vulnerability (CVSS 9.0) in Froxlor, published August 18, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.63%, the 50th percentile. Fixed in froxlor/froxlor 2.3.8.
References
github.com/froxlor/froxlor/security/advisories/GHSA-7788-ghfq-c6mh
github.com/froxlor/froxlor/commit/52a43fb826bb9a058faf9c39feeef7ac4444ceba
github.com/froxlor/froxlor/commit/8667fa3a4d77d6e322b7b8f7b9edbc1613ab5797
github.com/froxlor/froxlor/releases/tag/2.3.8
github.com/advisories/GHSA-7788-ghfq-c6mh
github.com/CVEProject/cvelistV5/tree/main/cves/2026/62xxx/CVE-2026-62988.json
nvd.nist.gov/vuln/detail/CVE-2026-62988
github.com/froxlor/froxlor
Left out here: 59 versions and the rest of 2 source descriptions. The JSON record has them.