CVE-2026-100714
KrytyczneCVSS 9.1Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 44 - wyżej niż 44% wszystkich znanych CVE
Streszczenie
Froxlor w wersjach przed 2.3.12 nie ogranicza ani nie escapuje ustawienia system.letsencryptchallengepath — w przeciwieństwie do innych ustawień wzmocnionych w GHSA-33mp, pole nie ma zabezpieczenia string_regexp ani required_otp, a jego wartość jest dołączana bez escapowania do wiersza poleceń acme.sh budowanego w lib/Froxlor/Cron/Http/LetsEncrypt/AcmeSh.php i wykonywanego przez cron roota przez FileDir::safe_exec. Ponieważ safe_exec blokuje tylko metaznaki powłoki takie jak ; | & > < \ $ ~ ?, spacje i cudzysłowy przechodzą, a wartość jest dzielona na dodatkowe argumenty acme.sh. Administrator lub dowolny podmiot mogący zapisywać ustawienia (np. przez API importu ustawień) może wstrzyknąć opcje acme.sh takie jak --renew-hook, --pre-hook lub --post-hook, aby uzyskać wykonanie dowolnych poleceń jako root przy następnym uruchomieniu crona Let's Encrypt, albo użyć --config-home/--cert-home do zapisu dowolnych plików.
Ocena ryzyka
Atakujący z możliwością zapisu ustawień może wykonać dowolne polecenia jako root, co prowadzi do pełnego przejęcia serwera. Ryzyko jest krytyczne, zwłaszcza przy dostępnym API importu ustawień.
Rekomendacja
Zaktualizuj Froxlor do wersji 2.3.12 lub nowszej. Do czasu aktualizacji ogranicz dostęp do zapisu ustawień i API importu ustawień.
Inne podatności w Froxlor
Zobacz wszystkie- CVE-2026-113677Średnie
Froxlor w wersjach od 0.10.0 przed 2.3.15 zawiera podatność braku autoryzacji w komendzie API SubDomains.delete, która pozwala uwierzytelnionym klientom usuwać główne domeny przydzielone przez resellera poprzez podanie identyfikatora domeny głównej. Atakujący mogą obejść ograniczenia interfejsu webowego, usunąć domeny, osierocić rekordy vhost, DNS i subdomen oraz doprowadzić licznik subdomains_used poniżej zera, aby uzyskać dodatkowy limit subdomen.
- CVE-2026-113676Średnie
Froxlor w wersjach od 0.10.0 przed 2.3.15 zawiera podatność obejścia autoryzacji w komendzie API Admins.get, która pozwala resellerom odczytać dowolny rekord administratora poprzez pomieszanie identyfikatorów. Atakujący mogą wysłać własną nazwę logowania z numerycznym identyfikatorem innego administratora, aby uzyskać adres e-mail kontaktowy, listy dozwolonych adresów IP, limity zasobów, notatki i historię logowania.
- CVE-2026-109960Wysokie
Froxlor w wersjach od 2.0.0 do 2.3.14 zawiera podatność przechowywanego skryptu krzyżowego (XSS), która pozwala uwierzytelnionym klientom na wstrzyknięcie HTML i JavaScript poprzez ustawienie złośliwej wartości motywu w customer_index.php. Skrypt wykonuje się, gdy administrator przegląda przegląd klientów z włączoną kolumną Theme, co pozwala atakującym na wykorzystanie tokenu CSRF do tworzenia kont administratorów lub zmiany ustawień serwera.
- CVE-2026-100712Średnie
Froxlor do wersji 2.3.10 wyłącza dwuskładnikowe uwierzytelnianie (2FA) użytkownika natychmiast po nieuwierzytelnionym żądaniu GET do strony zarządzania 2FA (np. /customer_index.php?page=2fa&action=delete), bez potwierdzenia, ponownego uwierzytelnienia ani tokena CSRF. Globalny middleware CSRF obejmuje tylko żądania POST/PUT/PATCH/DELETE, a ciasteczko sesji ma SameSite=Lax, więc nawigacja między witrynami (kliknięcie linku lub przekierowanie) przenosi sesję ofiary i cicho czyści type_2fa/data_2fa. Dotyczy to zarówno handlerów 2FA klienta, jak i administratora. Atakujący, który zwabi zalogowanego użytkownika panelu do kliknięcia spreparowanego linku, redukuje konto do uwierzytelniania tylko hasłem, co można połączyć z przejętym hasłem do przejęcia konta. Naprawione w 2.3.12.
- CVE-2026-100711Wysokie
Froxlor przed wersją 2.3.12 nie unieważnia istniejących sesji panelu, kluczy API i ciasteczek zaufania 2FA po zmianie hasła użytkownika. Atakujący posiadający przejęte sesje, ważne klucze API lub tokeny zaufania 2FA zachowują pełny dostęp do konta po rotacji hasła, omijając działania związane z reagowaniem na incydenty.
- CVE-2026-100708Wysokie
Froxlor przed wersją 2.3.13 zwraca kolumnę ssl_key_file — która przechowuje surową zawartość prywatnego klucza TLS w formacie PEM — bezpośrednio w odpowiedziach JSON poleceń API Certificates.get i Certificates.listing, ponieważ wyniki zapytań domain_ssl_settings są przekazywane przez ApiCommand::response() bez żadnego usuwania pól ani listy dozwolonych. Nisko uprzywilejowany uwierzytelniony klient API może pobrać klucze prywatne certyfikatów swoich domen, w tym klucze Let's Encrypt generowane przez Froxlor po stronie serwera i przechowywane z uprawnieniami root-only (0600), do których klient nie ma dostępu do systemu plików; konta reseller i customers_see_all admin mogą zrzucić klucze prywatne innych podmiotów przez ten sam mechanizm. Ujawnione klucze umożliwiają podszywanie się pod domenę, pasywne deszyfrowanie przechwyconego ruchu TLS oraz aktywne ataki typu man-in-the-middle.
- CVE-2026-113678Krytyczne
Froxlor przed wersją 2.3.15 zawiera podatność podążania za symlinkami w Statistics::makeChownWithNewStats, która pozwala uwierzytelnionym klientom przejąć własność dowolnych katalogów hosta poprzez nadużycie uruchamianego jako root crona ruchu. Atakujący może zastąpić katalog statystyk goaccess w swoim document root symlinkiem, powodując, że chown -R przekaże im drzewa katalogów należące do roota.
- CVE-2026-100717Krytyczne
Froxlor w wersjach 2.3.10 i wcześniejszych zawiera niekompletną poprawkę podatności GHSA-c3p2 — funkcja Validate::validateUrl odrzuca znaki CR/LF tylko w ścieżce, zapytaniu i fragmencie, a nie sprawdza części userinfo (user:pass@). Uwierzytelniony klient z uprawnieniami do tworzenia subdomen może podać adres URL przekierowania subdomeny z ładunkiem CR/LF w części userinfo, który przechodzi walidację i jest zapisywany dosłownie w konfiguracji vhost nginx lub Apache. Froxlor regeneruje i przeładowuje konfigurację jako root, więc wstrzyknięte dyrektywy działają w całym serwerze.
- CVE-2026-100716Krytyczne
Froxlor w wersjach 2.3.10 i wcześniejszych zawiera niekompletną poprawkę podatności GHSA-75h4-... — cron eksportu danych klienta (DataDump) nie waliduje pośrednich komponentów ścieżki docelowej. Funkcja Froxlor\FileDir::makeCorrectDir() ma błąd off-by-one w przechodzeniu komponentów ścieżki, pomijając pierwszy segment poniżej katalogu domowego klienta, a zabezpieczenie w ExportCron.php sprawdza tylko ostatni komponent przez is_link(). Uwierzytelniony klient z włączonym eksportem może zaplanować eksport do podkatalogu swojego webspace, a następnie zastąpić pośredni komponent ścieżki dowiązaniem symbolicznym przed uruchomieniem crona jako root. Wtedy 'chown -R' rekurencyjnie zmienia właściciela drzewa katalogów (np. /etc) na UID klienta, co prowadzi do przejęcia uprawnień roota i kompromitacji między dzierżawcami.
- CVE-2026-100715Krytyczne
Froxlor w wersjach do 2.3.10 jest podatny na dowolne usuwanie plików poprzez podążanie za dowiązaniami symbolicznymi w zadaniu cron usuwania danych FTP. Zadanie cron 8 (deleteFtpData), kolejkowane przy usuwaniu konta FTP, wywołuje FileDir::makeCorrectDir() bez argumentu $fixed_homedir, więc przechodzenie komponentów ścieżki jest pomijane, a następnie wykonuje 'rm -rf' jako root na wynikowej ścieżce z jedynie tekstowymi zabezpieczeniami. Ponieważ makeCorrectDir() dodaje końcowy ukośnik, GNU rm podąża za dowiązaniem symbolicznym użytym jako pośredni lub końcowy komponent ścieżki. Uwierzytelniony klient mogący zapisywać w katalogu domowym FTP może umieścić dowiązanie symboliczne między wstawieniem zadania a wykonaniem crona, powodując rekurencyjne usunięcie dowolnych drzew katalogów przez zadanie roota.
Oryginalny opis (angielski, źródło NVD)
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.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

