Description
Froxlor 2.3.10 and earlier contain a time-of-check time-of-use (TOCTOU) race condition in the SSH key synchronization cron (lib/Froxlor/Cron/System/SshKeys.php, SshKeys::generateFiles). The containment/symlink validation performed by FileDir::makeCorrectDir()/makeCorrectFile() is done only at check time; the live filesystem path is re-resolved as root at write time (file_put_contents with FILE_APPEND|LOCK_EX, followed by chmod/chown/chgrp), with a database round-trip and file reads in between, and no path or file-descriptor pinning (no O_NOFOLLOW or openat2(RESOLVE_NO_SYMLINKS)). On installations where the non-default setting system.allow_customer_shell=1 grants customers local shell access, a customer can atomically swap their ~/.ssh directory for a symlink after the check and before the write, causing the root-run cron to append the customer's public key to /root/.ssh/authorized_keys and to chown /root/.ssh to the customer, resulting in full root compromise of the panel host. The cron re-runs on every interval, allowing unlimited attempts. This is a residual race that bypasses the check-time fix introduced for GHSA-mq5v-... . The issue is fixed in Froxlor 2.3.12.
Published: 2026-09-26
Score: 7.1 High
EPSS: < 1% Very Low
KEV: No
Impact: Privilege Escalation
Action: Apply Immediate Patch
AI Analysis

Impact

The flaw is a time‑of‑check time‑of‑use (TOCTOU) race condition (CWE-367) in the SSH key synchronization routine of Froxlor 2.3.10 and earlier. During each cron run the system builds the target directory and file path, verifies no forbidden symlinks exist, then writes the customer’s public key to the target file. Because the validation is performed only once, an attacker can atomically replace their local ~/.ssh directory with a symlink to a privileged file such as /root/.ssh/authorized_keys before the file write occurs. The cron, running as root, then appends the attacker’s key to that file and changes its ownership to the attacker, giving the customer full root capabilities on the hosting machine.

Affected Systems

All deployments of the Froxlor control panel using version 2.3.10, 2.3.11 or earlier that have the system.allow_customer_shell setting enabled. The vulnerability is fixed starting with Froxlor 2.3.12.

Risk and Exploitability

The risk rating is CVSS 7.1, the EPSS score is not available and the vulnerability is not listed in the CISA KEV catalogue. The exploitation path relies on local cooperation by a customer who can flip the symlink during the window between the check and the write, and the cron is scheduled to run repeatedly, enabling repeated attempts. Once the race is won, the attacker can append their key to root’s authorized_keys and take unchecked root access.

Generated by OpenCVE AI on September 26, 2026 at 16:50 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade to Froxlor version 2.3.12 or later to eliminate the race condition.
  • If an immediate upgrade is not possible, disable local shell access for customers by setting system.allow_customer_shell to 0 in the configuration.
  • Temporarily disable or reduce the frequency of the SSH key synchronization cron to prevent repeated race attempts.

Generated by OpenCVE AI on September 26, 2026 at 16:50 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Sun, 27 Sep 2026 00:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Sat, 26 Sep 2026 13:30:00 +0000

Type Values Removed Values Added
Description Froxlor 2.3.10 and earlier contain a time-of-check time-of-use (TOCTOU) race condition in the SSH key synchronization cron (lib/Froxlor/Cron/System/SshKeys.php, SshKeys::generateFiles). The containment/symlink validation performed by FileDir::makeCorrectDir()/makeCorrectFile() is done only at check time; the live filesystem path is re-resolved as root at write time (file_put_contents with FILE_APPEND|LOCK_EX, followed by chmod/chown/chgrp), with a database round-trip and file reads in between, and no path or file-descriptor pinning (no O_NOFOLLOW or openat2(RESOLVE_NO_SYMLINKS)). On installations where the non-default setting system.allow_customer_shell=1 grants customers local shell access, a customer can atomically swap their ~/.ssh directory for a symlink after the check and before the write, causing the root-run cron to append the customer's public key to /root/.ssh/authorized_keys and to chown /root/.ssh to the customer, resulting in full root compromise of the panel host. The cron re-runs on every interval, allowing unlimited attempts. This is a residual race that bypasses the check-time fix introduced for GHSA-mq5v-... . The issue is fixed in Froxlor 2.3.12.
Title Froxlor before 2.3.12 Privilege Escalation via SSH Key Sync
First Time appeared Froxlor
Froxlor froxlor
Weaknesses CWE-367
CPEs cpe:2.3:a:froxlor:froxlor:*:*:*:*:*:*:*:*
Vendors & Products Froxlor
Froxlor froxlor
References
Metrics cvssV3_1

{'score': 7.8, 'vector': 'CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H'}

cvssV4_0

{'score': 7.1, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N'}


cve-icon MITRE

Status: PUBLISHED

Assigner: VulnCheck

Published:

Updated: 2026-09-26T23:10:14.884Z

Reserved: 2026-09-26T02:40:23.373Z

Link: CVE-2026-100713

cve-icon Vulnrichment

Updated: 2026-09-26T23:10:11.986Z

cve-icon NVD

Status : Deferred

Published: 2026-09-26T14:16:57.067

Modified: 2026-09-26T23:16:33.173

Link: CVE-2026-100713

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-26T17:45:06Z

Weaknesses
  • CWE-367

    Time-of-check Time-of-use (TOCTOU) Race Condition