Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as admin or reach settings-import API
-
DeliveryInject acme.sh options into letsencryptchallengepath
-
ExploitValue word-split past safe_exec blacklist
-
ExecutionRoot Let's Encrypt cron runs --pre/post/renew-hook
-
ImpactArbitrary command execution as root
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Argument sanitization
|
| Exploitation Conditions | Requires the ability to write the system.letsencryptchallengepath setting - i.e. an authenticated Froxlor administrator, or any actor able to reach the settings-import API - AND the Let's Encrypt / acme.sh cron path must be active (letsencrypt configured) so the root cron executes the poisoned command line. Unlike sibling settings hardened in GHSA-33mp, this field has no string_regexp or required_otp guard. Exploitation is limited by: the PR:H authentication requirement (panel admin / settings-write), the delay until the next Let's Encrypt cron run, and the need for acme.sh-based certificate issuance to be in use. The safe_exec metacharacter blacklist (; | & > < \ $ ~ ?) does NOT block spaces or quotes, which is what makes argument injection possible. |
| Impact | The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H with subsequent-system SC:H/SI:H/SA:H, 9.4) is well-justified for the technical impact: successful exploitation yields arbitrary command execution as root at the next Let's Encrypt cron run. The PR:H metric is the key limiter - the primary actor is an authenticated Froxlor administrator, or any principal able to write settings (e.g. via the settings-import API), so this is not a remote-unauthenticated flaw despite AV:N. The most significant real-world signal is the privilege-boundary crossing: a panel administrator (who is NOT necessarily a root shell operator) escalates to full root code execution on the host, which justifies treating the subsequent-system impacts (and a scope change in 3.1 terms) as High. Exploitation status: no public exploit identified at time of analysis - there is no EPSS score, no CISA KEV listing, and no POC referenced; the only sources are the vendor GHSA advisory and VulnCheck. This is therefore a genuinely high-technical-impact issue (root RCE) but its real-world urgency is tempered by the administrative/settings-write precondition and the absence of any exploitation evidence. It is a real priority for Froxlor operators to patch, but not an actively-exploited emergency. |
| Exploit ScenarioDerived | An authenticated Froxlor administrator (or an actor who can reach the settings-import API) sets system.letsencryptchallengepath to a value containing space-separated acme.sh options such as '--pre-hook "id>/tmp/x"' or '--post-hook'. Because safe_exec only blacklists metacharacters like ; | & $ and not spaces or quotes, the value is word-split into extra acme.sh arguments and executed by the root cron at the next Let's Encrypt run, giving arbitrary command execution as root; --config-home/--cert-home can alternatively be injected for arbitrary root file writes. No public exploit code is currently identified. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 26, 2026
Argument injection in the Froxlor hosting control panel (versions before 2.3.12) allows an authenticated administrator - or any actor able to write settings, such as through the settings-import API - to inject arbitrary acme.sh command-line options via the unescaped system.letsencryptchallengepath setting, resulting in arbitrary command execution as root the next time the Let's Encrypt cron job runs. The vendor CVSS 4.0 score of 9.4 (and the independently assessed CVSS 3.1 vector CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H) reflects complete compromise of the host, but exploitation is gated behind a high-privilege settings-write primitive (PR:H) and requires that acme.sh-based Let's Encrypt certificate issuance be configured so the root cron actually executes the poisoned command line. No public exploit code was identified at time of analysis and the issue is not reported as confirmed actively exploited (CISA KEV); the vendor-released fix is Froxlor 2.3.12.
RemediationAI
Upgrade Froxlor to 2.3.12 or later, which is the exact vendor-released patch version and resolves CVE-2026-100714 by properly restricting and escaping system.letsencryptchallengepath; the vendor advisory is available at https://github.com/froxlor/froxlor/security/advisories/GHSA-3w4g-cmpj-rj42. If immediate upgrade is not possible, apply compensating controls in order of effectiveness: (1) remove or tightly restrict write access to the settings subsystem, including locking down the settings-import API endpoint so that only fully trusted operators can reach it, since that path is the alternate injection vector - this does not remove the flaw but shrinks the attacker population; (2) if Let's Encrypt / acme.sh issuance is not in active use, disable the Let's Encrypt cron entry in the Froxlor root cron so the poisoned command line is never executed, at the cost of losing automated certificate renewal; (3) temporarily set system.letsencryptchallengepath to a fixed, known-safe path value and re-verify it before each maintenance window, keeping in mind that any actor who retains settings-write can simply alter it again; (4) audit existing installations for unexpected values in that setting and for suspicious roots of trust such as injected --pre-hook/--renew-hook/--post-hook arguments or altered acme.sh home and certificate directories, and review root cron logs for acme.sh invocations carrying unfamiliar flags or writes to the 2.3.12-fixed code path. Note that a patched release is available, so blacklisting shell metacharacters through WAF rules is not a reliable substitute for upgrading, because spaces and quotes are the exact characters the flaw relies on and are legitimate in many request payloads.
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 OS command argument injection (CWE-88) in Froxlor's Let's Encrypt integration, implemented in lib/Froxlor/Cron/Http/LetsEncrypt/AcmeSh.php. The system.letsencryptchallengepath setting is concatenated unescaped into the acme.sh command line that is later executed by the root-owned Froxlor cron through FileDir::safe_exec. Unlike sibling settings that were hardened in the earlier GHSA-33mp advisory, this field carries neither a string_regexp validation constraint nor a required_otp guard, so its raw value reaches the shell wrapper. safe_exec only applies a blacklist of shell metacharacters (; | & > < \ $ ~ ?) rather than proper argument escaping; because spaces and quotes are not filtered, the setting value is word-split by the shell into additional arguments to acme.sh. The injection therefore rides legitimate acme.sh options: --renew-hook, --pre-hook and --post-hook execute attacker-supplied commands when acme.sh runs, while --config-home and --cert-home permit arbitrary file writes with root privileges. The affected product is Froxlor as captured by CPE cpe:2.3:a:froxlor:froxlor:*:*:*:*:*:*:*:*, a PHP application, and the vendor advisory is GHSA-3w4g-cmpj-rj42 (mirrored by VulnCheck under CVE-2026-100714).
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:H/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H
PR:H because a settings-write/admin actor is required; S:C because a panel admin escalates to root code execution beyond the application's authority; C/I/A:H from full root RCE.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
Froxlor before 2.3.12 does not restrict or escape the system.letsencryptchallengepath setting: unlike sibling settings hardened in GHSA-33mp, the field has no string_regexp or required_otp guard, and its value is concatenated unescaped into the acme.sh command line built in lib/Froxlor/Cron/Http/LetsEncrypt/AcmeSh.php and executed by the root cron via FileDir::safe_exec. Because safe_exec only blacklists shell metacharacters such as ; | & > < \ $ ~ ?, spaces and quotes survive and the value is word-split into additional acme.sh arguments. An administrator, or any actor able to write settings (for example through the settings-import API), can therefore inject acme.sh options such as --renew-hook, --pre-hook or --post-hook to obtain arbitrary command execution as root at the next Let's Encrypt cron run, or use --config-home/--cert-home for arbitrary file writes. Versions up to and including 2.3.10 are affected; the issue is fixed in 2.3.12.
Articles & Coverage 1
Technical POC Analysis
CWE-88: Improper Neutralization of Argument Delimiters in a Command.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A command-execution flaw in the Froxlor hosting control panel (versions before 2.3.12) lets an authenticated administrator - or anyone who can write panel settings via the settings-import API - run arbitrary commands as root on the hosting server the next time the Let's Encrypt certificate cron job fires. Because Froxlor typically manages shared hosting infrastructure, a successful exploitation would put every customer website, mailbox, and credential hosted on the affected server at risk. Leadership should care because this is a full root compromise of a centralised control plane, and the fix is already available for a straightforward upgrade.
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
Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.
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-87687
GHSA-fh3h-q9pj-x5qp
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB