Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as low-priv customer API user
-
DeliveryCall Certificates.get / Certificates.listing
-
ExploitServer returns ssl_key_file PEM verbatim
-
ExecutionHarvest root-only/cross-tenant private keys
-
ImpactImpersonate domain or MITM/decrypt TLS
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V14 - Data Protection Data exposure prevention
MITRE ATT&CK
2 techniques across 2 tactics: Collection, Discovery The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated Froxlor account with API access (PR:L) - the lowest tier, an ordinary customer, is sufficient to retrieve that customer's own domain private keys via Certificates.get or Certificates.listing. Cross-tenant key theft additionally requires a reseller account or an admin account with the customers_see_all flag set. No user interaction, no special protocol, and no non-default configuration are needed beyond the API being enabled and TLS certificates (e.g. Froxlor-managed Let's Encrypt) existing for the targeted domains. Limiting factors: exploitation is gated on holding valid API credentials on the instance, so the practical exposure is highest on multi-tenant shared hosting where untrusted customers/resellers coexist; single-operator installs are largely self-limited. |
| Impact | This is a genuine, credible information-disclosure risk despite the absence of hype signals. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:H) indicates trivially reachable network exploitation requiring only a low-privileged authenticated customer API account and no user interaction - a low bar in a multi-tenant hosting panel where customer accounts are the normal operating unit. There is no EPSS score, no CISA KEV listing, and no public POC provided, so exploitation is 'no public exploit identified at time of analysis' - this is not evidence of active exploitation and should be treated as a latent-but-easy-to-trigger flaw rather than an emergency. The severity floor is real: the sink returns raw PEM TLS private keys, including root-only (0600) Let's Encrypt keys the customer otherwise cannot read, so a legitimate API call crosses a clear privilege/authority boundary. The vendor's 4.0 base VC:H is defensible; I judge the vendor's VI:L generous since the API read itself has no integrity impact (impersonation/MITM are downstream consequences of the stolen key, not base integrity). Net: real priority in any environment where untrusted customers or resellers share a Froxlor instance, moderate elsewhere; not a widespread-internet-scan threat given the authentication requirement and Froxlor's niche footprint. |
| Exploit ScenarioDerived | A low-privileged customer with API credentials on a shared Froxlor host calls Certificates.get or Certificates.listing and receives the raw PEM private keys for their own domains - including server-generated Let's Encrypt keys stored root-only that they could never read from disk. A reseller or an admin flagged customers_see_all can issue the same calls to dump other tenants' private keys, then use them for domain impersonation, passive decryption of captured TLS traffic, or active machine-in-the-middle. No public exploit code is required; the attack is a normal authenticated API request. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 26, 2026
Private TLS keys stored by Froxlor before 2.3.13 are disclosed verbatim through the Certificates.get and Certificates.listing API commands, letting any authenticated API caller - including the lowest-privilege customer account - read the raw PEM private keys of their own domains, such as server-generated Let's Encrypt keys normally stored root-only (0600) and inaccessible to that customer, while a reseller account or an admin with the customers_see_all flag can pull other principals' keys through the same sink. Disclosed keys enable domain impersonation, passive decryption of captured TLS traffic, and active machine-in-the-middle attacks. The independently assessed vector (CVSS 3.1: AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N) reflects high confidentiality impact with cross-tenant scope but no direct integrity or availability loss, and no public exploit identified at time of analysis.
RemediationAI
Vendor-released patch: Froxlor 2.3.13 - upgrade immediately per the vendor advisory at https://github.com/froxlor/froxlor/security/advisories/GHSA-6q2v-jjq5-m2c8 and the VulnCheck advisory at https://www.vulncheck.com/advisories/froxlor-before-2.3.13-private-key-disclosure-via-certificates-api. Because any authenticated API caller could already have exfiltrated key material, upgrading alone is not sufficient: treat every private key exposed through the affected API as compromised and reissue or replace the certificates, including Froxlor's Let's Encrypt-managed certificates, after the upgrade, then revoke the old certificates where the CA supports revocation. Interim compensating controls, with their trade-offs, include disabling or firewalling off the Froxlor API endpoint for untrusted customers, which breaks automated certificate and DNS provisioning for those accounts; auditing and reducing API entitlements by removing reseller status and the customers_see_all flag from accounts that do not strictly need them, which shrinks the cross-tenant blast radius but limits legitimate multi-tenant administration; and logging API calls to detect anomalous Certificates.get and Certificates.listing traffic, though logging cannot prevent an already-authorized disclosure.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The root cause is CWE-200 (Exposure of Sensitive Information to an Unauthorized Actor) manifesting as a missing output allowlist in Froxlor's API layer: the Certificates.get and Certificates.listing commands read Froxlor's domain_ssl_settings table and pass the entire result set to ApiCommand::response(), which serializes rows to JSON without stripping sensitive columns. The ssl_key_file column in that table holds the raw PEM TLS private key, and for Let's Encrypt certificates Froxlor's ACME integration generates the key material server-side and stores it root-only with 0600 permissions, so the API returns key material the caller could never read through the filesystem. The design also lacks per-field authorization - the query scoping decides which domains a caller may see, but the serializer does not decide which columns are safe to emit - so a low-privileged customer can read their own keys and a reseller or an admin with customers_see_all can read other principals' keys. CPE data (cpe:2.3:a:froxlor:froxlor:*:*:*:*:*:*:*:*) and ENISA EUVD-2026-87681 both place the affected range under Froxlor before 2.3.13; the exposure sits on the ACME/Let's Encrypt issuance flow Froxlor automates, meaning the most valuable server-generated keys are exactly the ones leaked.
Know when Froxlor gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N
Low-priv authenticated API caller (PR:L) over network with no interaction; scope changed (S:C) because root-only keys cross the authorization boundary; pure disclosure so C:H, I:N, A:N.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
Froxlor before 2.3.13 returns the ssl_key_file column - which stores the raw PEM TLS private-key content - verbatim in the JSON responses of the Certificates.get and Certificates.listing API commands, because the results of the underlying domain_ssl_settings queries are passed through ApiCommand::response() without any field stripping or allowlist. A low-privileged authenticated customer API caller can retrieve the private keys of their own domains' certificates, including Let's Encrypt keys that Froxlor generates server-side and stores root-only (0600) and to which the customer otherwise has no filesystem access; reseller and customers_see_all admin accounts can dump the private keys of other principals through the same sink. Disclosed keys enable domain impersonation, passive decryption of captured TLS traffic, and active machine-in-the-middle attacks.
Technical POC Analysis
CWE-200 (Exposure of Sensitive Information to an Unauthorized Actor); the advisory also tags CWE-522.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Froxlor, the hosting control panel used to manage customer domains, websites, and TLS certificates, has a high-severity flaw that allows any logged-in user - including the least-privileged customer account - to retrieve the raw private TLS keys for their domains, and for resellers and admins with the customers_see_all flag, other tenants' keys as well. Because these keys normally sit root-only on the server, a customer gaining access to them breaks the hosting provider's core trust boundary: whoever holds a domain's private key can impersonate that domain, silently intercept encrypted traffic, and mount machine-in-the-middle attacks against customers and their end users. Leadership should treat this as a customer-trust and contractual exposure affecting every hosted domain on unpatched installations, not a single-tenant incident.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Command Injection in GitHub repository froxlor/froxlor prior to 2.0.8. Rated high severity (CVSS 8.8), this vulnerabilit
Improper Restriction of Excessive Authentication Attempts in GitHub repository froxlor/froxlor prior to 2.0.20. Rated cr
Authentication Bypass by Primary Weakness in GitHub repository froxlor/froxlor prior to 2.0.13. Rated critical severity
Froxlor through 0.10.29.1 allows SQL injection in Database/Manager/DbManagerMySQL.php via a custom DB name. Rated critic
Command injection in Froxlor server admin before 2.3.4 due to typo (== instead of =) disabling input validation entirely
Improper Link Resolution Before File Access in GitHub repository froxlor/froxlor prior to 2.1.0. Rated high severity (CV
Unrestricted Upload of File with Dangerous Type in GitHub repository froxlor/froxlor prior to 2.0.14. Rated high severit
Cross-Site Request Forgery (CSRF) in GitHub repository froxlor/froxlor prior to 2.0.11. Rated high severity (CVSS 8.8),
Code Injection in GitHub repository froxlor/froxlor prior to 2.0.11. Rated high severity (CVSS 8.8), this vulnerability
Code Injection in GitHub repository froxlor/froxlor prior to 2.0.10. Rated high severity (CVSS 8.8), this vulnerability
An issue was discovered in Froxlor before 0.10.14. Rated high severity (CVSS 8.8), this vulnerability is remotely exploi
Froxlor is open source server administration software. Rated high severity (CVSS 7.5), this vulnerability is remotely ex
EUVD-2026-87681
GHSA-wq4p-x9fv-rhvg
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB