Podatność w Froxlor (przed wersją 2.3.6) umożliwia uwierzytelnionemu użytkownikowi osiągnięcie zdalnego wykonania kodu (RCE) poprzez manipulację parametrem `def_language` w API. Zagrożenie jest krytyczne, ponieważ atakujący może uruchomić dowolny kod PHP z uprawnieniami serwera WWW.
▸ Pokaż oryginał (EN)
Froxlor is open source server administration software. Prior to version 2.3.6, 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. Version 2.3.6 fixes the issue.
Endpoint API `Customers.update` (oraz `Admins.update`) nie waliduje parametru `def_language` względem listy dostępnych plików językowych. Uwierzytelniony użytkownik może przekazać jako wartość tego parametru payload typu path traversal (np. `../../../../../var/customers/webs/customer1/evil`), który jest następnie zapisywany w bazie danych. Przy kolejnych żądaniach funkcja `Language::loadLanguage()` konstruuje ścieżkę do pliku na podstawie tej wartości i wykonuje go instrukcją `require`, co prowadzi do wykonania dowolnego kodu PHP jako użytkownik procesu serwera WWW.
Atakujący może wykonać dowolny kod PHP na serwerze z uprawnieniami serwera WWW, co w praktyce oznacza pełne przejęcie kontroli nad aplikacją, dostęp do danych klientów oraz potencjalny lateral movement w infrastrukturze hostingowej.
Należy zaktualizować Froxlor do wersji 2.3.6, która wprowadza walidację parametru `def_language` względem listy dostępnych plików językowych. Patch dostępny jest w repozytorium GitHub producenta (commit bc5e6dbaa90e6f3573129da640595e8c770e1d0c) oraz w wydaniu 2.3.6.
Froxlor we wszystkich wersjach przed 2.3.6
Podatność wymaga uwierzytelnienia (PR:L), jednak zasięg ataku wykracza poza kontekst aplikacji (S:C), co przekłada się na wynik CVSS 9.9. Błąd sklasyfikowany jako CWE-98 (improper control of filename for include/require statement in PHP).
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:HFroxlor
APPFroxlor< 2.3.6
Powiązane podatności
Froxlor: wstrzyknięcie kodu PHP przez nieskonfigurowany parametr MySQL
RCE z uprawnieniami root w Froxlor przez błąd walidacji pól e-mail
Improper Link Resolution Before File Access in GitHub repository froxlor/froxlor prior to 2.1.0.
Improper Restriction of Excessive Authentication Attempts in GitHub repository froxlor/froxlor prior to 2.0.20...
Authentication Bypass by Primary Weakness in GitHub repository froxlor/froxlor prior to 2.0.13.