GitHub Advisoryadvisory · Packagist

GHSA-33mp-8p67-xj7c Froxlor has Admin-to-Root Privilege Escalation via Input Validation Bypass + OS Command Injection

CRITICAL Published 2026-03-03 Modified 2026-03-04 Official page ↗
Aliases
CVE-2026-26279
Ecosystem
Packagist
Packages
froxlor/froxlor
Severity
Critical
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
Weaknesses
CWE-482, CWE-78
Reviewed
2026-03-03

Affected packages

• Packagist froxlor/froxlor: < 2.3.4 → fixed in 2.3.4

Description

Summary A typo in Froxlor's input validation code (`==` instead of `=`) completely disables email format checking for all settings fields declared as email type. This allows an authenticated admin to store arbitrary strings — including shell metacharacters — in the `panel.adminmail` setting. This value is later concatenated into a shell command executed as root by a cron job, where the pipe character `|` is explicitly whitelisted. The result is full root-level Remote Code Execution. --- Why This Is a Security Vulnerability (Not Just "Admin Using Admin Features") Froxlor is a shared hosting control panel. In production deployments: 1. Admin panel access does not equal root access. Hosting providers assign the Froxlor admin role to staff who manage customer accounts, domains, and services through the web UI. These operators are not given SSH access or root shell on the underlying server. The boundary between "panel admin" and "OS root" is a deliberate security design. 2. Froxlor itself enforces this boundary. The `safe_exec()` function (FileDir.php:224-264) exists specifically to prevent shell injection — it blocks `;`, `|`, `&`, `>`, `/dev/null" ], capture_output=True, text=True ) stored_value = result.stdout.strip() if payload in stored_value or stored_value == payload: print(f" [VULN] CONFIRMED! Stored value: {stored_value}") else: print(f" [INFO] Stored value: {stored_value}") print(f" [INFO] May need different form field names or approach") # Restore original value print("\n[*] Restoring original admin email...") resp = session.get(f"{TARGET}/admin_settings.php?page=overview&part=all") csrf_match = re.search(r'na…

Related

Alias · CVE (1)

  • CVE-2026-26279 Froxlor is open source server administration software. vulnerability

Weakness · CWE (2)

  • CWE-482 Comparing instead of Assigning weakness
  • CWE-78 Improper Neutralization of Special Elements used in an OS Command weakness

References