CVE-2026-41235: Froxlor/froxlor Remote Code Execution Vulnerability
HIGHCVE-2026-41235 is a HIGH (CVSS 8.8) remote code execution vulnerability (CWE-863: Incorrect Authorization) affecting Froxlor/froxlor libraries in the Packagist ecosystem. The issue involves froxlor has an authorization bypass in ftp shell assignment via missing server-side `available_shells` enforcement. Remediation is available by upgrading affected packages to version 2.3.7.
CVE-2026-41235 at a Glance
Security Impact
CVSS: 8.8
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H).
How to Fix CVE-2026-41235
To remediate this vulnerability, upgrade all affected Froxlor/froxlor dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
Upgrade froxlor/froxlor to 2.3.7
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
inspect dependencies for froxlor/froxlor
How to Check if You Are Affected
To determine whether your application is affected by CVE-2026-41235, inspect your project dependencies for Froxlor/froxlor:
inspect dependencies for froxlor/froxlor
Analyze the terminal output to locate any version of Froxlor/froxlor in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 2.3.7), your application is affected.
Note: Verify declared build manifests and deployed runtime container environments.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-863: Incorrect Authorization, where the product performs an authorization check when an actor attempts to access a resource or perform an action, but it does not correctly perform the check. In Froxlor/froxlor, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-41235 Affected Froxlor/froxlor Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
froxlor/froxlor
|
Packagist |
≥ 2.3.6
< 2.3.7
All 1 versions
2.3.6
|
2.3.7
|
References
Frequently Asked Questions
What is CVE-2026-41235?
Which Froxlor/froxlor versions are affected?
What version fixes CVE-2026-41235?
Is froxlor/froxlor affected?
What is the CVSS score of CVE-2026-41235?
What CWE is associated with CVE-2026-41235?
How can I check Packagist dependencies for CVE-2026-41235?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-gcv3-5v9q-fmhh",
"modified" : "2026-06-09T11:54:54Z",
"published" : "2026-05-29T15:36:26Z",
"aliases" : [ "CVE-2026-41235" ],
"summary" : "Froxlor has an authorization bypass in FTP shell assignment via missing server-side `available_shells` enforcement",
"details" : "### Summary\nFroxlor 2.3.6 lets administrators configure `system.available_shells` as the approved shell list that customers may assign to FTP users. However, the server-side FTP account handlers do not enforce that whitelist when processing add or edit requests.\n\nAs a result, an authenticated customer with shell delegation enabled can submit an arbitrary shell such as `/bin/bash` even when the panel UI only offers more restricted choices. In deployments that use the default `nssextrausers` integration, the attacker-controlled shell is then propagated into the system account database, leading to real host shell access.\n\n### Details\nThe customer-facing FTP account page builds the shell selector from `system.available_shells`, which shows that the product intends the setting to act as the authorization boundary:\n\n```php\n// customer_ftp.php:138-149\n$shells = [\n '/bin/false' => '/bin/false'\n];\n$availableshells = explode(',', Settings::Get('system.available_shells'));\nif (is_array($availableshells) && !empty($availableshells)) {\n foreach ($availableshells as $shell) {\n $shells[trim($shell)] = trim($shell);\n }\n}\n```\n\nThe request handler forwards posted form data directly into the FTP API command implementation:\n\n```php\n// customer_ftp.php:170-172\nif ($action == 'edit' && Request::post('send') == 'send') {\n $result = $log->logAction(USR_ACTION, LOG_INFO, \"edited ftp-account #\" . $id);\n Commands::get()->apiCall('Ftps.update', Request::postAll());\n}\n```\n\nOn the server side, `Ftps::add()` and `Ftps::update()` only perform generic shell string validation. They do not verify that the submitted shell belongs to `system.available_shells`:\n\n```php\n// lib/Froxlor/Api/Commands/Ftps.php:119-123\nif (Settings::Get('system.allow_customer_shell') == '1' && $this->getUserDetail('shell_allowed') == '1') {\n $shell = Validate::validate(trim($shell), 'shell', '', '', [], true);\n} else {\n $shell = '/bin/false';\n}\n```\n\nThe validated shell is stored into `ftp_users.shell` and later consumed by the root-owned cron task that rebuilds NSS extrausers files:\n\n```php\n// lib/Froxlor/Cron/System/Extrausers.php:89-97\n$passwd_entries[] = $user['username'] . ':x:' . $uid . ':' . $gid . ':' . $gecos . ':' . $homedir . ':' . $shell;\n```\n\nBecause the default installer configuration sets `system.nssextrausers=1`, and the shipped Debian/Bookworm configuration enables `extrausers` in `nsswitch.conf`, the attacker-controlled shell becomes the effective login shell of the generated system user on standard supported deployments.\n\n### PoC\nAn attacker needs a normal customer account and a deployment where customer shell delegation is enabled for that customer.\n\nRelevant runtime prerequisites:\n\n- `system.allow_customer_shell=1`\n- the attacking customer has `shell_allowed=1`\n- the deployment uses `system.nssextrausers=1` with the shipped `libnss-extrausers` integration\n\nFroxlor requires a valid CSRF token for POST requests, so the attacker performs the exploit from an authenticated session.\n\nComplete PoC flow:\n\n1. Log in as a customer and obtain a valid `csrf_token`.\n2. Identify one FTP account owned by that customer.\n3. Submit an edit request that sets an arbitrary shell outside the administrator-approved `system.available_shells` list:\n\n```http\nPOST /customer_ftp.php?page=accounts&action=edit&id=17 HTTP/1.1\nHost: target.example\nContent-Type: application/x-www-form-urlencoded\nCookie: <authenticated customer session>\n\ncsrf_token=VALID_CSRF_TOKEN&\nsend=send&\nid=17&\nusername=test1ftp1&\nftp_description=poc&\npath=/&\nshell=/bin/bash&\nlogin_enabled=1\n```\n\n4. Wait for Froxlor's master cron to process the queued `REBUILD_NSSUSERS` task.\n\nResult:\n\n- the request is accepted even if `/bin/bash` is not present in `system.available_shells`\n- `ftp_users.shell` is updated to `/bin/bash`\n- `/var/lib/extrausers/passwd` is regenerated with `/bin/bash` as the FTP user's login shell\n- the attacker can then authenticate to the host using that FTP user's credentials and obtain an interactive shell\n\n\n### Impact\nThis issue lets a low-privileged customer bypass an administrator-defined authorization boundary and promote an FTP-only account into a real shell account. On shared-hosting systems managed by Froxlor, that materially changes the trust model and can expose the host to lateral movement, local privilege-escalation follow-on attacks, data theft from colocated services, and persistence on the server.\n\nBecause the vulnerable flow is executed through the normal authenticated web interface and a root-owned provisioning task later materializes the chosen shell at the operating-system level, the vulnerability is stronger than a UI-only restriction bypass.",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H"
}, {
"type" : "CVSS_V4",
"score" : "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:P"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "Packagist",
"name" : "froxlor/froxlor"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "2.3.6"
}, {
"fixed" : "2.3.7"
} ]
} ],
"versions" : [ "2.3.6" ]
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/froxlor/froxlor/security/advisories/GHSA-gcv3-5v9q-fmhh"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-41235"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/froxlor/froxlor"
}, {
"type" : "WEB",
"url" : "https://github.com/froxlor/froxlor/releases/tag/2.3.7"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-863" ],
"severity" : "HIGH",
"github_reviewed" : true,
"github_reviewed_at" : "2026-05-29T15:36:26Z",
"nvd_published_at" : "2026-06-04T19:16:29Z"
}
}