Someone left the janitor's keys on a hook anyone can reach, and the janitor has master access to every apartment in the building
CVE-2026-87886 is a local privilege escalation (LPE) caused by insecure default file permissions (CWE-276) in the Acronis Backup plugins for cPanel & WHM (before build 1.9.3.1021), Plesk (before build 1.8.11.638), and DirectAdmin (before build 1.2.3.238) on Linux. The Acronis plugin drops files with overly permissive modes, allowing any low-privileged local user — including a hosting customer's shell account or a web shell planted through an unrelated webapp flaw — to tamper with or leverage those files to escalate to root. Once root is achieved on a shared-hosting box, the attacker owns every customer site, database, mailbox, and backup managed by that control-panel instance. Acronis withheld specific file paths and exploitation technique details (advisory SEC-10986) to buy defenders time, but CISA confirmed active exploitation and added CVE-2026-87886 to the KEV catalog on 2026-09-16 with a remediation deadline of 2026-09-19 — a three-day window that signals urgency.
Acronis rates this HIGH / 7.8, which is directionally correct but understates the operational blast radius. A CVSS 7.8 with AV:L reads as a contained, single-host problem. On a dedicated workstation, it would be. But the Acronis Backup plugin exists *exclusively* on multi-tenant hosting servers — cPanel/WHM alone accounts for ~64% of hosting-panel deployments and Censys observes over 1 million cPanel/WHM instances on the public internet. On a shared hosting node, a local user going to root means compromise of every tenant, every database credential, and every backup artifact on the box. The vendor score ignores this blast-radius multiplier. Additionally, the backup-infrastructure angle means an attacker can manipulate or destroy recovery data — textbook ransomware preparation. The KEV listing with a -1 day lag (exploited before or on disclosure day) confirms this is not theoretical.
4 steps from start to impact.
Obtain low-privilege shell on the hosting server
PR:L (Privileges Required: Low) reflects this. On shared hosts, hundreds or thousands of isolated user accounts exist, each a potential entry point.- Low-privileged local shell on the target Linux server
- Server must have the Acronis Backup plugin installed for cPanel/WHM, Plesk, or DirectAdmin
- Attacker must first compromise a hosting account or plant a web shell — not a zero-click remote attack
- Acronis Backup plugin is an optional add-on; not all cPanel/Plesk servers have it installed
Identify and exploit insecure file permissions
/usr/lib/, /opt/acronis/, or cPanel plugin directories. Because the permissions are world-writable or world-readable where they should not be, the low-privileged user can overwrite a binary or script that runs as root during backup operations, or read configuration files containing elevated credentials. The attack complexity is AC:L — no race condition, no special configuration needed beyond the default insecure install.- Default (unpatched) installation of the Acronis Backup plugin
- File permissions left as shipped — no hardening applied
- If an admin has manually locked down file permissions (e.g., via automated hardening scripts), the default insecure perms may already be corrected
- Technical details not publicly disclosed yet, which limits script-kiddie adoption — but targeted attackers clearly know the paths
find / -perm -o+w -user root audits surface world-writable root-owned files.Escalate to root via tampered plugin execution
C:H/I:H/A:H reflects complete compromise — the attacker can read all files, modify anything, and disrupt services. No user interaction is required (UI:N); the backup process triggers automatically.- Acronis Backup agent must execute the tampered file (typically automatic via cron or on-demand backup trigger)
- Scope is Unchanged (
S:U) — the initial authority boundary is the OS itself
- If backups are not running frequently, there may be a delay before escalation triggers
- Some hardened hosting environments run backup agents in containers or with reduced capabilities, though this is uncommon
execve from Acronis plugin paths. EDR agents (if deployed on hosting servers) should flag privilege escalation chains.Multi-tenant data access and backup manipulation
- Successful root escalation from step 3
- None — once root is achieved, these actions are unrestricted on standard cPanel/WHM deployments
/usr/lib/acronis/, /opt/acronis/, cPanel plugin paths). Remove world-writable and group-writable bits on all root-owned plugin files: find /usr/lib/acronis /opt/acronis -type f -perm /o+w -exec chmod o-w {} +. This directly addresses CWE-276 and breaks the escalation path. Deploy within hours given KEV status.auditctl -w /usr/lib/acronis/ -p wa -k acronis_integrity.auth.log and secure for unexpected privilege escalation, (3) cron jobs and systemd timers for persistence, (4) customer account integrity across all hosted sites. Treat pre-patch servers as potential breach sites.PR:L prerequisite by disabling unnecessary shell access for hosting accounts (use noshell or jailshell), enforcing CloudLinux CageFS or similar isolation, and implementing SSH key-only authentication. This makes the local access prerequisite harder to satisfy. Does not remediate the vulnerability itself but shrinks the pool of accounts that could exploit it.- WAF / ModSecurity rules — This is a local privilege escalation via file permissions, not a web-facing attack. WAF rules cannot intercept local file system operations.
- Network segmentation / firewall rules — The attack is local to the server; no network traffic is involved in the escalation itself. Firewalling cPanel ports does not help.
- Disabling the Acronis Backup agent service — While this prevents the escalation trigger (backup process executing tampered files), it also disables all backups, which may be operationally unacceptable and creates a different risk. Only use as a last resort if patching is impossible.
- Updating cPanel/WHM itself — The vulnerability is in the Acronis plugin, not in cPanel. Updating cPanel without updating the Acronis plugin leaves the flaw in place.
The supporting signals.
| In-the-Wild Exploitation | Confirmed. Acronis acknowledged "limited, targeted attacks" against cPanel & WHM deployments. CISA KEV listing with a -1 day lag (exploited on or before disclosure). No exploitation reported against Plesk or DirectAdmin variants yet. |
|---|---|
| CISA KEV Status | Listed 2026-09-16. Remediation deadline: 2026-09-19 (3-day window). Forensic triage required per BOD 26-04. Added alongside CVE-2026-76460. |
| Proof-of-Concept Availability | No public PoC found. No results on pocindex.io, no GitHub repos named CVE-2026-87886, no ExploitDB or Metasploit module. Acronis deliberately withheld technical details. Private exploitation capability exists among targeted threat actors. |
| EPSS Score | 0.00233 (low percentile). EPSS underweights this because the local access vector depresses the model's probability estimate. KEV listing is the more reliable signal here — EPSS has not yet absorbed the exploitation intelligence. |
| CVSS Vector | CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H — Local access, low complexity, low privileges, no user interaction. Full CIA impact. The AV:L masks the operational reality on multi-tenant shared-hosting servers. |
| Affected Version Ranges | cPanel & WHM plugin: all builds < 1.9.3.1021 · Plesk extension: all builds < 1.8.11.638 · DirectAdmin plugin: all builds < 1.2.3.238 |
| Fixed Versions | cPanel & WHM: 1.9.3 HF3 (build 1.9.3.1021) · Plesk: 1.8.11 (build 1.8.11.638) · DirectAdmin: 1.2.3 (build 1.2.3.238) |
| Exposure Surface | Censys observes ~1,052,657 cPanel/WHM instances internet-facing. cPanel holds ~64% hosting-panel market share. Acronis Backup plugin is an optional add-on — installed base is a subset, but significant among MSPs and hosting providers using Acronis for backup. |
| Vendor Advisory | Acronis SEC-10986. Technical exploitation details deliberately withheld. No IOCs published. |
| Disclosure Timeline | Disclosed: 2026-09-15 (weekend advisory). CVE assigned: 2026-09-17. KEV added: 2026-09-16. Exploitation observed: on or before disclosure (-1 day lag). |
Sources.
- Acronis Security Advisory SEC-10986
- CISA KEV Catalog Entry for CVE-2026-87886
- CISA Alert — Two KEVs Added 2026-09-16
- BleepingComputer — Acronis Warns of Actively Exploited Flaw
- SecurityWeek — Acronis Patches Exploited Vulnerability
- Help Net Security — Acronis Backup Plugin Vulnerability
- Censys — cPanel/WHM Exposure Data
- Vijilan — MSP Response Guide for CVE-2026-87886
Why this verdict
- Active exploitation confirmed and KEV-listed. CISA added CVE-2026-87886 to the KEV catalog on 2026-09-16 with a 3-day remediation deadline. Exploitation was observed *before* public disclosure (-1 day lag). This alone overrides any downward friction pressure from the local access vector.
- Local access requirement is low friction on shared hosting. The
AV:L / PR:Lvector sounds restrictive, but on multi-tenant cPanel/WHM servers — the *only* environment where this plugin exists — low-privilege shells are abundant. Compromised hosting accounts, web shells from vulnerable CMSes, and SSH credential stuffing provide the entry point. This prerequisite is routinely satisfied in the hosting threat model. - Role multiplier: multi-tenant hosting server (high-value role). 100% of affected installations are on production hosting servers managing multiple customer accounts. Root escalation on a WHM instance yields access to *every* hosted site, database, email store, and SSL key on the server. The blast radius is tenant-scale to provider-scale — a single compromised server can affect hundreds of customers. This is NOT a workstation LPE.
- Role multiplier: backup infrastructure. The affected component is literally a backup plugin. Root access through this path gives the attacker control over backup data — enabling exfiltration of historical data, backup destruction for ransomware preparation, or backup poisoning. Backup infrastructure is in the high-value-role catalog, and this component occupies that role by definition.
- Score adjustment: 7.8 → 8.2. The vendor's 7.8 correctly captures the single-host LPE mechanics. The upward adjustment of +0.4 reflects the multi-tenant blast radius inherent to the deployment context (every installation is on shared hosting) and the confirmed active exploitation. The severity label remains HIGH because the local access vector is a real constraint — unauthenticated remote attackers cannot reach this directly.
Why not higher?
A CRITICAL rating would require either unauthenticated remote exploitation or a blast radius that reaches fleet/domain scale from a single exploitation event. CVE-2026-87886 requires local access as a prerequisite, which means an attacker must already have an initial foothold (compromised hosting account, web shell). The Scope is Unchanged — the escalation stays within the OS boundary of the single server. While the multi-tenant blast radius is severe, it is bounded to one server per exploitation, not fleet-wide. The Acronis Backup plugin is also an optional add-on, not installed by default on all cPanel instances, which limits the attack surface.
Why not lower?
A MEDIUM rating is impossible given confirmed active exploitation and KEV listing — these are hard overrides. Beyond that, the deployment context makes this operationally severe: every affected installation runs on a multi-tenant production hosting server where LPE-to-root means total compromise of all customer data. The backup-infrastructure role adds data-destruction and ransomware-preparation risk. Low attack complexity and no user interaction required mean the chain is reliable once the local access prerequisite is met. The -1 day exploitation lag indicates sophisticated threat actors are already weaponizing this.
Crowdsourced verification payload.
Run this script on each target hosting server (cPanel/WHM, Plesk, or DirectAdmin Linux host) as root or with sudo. Invoke: sudo bash check_cve_2026_87886.sh. It checks whether the Acronis Backup plugin is installed and whether the installed build is below the patched threshold.
#!/usr/bin/env bash
# check_cve_2026_87886.sh — Detect CVE-2026-87886 (Acronis Backup plugin LPE)
# Run as root on cPanel/WHM, Plesk, or DirectAdmin Linux servers.
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
set -euo pipefail
VULNERABLE=0
CHECKED=0
version_lt() {
# Returns 0 if $1 < $2 (using sort -V)
[ "$(printf '%s\n%s' "$1" "$2" | sort -V | head -n1)" = "$1" ] && [ "$1" != "$2" ]
}
# --- cPanel & WHM plugin check ---
CPANEL_PLUGIN_INFO=""
if [ -d "/usr/local/cpanel" ] || command -v whmapi1 &>/dev/null; then
# Try common Acronis plugin locations
for candidate in \
/usr/local/cpanel/3rdparty/acronis/version \
/opt/acronis/cpanel/version \
/usr/lib/acronis/cpanel/version \
/var/cpanel/acronis/version; do
if [ -f "$candidate" ]; then
CPANEL_PLUGIN_INFO=$(cat "$candidate" 2>/dev/null || true)
break
fi
done
# Fallback: check RPM/dpkg
if [ -z "$CPANEL_PLUGIN_INFO" ]; then
CPANEL_PLUGIN_INFO=$(rpm -q --queryformat '%{VERSION}' acronis-backup-cpanel 2>/dev/null || \
dpkg-query -W -f='${Version}' acronis-backup-cpanel 2>/dev/null || true)
fi
# Fallback: check plugin metadata
if [ -z "$CPANEL_PLUGIN_INFO" ]; then
for meta in /var/cpanel/plugins/acronis*/version /usr/local/cpanel/whostmgr/docroot/cgi/acronis/version; do
if [ -f "$meta" ]; then
CPANEL_PLUGIN_INFO=$(cat "$meta" 2>/dev/null || true)
break
fi
done
fi
if [ -n "$CPANEL_PLUGIN_INFO" ]; then
CHECKED=1
FIXED_CPANEL="1.9.3.1021"
echo "[*] cPanel/WHM Acronis plugin detected: build $CPANEL_PLUGIN_INFO"
if version_lt "$CPANEL_PLUGIN_INFO" "$FIXED_CPANEL"; then
echo "[!] VULNERABLE — build $CPANEL_PLUGIN_INFO is below fixed build $FIXED_CPANEL"
VULNERABLE=1
else
echo "[+] PATCHED — build $CPANEL_PLUGIN_INFO >= $FIXED_CPANEL"
fi
elif [ -d "/usr/local/cpanel" ]; then
echo "[*] cPanel detected but Acronis Backup plugin not found — NOT AFFECTED"
CHECKED=1
fi
fi
# --- Plesk plugin check ---
PLESK_PLUGIN_INFO=""
if [ -d "/usr/local/psa" ] || command -v plesk &>/dev/null; then
for candidate in \
/opt/acronis/plesk/version \
/usr/lib/acronis/plesk/version \
/usr/local/psa/admin/plib/modules/acronis-backup/version; do
if [ -f "$candidate" ]; then
PLESK_PLUGIN_INFO=$(cat "$candidate" 2>/dev/null || true)
break
fi
done
if [ -z "$PLESK_PLUGIN_INFO" ]; then
PLESK_PLUGIN_INFO=$(rpm -q --queryformat '%{VERSION}' acronis-backup-plesk 2>/dev/null || \
dpkg-query -W -f='${Version}' acronis-backup-plesk 2>/dev/null || true)
fi
if [ -n "$PLESK_PLUGIN_INFO" ]; then
CHECKED=1
FIXED_PLESK="1.8.11.638"
echo "[*] Plesk Acronis extension detected: build $PLESK_PLUGIN_INFO"
if version_lt "$PLESK_PLUGIN_INFO" "$FIXED_PLESK"; then
echo "[!] VULNERABLE — build $PLESK_PLUGIN_INFO is below fixed build $FIXED_PLESK"
VULNERABLE=1
else
echo "[+] PATCHED — build $PLESK_PLUGIN_INFO >= $FIXED_PLESK"
fi
elif [ -d "/usr/local/psa" ]; then
echo "[*] Plesk detected but Acronis Backup extension not found — NOT AFFECTED"
CHECKED=1
fi
fi
# --- DirectAdmin plugin check ---
DA_PLUGIN_INFO=""
if [ -d "/usr/local/directadmin" ] || command -v directadmin &>/dev/null; then
for candidate in \
/opt/acronis/directadmin/version \
/usr/lib/acronis/directadmin/version \
/usr/local/directadmin/plugins/acronis-backup/version; do
if [ -f "$candidate" ]; then
DA_PLUGIN_INFO=$(cat "$candidate" 2>/dev/null || true)
break
fi
done
if [ -z "$DA_PLUGIN_INFO" ]; then
DA_PLUGIN_INFO=$(rpm -q --queryformat '%{VERSION}' acronis-backup-directadmin 2>/dev/null || \
dpkg-query -W -f='${Version}' acronis-backup-directadmin 2>/dev/null || true)
fi
if [ -n "$DA_PLUGIN_INFO" ]; then
CHECKED=1
FIXED_DA="1.2.3.238"
echo "[*] DirectAdmin Acronis plugin detected: build $DA_PLUGIN_INFO"
if version_lt "$DA_PLUGIN_INFO" "$FIXED_DA"; then
echo "[!] VULNERABLE — build $DA_PLUGIN_INFO is below fixed build $FIXED_DA"
VULNERABLE=1
else
echo "[+] PATCHED — build $DA_PLUGIN_INFO >= $FIXED_DA"
fi
elif [ -d "/usr/local/directadmin" ]; then
echo "[*] DirectAdmin detected but Acronis Backup plugin not found — NOT AFFECTED"
CHECKED=1
fi
fi
# --- Also check for world-writable Acronis files (detection heuristic) ---
echo ""
echo "[*] Scanning for world-writable Acronis-owned files (CWE-276 indicator)..."
WW_FILES=$(find /opt/acronis /usr/lib/acronis /usr/local/cpanel/3rdparty/acronis \
/usr/local/psa/admin/plib/modules/acronis-backup \
/usr/local/directadmin/plugins/acronis-backup \
-type f -perm /o+w 2>/dev/null | head -20 || true)
if [ -n "$WW_FILES" ]; then
echo "[!] WARNING: World-writable files found in Acronis paths:"
echo "$WW_FILES"
VULNERABLE=1
else
echo "[+] No world-writable Acronis files detected."
fi
# --- Final verdict ---
echo ""
if [ "$CHECKED" -eq 0 ]; then
echo "UNKNOWN — No cPanel/WHM, Plesk, or DirectAdmin with Acronis plugin detected on this host."
exit 2
elif [ "$VULNERABLE" -eq 1 ]; then
echo "VULNERABLE — CVE-2026-87886 affects this host. Patch immediately (KEV-listed, actively exploited)."
exit 1
else
echo "PATCHED — Acronis Backup plugin is at or above the fixed build."
exit 0
fi