criticalCVSS 10Vulnerability

GHSA-w59f-67xm-rxx7

## Summary The Froxlor API endpoint `Customers.update` (and `Admins.update`) does not validate the `def_language` parameter against the list of available language files. An authenticated customer can set `def_language` to a path traversal payload (e.g., `../../../../../var/customers/webs/customer1/evil`), which is stored in the database. On subsequent requests, `Language::loadLanguage()` constructs a file path using this value and executes it via `require`, achieving arbitrary PHP code execution as the web server user. ## Details **Root cause:** The API and web UI have inconsistent validation for the `def_language` parameter. The **web UI** (`customer_index.php:261`, `admin_index.php:265`) correctly validates `def_language` against `Language::getLanguages()`, which scans the `lng/` directory for actual language files: ```php // customer_index.php:260-265 $def_language = Validate::validate(Request::post('def_language'), 'default language'); if (isset($languages[$def_language])) { Customers::getLocal($userinfo, [ 'id' => $userinfo['customerid'], 'def_language' => $def_language ])->update(); ``` The **API** (`Customers.php:1207`, `Admins.php:600`) only runs `Validate::validate()` with the default regex `/^[^\r\n\t\f\0]*$/D`, which permits path traversal sequences: ```php // Customers.php:1167-1172 (customer branch) } else { // allowed parameters $def_language = $this->getParam('def_language', true, $result['def_language']); ... } // Customers.php:1207 - validation (shared by admin and customer paths) $def_language = Validate::validate($def_language, 'default language', '', '', [], true); ``` The tainted value is stored in the `panel_customers` (or `panel_admins`) table. On every subsequent request, it is loaded and used in two paths: **API path** (`ApiCommand.php:218-222`): ```php private function initLang() { Language::setLanguage(Settings::Get('panel.standardlanguage')); if ($this->getUserDetail('language') !== nul

Properties

ghsa_id
GHSA-w59f-67xm-rxx7
severity
critical
summary
Froxlor has Local File Inclusion via path traversal in API `def_language` parameter leads to Remote Code Execution
cvss_score
10
cve_id
GHSA-w59f-67xm-rxx7
cvss_vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
is_ghsa_only
true
ghsa_published
2026-04-16T01:02:12Z
source_url
https://github.com/advisories/GHSA-w59f-67xm-rxx7
ghsa_updated
2026-04-16T01:02:16Z

Related Entities (4)

REPORTED_BY (1)

[Source]GitHub Advisory Database

VULNERABLE_TO (1)

[Software]composer/froxlor/froxlor

AFFECTS (1)

[Software]composer/froxlor/froxlor

HAS_WEAKNESS (1)

[Weakness]Improper Control of Filename for Include/Require Statement in PHP Program ('PHP Remote File Inclusion')

Explore deeper with Ninja Signal's threat intelligence graph

GHSA-w59f-67xm-rxx7 (CVSS 10) — Ninja Signal Threat Intelligence | Ninja Signal