🛡️ CVE-2026-26279 — froxlor

🔴 CVSS 9.5 — Critical ⚠️ Exploit Public CWE-78 NVD
9.5
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

Froxlor has Admin-to-Root Privilege Escalation via Input Validation Bypass + OS Command Injection

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 ;, |, &, >, <, ` `, $, ~, ?. The email validation function (validateFormFieldEmail`) exists specifically to ensure email fields contain valid emails. Both mechanisms are security boundaries that this vulnerability bypasses.

3. The root cause is an unintentional code defect. The == operator on a standalone line is a no-op. No developer writes $x == 'mail'; intentionally. This is a typo that silently breaks an entire class of input validation. It is not an admin feature.

4. Comparable CVEs exist for similar hosting panel escalations:

  • CVE-2022-44877 (CentOS Web Panel: admin→root RCE, CVSS 9.8)
  • CVE-2023-27524 (Apache Superset: admin→RCE)
  • CVE-2021-21315 (Node.js systeminformation: privileged user→RCE)
  • CVE-2024-22024 (Ivanti: authenticated→system command execution)

In each case, the fact that the attacker needs authenticated access did not prevent CVE assignment. The privilege escalation from "application admin" to "OS root" is the security impact.

5. Multi-tenant impact. A single compromised or malicious admin gains root access to a server hosting potentially hundreds of customers. All customer data, databases, emails, and SSL keys are exposed.

Vulnerability Details

Bug 1: Input Validation Bypass (CWE-482)

File: lib/Froxlor/Validate/Form/Data.php

```php

// Line 169 — CURRENT CODE (BUGGY)

public static function validateFormFieldEmail($fieldname, $fielddata, $newfieldvalue)

{

$fielddata['string_type'] == 'mail'; // == comparison: result is discarded

return self::validateFormFieldString($fieldname, $fielddata, $newfieldvalue);

}

// Line 175 — SAME BUG

public static function validateFormFieldUrl($fieldname, $fielddata, $newfieldvalue)

{

$fielddata['string_type'] == 'url'; // == comparison: result is discarded

return self::validateFormFieldString($fieldname, $fielddata, $newfieldvalue);

}

```

What happens:

  • $fielddata['string_type'] is never set to 'mail'
  • validateFormFieldString() checks string_type to decide which validation to apply
  • Since it's unset, FILTER_VALIDATE_EMAIL is never called
  • Validation falls through to a permissive fallback regex: /^[^\r\n\t\f\0]*$/D
  • This regex allows |, ;, &, $, ` ``, and all other shell metacharacters

Intended code:

```php

$fielddata['string_type'] = 'mail'; // = assignment

```

Bug 2: OS Command Injection via acme.sh Installation (CWE-78)

File: lib/Froxlor/Cron/Http/LetsEncrypt/AcmeSh.php

```php

// Line 428

FileDir::safe_exec(

"wget -O - https://get.acme.sh | sh -s email=" . Settings::Get('panel.adminmail'),

$return,

['|'] // pipe character EXPLICITLY ALLOWED

);

```

What happens:

  • Settings::Get('panel.adminmail') returns the unsanitized value from Bug 1
  • safe_exec() normally blocks | as a dangerous character
  • But ['|'] in the third argument whitelists pipe for this specific call (needed for wget | sh)
  • An attacker's pipe-based payload passes through unblocked
  • The cron job runs as root

The Chain

```

Admin sets panel.adminmail = "[email protected] | COMMAND"

|

v

Bug 1: validateFormFieldEmail() does nothing (== typo)

|

v

Value stored to database as-is

|

v

Cron job runs AcmeSh::checkInstall() as root

|

v

Bug 2: safe_exec("wget ... | sh -s [email protected] | COMMAND", ..., ['|'])

|

v

COMMAND executes as root

```

Proof of Concept

vuln 1 PoC:

```

#!/usr/bin/env python3

"""

VULN-1 Live Verification: Email Validation Bypass

Tests against running Froxlor Docker instance.

"""

import re

import sys

import requests

TARGET = "http://localhost:8080"

USERNAME = "admin"

PASSWORD = "Admin123!@#"

How this vulnerability can be exploited

This issue can be reached over the network, attack complexity is low, an attacker needs administrative privileges on the target. No user interaction is required. The scope is changed, meaning a successful attack can affect components beyond the vulnerable one. Rated impact: confidentiality high, integrity high, availability high.

Weakness class

CVE-2026-26279 is classified as CWE-78: OS Command Injection. Untrusted input reaches a shell command without neutralisation, so an attacker can run arbitrary operating system commands.

Affected software

CVE-2026-26279 is recorded against 2 packages.

  • froxlor (fixed in 2.3.4)
  • froxlor/froxlor (fixed in 2.3.4)

Timeline and source

Published on 3 March 2026 and last revised on 17 June 2026. A public exploit is known to exist, which raises the urgency of patching considerably. A vendor advisory or fix has been published. Record sourced from NVD.

References

github.com
github.com
github.com

Details

Severity CRITICAL
CVSS Score 9.5
CVSS Vector CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
CWE CWE-78
Public Exploit ⚠️ Yes
Source NVD
Published 2026-03-03
Updated 2026-08-12
Modified 2026-06-17

Affected Packages

Software From version Fixed in
froxlor 2.3.4
froxlor/froxlor 2.3.4

Similar Threats

Exploit Protection

Are you running froxlor?

CVE-2026-26279 carries CVSS 9.5 Critical rating and a public exploit already exists. BotEraser checks your installation against this and other known CVE records, and blocks IPs associated with exploit activity.

Check My Site For CVE-2026-26279 →

No credit card required  ·  Results in minutes

ⓘ Data Notice: The information presented above has been compiled from publicly available internet sources. Boteraser aggregates this data solely for informational purposes and does not independently classify, evaluate, or endorse any findings about the vulnerabilities listed. The accuracy and completeness of this information is the sole responsibility of the original publishers. Boteraser and its operators accept no liability for any decisions made based on this data.

Browse related advisories

All advisoriesCVECVE 2026