Buying a $5 hosting account hands you the keys to every website on the server
CVE-2026-67401 is a SQL injection in cPanel & WHM's EmailTrack subsystem — the backend behind the "Track Delivery" feature that lets any hosting customer review their mail delivery logs. An authenticated cPanel account holder with default mail privileges can inject crafted SQL into an unsanitized account/domain parameter. The injected payload leverages SELECT … INTO OUTFILE to drop a PHP webshell into the account's public_html/ directory, then chains to root code execution through an undisclosed privilege-escalation surface (likely SUID cPanel binaries or root-owned task queues). Every supported cPanel & WHM release line is affected: 11.110.x, 11.134.x, 11.136.x, 11.138.x, and WP Squared — patched in builds 11.110.0.143, 11.134.0.55, 11.136.0.39, 11.138.0.4, and 11.138.1.9 respectively.
The vendor CVSS of 9.9 is honest and, if anything, understates the operational risk. The PR:L (Privileges Required: Low) metric technically captures the authentication requirement, but in the shared-hosting threat model, *every co-tenant already has that credential by default*. A motivated attacker can purchase a hosting account for under $5, immediately satisfying the only prerequisite. The S:C (Scope: Changed) designation is correct — the impact escapes the tenant's security boundary to reach root, compromising every account on the box. With a working public PoC now available (imbas007/CVE-2026-67401) and ~1.5 million internet-facing cPanel instances visible on Shodan, the vendor's CRITICAL rating is justified. We nudge the score to 9.5 to reflect the authentication gate, but this remains firmly in emergency-patch territory.
5 steps from start to impact.
Obtain cPanel credentials
account parameter in EmailTrack is accessible to any mail-enabled cPanel user.- Valid cPanel account with mail-enabled privileges
- Network access to cPanel ports (2082/2083) or webmail (2095/2096)
- On dedicated/enterprise servers, cPanel accounts are tightly controlled and may require VPN to reach
- Credential-stuffing is mitigated by cPHulk brute-force protection if enabled
/var/log/cPanel-login.log and cPHulk database; Shodan/Censys exposure scans for ports 2082-2096Inject SQL via EmailTrack parameter
account or domain parameter. The injection terminates the legitimate query string and appends attacker-controlled SQL. Boolean-based, time-based, and UNION-based injection vectors are all viable per the public PoC (poc_sqli.py in imbas007/CVE-2026-67401).- Authenticated cPanel session
- EmailTrack feature accessible (default on all mail-enabled accounts)
- ModSecurity with OWASP CRS may catch common SQLi patterns in request parameters
- WAF rules inspecting cPanel API calls could block payloads
/usr/local/cpanel/logs/access_logWrite webshell via INTO OUTFILE
SELECT … INTO OUTFILE to write a PHP webshell (e.g., <?php system($_GET['c']); ?>) to the attacker's own public_html/ directory. The MySQL/MariaDB process runs with filesystem privileges sufficient to write to tenant home directories. The webshell becomes immediately accessible via HTTP on port 80/443. The PoC tool poc_full_chain.py automates this step.- MySQL
file_privgranted to the cPanel database user (default in cPanel's bundled MySQL) - Target directory writable by MySQL process
- Apache/LiteSpeed serving PHP from
public_html/
- If
secure_file_privis set to a restricted directory, INTO OUTFILE is blocked — but cPanel's default MySQL does not restrict this - Filesystem permissions on
public_html/may be tightened on hardened configs - open_basedir or disable_functions in PHP could limit shell utility
public_html/ directories; new .php files in tenant webroot; MySQL general query log showing INTO OUTFILE statementsExecute commands as web server user
nobody or the cPanel account's user via CloudLinux CageFS). This provides initial code execution on the server, though not yet as root.- Webshell successfully written and PHP execution enabled
- HTTP/HTTPS access to the webshell path
- CloudLinux CageFS isolates tenant processes and limits visibility of other accounts
- Imunify360 or similar host-based malware scanners may detect the webshell
- PHP
disable_functionscould blocksystem(),exec(),passthru()
Escalate to root
poc_full_chain.py demonstrates the complete chain through to root.- Code execution as web server / cPanel user from step 4
- Presence of cPanel's privilege-escalation surface (SUID binaries, cron, or task queue)
- Kernel-level protections (SELinux in enforcing mode) may block the escalation
- CloudLinux hardened kernel limits certain SUID abuse paths
- Some managed hosting providers strip unnecessary SUID bits
/etc/ or /root/; Syslog anomalies from cPanel internal services/usr/local/cpanel/scripts/upcp --force on every cPanel server to pull the patched build. cPanel's auto-update mechanism is the fastest remediation path. Per the noisgate mitigation SLA for CRITICAL, deploy within 3 days. If auto-updates were enabled (the default), your servers may already be patched — verify with the version check script below.AV:N to AV:A. Deploy within 3 days per the noisgate mitigation SLA. Note: this breaks customer self-service access to cPanel and webmail unless you proxy through a VPN or bastion.secure_file_priv=/var/lib/mysql-files to /etc/my.cnf under [mysqld] and restart MySQL. This prevents INTO OUTFILE from writing to arbitrary paths, breaking the file-write step of the exploit chain. The SQLi still exists but cannot achieve RCE. Deploy within 3 days. Test that cPanel's backup and import functions still work after applying.- ModSecurity with OWASP CRS alone — While it may catch generic SQLi patterns, cPanel's EmailTrack endpoint uses internal API routing that may bypass standard ModSecurity rule paths. Do not rely on WAF rules as a substitute for patching.
- PHP disable_functions / open_basedir — These restrict what the webshell can do after being dropped, but do not prevent the SQLi or file-write steps. The root escalation may use cPanel binaries outside the PHP context entirely.
- cPHulk brute-force protection — This prevents credential stuffing against the login page but does nothing if the attacker already has valid credentials (purchased account, phished creds, or compromised reseller).
- IP-based WHM access restrictions only — WHM ACLs protect the admin interface (port 2086/2087) but the vulnerable EmailTrack endpoint is accessible through the cPanel user interface (port 2082/2083) and webmail ports, which are typically unrestricted.
The supporting signals.
| In-the-Wild Exploitation | No confirmed in-the-wild exploitation as of 2026-10-08. Not listed in CISA KEV. However, the complete attack chain has been publicly demonstrated in a lab environment via the imbas007 PoC repo. |
|---|---|
| Proof-of-Concept | Working PoC available. imbas007/CVE-2026-67401 contains poc_sqli.py (SQLi detection) and poc_full_chain.py (full exploit: SQLi → file write → root RCE), plus a self-contained vulnerable lab. 5 stars, 3 forks. A separate defensive scanner exists at jithinkrishnanrs/CVE-2026-67401-cPanel-EmailTrack-SQLi (IOC scanner, not an exploit). |
| EPSS Score | 0.00861 (0.86%) — 30-day exploitation probability. Low, but the score may lag the PoC publication. EPSS models weight historical exploitation patterns; a fresh PoC for a widely-deployed product with 1.5M exposed instances will likely push this upward in future model updates. |
| CVSS Vector | CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H — Network-accessible, low complexity, low privileges (any mail-enabled cPanel user), no user interaction, scope changed (tenant → root). Near-maximum score of 9.9; only PR:N would push it to 10.0. |
| Affected Versions | All supported cPanel & WHM release lines: 11.110.x (< 11.110.0.143), 11.134.x (< 11.134.0.55), 11.136.x (< 11.136.0.39), 11.138.x (< 11.138.0.4), WP Squared (< 11.138.1.9). Status of EOL lines 11.118 and 11.126 is unclear — assume vulnerable. |
| Fixed Versions | 11.110.0.143, 11.134.0.55, 11.136.0.39, 11.138.0.4, 11.138.1.9 — released 2026-09-08. cPanel auto-updates (upcp) should have deployed these within 24-48 hours on servers with automatic updates enabled. |
| Exposure Surface | ~1.5 million internet-facing cPanel instances per Shodan/Shadowserver telemetry (sourced from CVE-2026-41940 reporting in April 2026). cPanel ports 2082-2083 (cPanel), 2086-2087 (WHM), 2095-2096 (Webmail) are commonly exposed. cPanel holds ~24% market share among hosting control panels per Datanyze. |
| Disclosure Timeline | Disclosed 2026-09-08 by cPanel. Discovered by Ali Mustafa (rz1027) and abed1526. NVD published 2026-09-09. Working PoC appeared on GitHub within days of disclosure. |
| Researcher | Ali Mustafa (GitHub: rz1027 / imbas007) and abed1526. Ali Mustafa also published the working PoC repository. Defensive toolkit published by Jithin Krishnan RS (jithinkrishnanrs). |
| Related Vulns | cPanel had a separate critical auth bypass (CVE-2026-41940, CVSS 9.8) exploited as a zero-day Feb–Apr 2026, compromising ~44,000 servers. The combination of two CRITICAL cPanel CVEs in 2026 signals systemic code-quality concerns in the product. |
Sources.
- The Hacker News — cPanel EmailTrack Flaw Coverage
- GBHackers — cPanel EmailTrack SQL Injection Analysis
- Panelica — CVE-2026-67401 Deep Dive: Mail Account to Root
- imbas007/CVE-2026-67401 — Working PoC Exploit (GitHub)
- jithinkrishnanrs/CVE-2026-67401 — Defensive IOC Scanner (GitHub)
- DEV Community — CVE-2026-67401 Technical Analysis
- Strix.ai — CVE-2026-67401 CVSS Breakdown
- Picus Security — CVE-2026-41940 (Related cPanel Exposure Data)
Why this verdict
- Authentication gate provides thin friction: PR:L requires a valid cPanel account with mail privileges, which is the *default* for every shared-hosting customer. On a typical shared server with 200+ tenants, any single compromised or malicious tenant satisfies this prerequisite. An attacker can also purchase a $5 hosting plan. This narrows the reachable population only marginally — scoring a 0.4-point deduction from the vendor's 9.9.
- Working public PoC eliminates complexity barrier: The imbas007/CVE-2026-67401 repository provides a complete, automated exploit chain (SQLi → file write → root RCE) with a bundled test lab. This removes any residual AC:L ambiguity and confirms the chain is reproducible. No adjustment — this *supports* the CRITICAL rating.
- 1.5M exposed instances create massive attack surface: Shodan/Shadowserver data shows ~1.5 million internet-facing cPanel installations. cPanel ports are almost always internet-exposed by design (customers need to reach their control panels). Unlike internal-only software, there is no network segmentation friction to account for.
- No confirmed ITW exploitation or KEV listing — but PoC existence makes this imminent: EPSS at 0.86% is low today, but the model lags PoC publication. Historically, working PoCs for widely-deployed products with trivial auth requirements get weaponized within weeks. No deduction for current lack of ITW — the window is closing.
- Role multiplier: cPanel is *canonically* a multi-tenant production infrastructure component. A single cPanel server typically hosts 100–500+ customer accounts, each with databases (MySQL), email (Exim), websites (Apache/LiteSpeed), SSL private keys, and DNS zones. Root compromise = all tenant data on that server — potentially hundreds of businesses. This is analogous to a hypervisor escape in blast radius. ≥90% of cPanel installations occupy this high-value multi-tenant role by definition. The blast radius is tenant → all-tenants → supply-chain (attacker can modify hosted websites to serve malware to site visitors). This sets a CRITICAL floor that cannot be lowered by friction alone.
- Scope Changed is accurate and devastating: The
S:Cdesignation correctly reflects that exploitation escapes the tenant security boundary. The attacker starts as one customer among hundreds and ends as root — owning the server, all accounts, all data, and the ability to pivot to other servers in the hosting provider's infrastructure.
Why not higher?
The score is already near-maximum at 9.5. The only path to 10.0 would be removing the authentication requirement entirely (PR:N), which does not apply here — a valid cPanel credential is genuinely required, even if it is trivially obtainable.
Why not lower?
A working PoC exists for a vulnerability affecting ~1.5M internet-facing servers where the only prerequisite is a standard hosting account. The blast radius is multi-tenant root compromise — every database, every email, every website on the server. cPanel is canonically a high-value multi-tenant platform; ≥90% of installations occupy this role. The CRITICAL floor applies per the deployment-role analysis. Downgrading below CRITICAL would require evidence that <1% of cPanel installations are production multi-tenant, which contradicts all market data.
Crowdsourced verification payload.
Run this script on each cPanel server as root (or via sudo). It checks the installed cPanel build number against the known-patched versions and reports VULNERABLE, PATCHED, or UNKNOWN. Example: sudo bash check_cve_2026_67401.sh
#!/usr/bin/env bash
# check_cve_2026_67401.sh — Verify patch status for CVE-2026-67401
# cPanel EmailTrack SQL Injection (root RCE)
# Run as root on each cPanel/WHM server.
# Exit codes: 0 = PATCHED, 1 = VULNERABLE, 2 = UNKNOWN
set -euo pipefail
CPANEL_BIN="/usr/local/cpanel/cpanel"
if [[ ! -x "$CPANEL_BIN" ]]; then
echo "UNKNOWN — cPanel binary not found at $CPANEL_BIN. Is cPanel installed?"
exit 2
fi
VERSION_RAW=$($CPANEL_BIN -V 2>/dev/null)
if [[ -z "$VERSION_RAW" ]]; then
echo "UNKNOWN — Could not determine cPanel version."
exit 2
fi
# Extract major.minor.patch.build
# Example: 11.138.0.4 (Build 1) or 11.138.1.9
VERSION=$(echo "$VERSION_RAW" | grep -oP '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+'| head -1)
if [[ -z "$VERSION" ]]; then
echo "UNKNOWN — Could not parse version from: $VERSION_RAW"
exit 2
fi
MAJOR=$(echo "$VERSION" | cut -d. -f1)
MINOR=$(echo "$VERSION" | cut -d. -f2)
PATCH=$(echo "$VERSION" | cut -d. -f3)
BUILD=$(echo "$VERSION" | cut -d. -f4)
echo "Detected cPanel version: $VERSION (raw: $VERSION_RAW)"
# Patched versions per vendor advisory:
# 11.110.0.143, 11.134.0.55, 11.136.0.39, 11.138.0.4, 11.138.1.9
result="UNKNOWN"
case "$MINOR" in
110)
if [[ "$PATCH" -gt 0 ]] || [[ "$PATCH" -eq 0 && "$BUILD" -ge 143 ]]; then
result="PATCHED"
else
result="VULNERABLE"
fi
;;
134)
if [[ "$PATCH" -gt 0 ]] || [[ "$PATCH" -eq 0 && "$BUILD" -ge 55 ]]; then
result="PATCHED"
else
result="VULNERABLE"
fi
;;
136)
if [[ "$PATCH" -gt 0 ]] || [[ "$PATCH" -eq 0 && "$BUILD" -ge 39 ]]; then
result="PATCHED"
else
result="VULNERABLE"
fi
;;
138)
if [[ "$PATCH" -gt 1 ]]; then
result="PATCHED"
elif [[ "$PATCH" -eq 1 && "$BUILD" -ge 9 ]]; then
result="PATCHED"
elif [[ "$PATCH" -eq 0 && "$BUILD" -ge 4 ]]; then
result="PATCHED"
else
result="VULNERABLE"
fi
;;
118|126)
echo "WARNING — Release line 11.$MINOR is EOL. Patch status unknown. Assume VULNERABLE."
result="VULNERABLE"
;;
*)
if [[ "$MINOR" -gt 138 ]]; then
result="PATCHED"
else
result="UNKNOWN"
fi
;;
esac
# Additional check: is EmailTrack feature accessible?
if [[ -f "/usr/local/cpanel/Cpanel/EmailTrack.pm" ]]; then
echo "INFO — EmailTrack module present at /usr/local/cpanel/Cpanel/EmailTrack.pm"
else
echo "INFO — EmailTrack module not found (feature may be disabled or removed)."
fi
echo "$result — CVE-2026-67401 (cPanel EmailTrack SQLi → Root RCE)"
case "$result" in
PATCHED) exit 0 ;;
VULNERABLE) exit 1 ;;
*) exit 2 ;;
esac