Remediating the Exploited Acronis Backup Plugin Across a Shared-Hosting Fleet

Remediating the Exploited Acronis Backup Plugin Across a Shared-Hosting Fleet

pr0h0
securitycpanelpleskacronisshared-hosting
AI Usage (85%)

Acronis shipped a fix for a vulnerability in its cPanel and Plesk backup plugin, and reporting dated 2026-09-16 states the flaw was exploited in targeted attacks. This post walks through remediating that exposure across a shared-hosting fleet: confirming which servers actually have the Acronis backup plugin installed, patching in the right order, rotating backup storage credentials, and hunting for post-exploitation persistence before declaring a host clean.

If you run hosting, the headline is the least useful part. The operational question underneath it is: which servers have this extension, is it already patched, and did anyone touch it before I patched it? I've cleaned up enough control-panel incidents to have a strong opinion about the order of operations here — and the order is usually the part people get wrong.

What the Acronis cPanel and Plesk Reporting Confirms, and What It Leaves Open

Confirmed by the public reporting

The three reports dated 2026-09-16 agree on a small set of facts:

  • Acronis released a fix for a vulnerability in its backup plugin for cPanel and Plesk.
  • The vulnerability was exploited in targeted attacks, not sprayed opportunistically.
  • The extension runs inside a widely deployed control panel used heavily by small and mid-sized hosts.

That is the entire confirmed surface. It is thin, and it should be treated as thin.

What the reporting does not establish

In the coverage I read, there's no CVE identifier, no published affected version range, no root-cause detail (authentication bypass, path traversal, command injection, and unsafe deserialization are all consistent with the headline and none is confirmed), no indicators of compromise, and no victim count. I am not going to guess at any of them.

⚠️

Absence of a CVE does not mean absence of exposure. A vendor can ship a silent fix, and an extension bug that runs with panel privileges does not need a CVE to ruin a host. Patch on the vendor's word, not on the presence of a public identifier.

Why a Control-Panel Backup Plugin Is a Host-Level Attack Surface

The trust boundary: panel privileges, not tenant privileges

A backup extension is not a blog plugin. It lives inside the control panel process, runs with the panel's privileges, enumerates every tenant's document roots to build archives, can restore over those roots, and stores credentials for whatever remote target the backups go to.

So the trust boundary isn't "one site" or "one account." It's the host. Anyone who gets code execution or a file write through this extension doesn't need to escalate much — the extension already has, by design, the access escalation would have earned them.

Blast radius of an exploited backup extension

ScopeWhat an attacker reachesWhy it matters
Single tenant siteThat site's files and databaseNormal shared-host incident, one customer
Single panel accountAll sites under that account, plus its mail and cronBilling and reputation hit, contained
Entire panel serverEvery account, every document root, panel auth dataFull host rebuild conversation
Fleet-wide, if storage keys are sharedEvery backup target reachable from those keysExfiltration and, worse, destructive restore

That last row is the one people skip. If you provisioned one storage account and reused the key across forty servers because it was convenient, a single compromised extension is a fleet event, not a host event.

Inventorying Which Servers Actually Have the Acronis Extension

Start with "what is installed." Forensics can wait.

cPanel host checks

On the cPanel boxes I've worked with, third-party panel integrations register under /var/cpanel/apps/, with the integration files living under the cPanel tree. Your layout may differ depending on how the extension was packaged, so treat this as a way to find the pattern, not a guaranteed path:

grep -rIl -i acronis /var/cpanel/apps/ 2>/dev/null
find /usr/local/cpanel -maxdepth 4 -iname '*acronis*' 2>/dev/null

The output shape you're looking for is a registration file plus an integration directory:

/var/cpanel/apps/<plugin>.conf
/usr/local/cpanel/whostmgr/docroot/cgi/<plugin>/
/usr/local/cpanel/base/frontend/jupiter/<plugin>
💪

Findings on disk are a hint, not an answer. An uninstall can leave an orphaned directory behind, and a present directory does not prove the feature is enabled. Confirm the plugin's presence and state from WHM's plugin management view before you write it into your exposure list.

Plesk host checks

Plesk is cleaner, because the CLI enumerates extensions directly:

plesk bin extension --list | grep -i acronis
plesk version

Output looks roughly like this — name, version, state:

acronis-backup     <version>    enabled

Use plesk bin extension --info <extension-id> for detail on the exact ID your install uses, and check plesk bin extension --help before assuming a subcommand exists on your build. If the extension is present but unused, plesk bin extension --disable <extension-id> is the fastest way to take it off the attack surface while you schedule the update.

Building the fleet list without SSH on every box

If you have more than a handful of servers, don't start by opening sessions. Start with the asset inventory you already pay for:

  1. Pull the server list from your hosting automation or billing system — anything you sell as a control-panel service must be in there.
  2. Reconcile panel versions from an external signal: the WHM and Plesk login endpoints advertise panel versions, which tells you which servers are even capable of running the affected extension.
  3. Confirm plugin presence at the host level, because external fingerprints won't tell you whether the extension is installed.

The external signal narrows the list. The host-level check is the source of truth. Swap the order and you'll get a tidy spreadsheet and an unpatched server.

Patching the Acronis Backup Plugin Without Breaking Backups

Update the extension first, then the panel, then restart

The sequence matters because a panel package update can and will interrupt the extension's own update channel mid-flight. Update the extension first, then the panel, then restart affected services.

cPanel-shaped sequence:

## after updating the extension through its own update path or WHM
/usr/local/cpanel/scripts/upcp
/usr/local/cpanel/scripts/restartsrv_cpsrvd

Plesk-shaped sequence:

## update the extension, then the panel
plesk bin extension --update <extension-id>
plesk installer update
systemctl restart sw-engine

Verify the flags against your panel version before running anything (plesk installer --help is your friend). I'm showing the shape of the sequence, not a build-independent recipe.

What breaks if you skip a step

ActionIf you skip it
Patch now, outside the maintenance windowExtension stays exploitable for days while a public report circulates
Rotate backup storage credentials after patchingAny key already read from the plugin config still works for the attacker
Check for prior compromise before declaring doneYou patch a host that is already someone else's persistence
Verify the extension actually restartedOld code stays resident; you believe you're fixed and are not
Confirm storage targets still reachable post-rotationYou trade a security fix for silent backup failures

Staged rollout: why you should not patch the whole fleet at once

Patching an entire fleet at once, inside a backup window, is how a security fix becomes an availability incident. Backups are I/O- and network-heavy; extension restarts mid-run produce partial archives, and you find out about partial archives six months later when you actually need to restore. Roll in waves, and check that the first wave's backup jobs completed before starting the second.

Hunting for Post-Exploitation on an Affected Host

Account-level and filesystem tells

The signals that have paid off for me on panel compromises are boring: files that shouldn't exist, users that shouldn't exist, cron that nobody wrote.

## files written into tenant roots in the exposure window
find /home/*/public_html -type f -newermt "2026-09-01" ! -name '*.log' -printf '%T@ %p\n' | sort -n | head -40

## any change inside the panel integration directory
find /usr/local/cpanel -path '*acronis*' -newermt "2026-09-01" -ls 2>/dev/null

## cron entries per account
for f in /var/spool/cron/*; do echo "== $f"; cat "$f"; done

Output shape to look for:

2026-09-03 02:14:51 /home/siteA/public_html/wp-content/uploads/2026/09/x.php
2026-09-03 02:15:09 /home/siteA/public_html/.well-known/index.php

Two files, ninety seconds apart, in directories that have nothing to do with each other, is a pattern. One file is noise. Compare against a baseline if you have one — and if you don't, that gap is the real finding.

Credential exposure in the plugin config

Assume any remote backup target configured in the extension is known to the attacker. Don't print those credentials into a ticket, a chat, or a shell history while you investigate. Enumerate the targets, rotate the keys at the storage provider, update the plugin config with the new values, then run a verification backup. Rotation is mandatory after a suspected compromise, not optional hygiene.

Log sources worth pulling

SourceWhat it tells you
Panel authentication logWhich accounts logged in, from where, when
Panel access log (HTTP)Requests to plugin endpoints, including failed ones
System auth logSSH, sudo, and service-level access
Web access logs per domainExploit attempts and dropped files

The correlation that matters is a panel login followed by a write into a tenant directory that account should not own:

grep -i "SUCCESS" /usr/local/cpanel/logs/login_log | grep "2026-09-0"
grep -i "acronis" /usr/local/cpanel/logs/access_log | tail -50

If you find a login at 02:14:02 and a new PHP file at 02:14:51, you are no longer hypothesizing. You are documenting.

What to Fix First, and What the Typical Response Gets Wrong

Priority order after confirming exposure

  1. Confirm exposure. Does the extension exist on this host? Yes or no, without guessing.
  2. Patch it. Extension, then panel, then restart, then verify.
  3. Rotate backup storage credentials. Immediately after patching, before any deeper investigation.
  4. Investigate. Only on hosts that were exposed.

A fleet-wide forensic sweep of hosts that never installed the extension is wasted effort, and it delays steps 2 and 3 on the hosts that matter. Tier by exposure first.

Where I part ways with the typical response

Treating the vendor patch as remediation is the most common mistake I see. Patching closes the front door; it does not remove the person already inside. If the extension was exploited on a host before you patched, the vulnerability is the least interesting thing about that host.

The second mistake is reading a quiet week after patching as proof of cleanliness. Attackers targeting a panel extension don't need to keep exploiting it — they need one successful run to plant persistence, harvest credentials, and leave. Silence after the patch is not evidence. Log review and a filesystem diff are.

Reducing Blast Radius Before the Next Control-Panel Plugin Bug

Hardening that would have helped here

  • Constrain the extension. If it can run with reduced privileges or be disabled outside backup windows, do that.
  • Restrict egress. The backup extension needs to talk to specific storage endpoints. Little else on that host does. Enforce it, don't document it.
  • One storage account per server. Shared backup keys turn one compromised extension into a fleet-wide credential leak.
  • Integrity monitoring on panel plugin directories. Hash the plugin tree at a known-good state and alert on change. This is the cheapest detection you can buy.
  • Staged rollouts. Already covered, but it belongs on the hardening list too, because availability is part of security.

What this class of bug says about panel extensions

Control panel extensions are supply chain, but most hosts inventory them like they inventory nothing. You know your kernel packages to the version. You probably cannot list your panel extensions without logging in and looking. That asymmetry is the actual vulnerability class here, and it will outlive this specific Acronis bug.

Inventory extensions the way you inventory packages: an owned list, versions, owners, and a review cadence. Then the next headline is a query, not a scramble.

What I Confirmed Versus What I Did Not Test

Confirmed from public reporting: Acronis shipped a fix for a vulnerability in its cPanel and Plesk backup plugin; reporting on 2026-09-16 states the flaw was exploited in targeted attacks. That is the extent of it.

Not tested, or not established: I did not have a lab host running this extension, so every command shown here is the reliable shape of the check rather than a captured transcript from an affected box. The affected version range, the root cause, any CVE identifier, and any indicators of compromise were not in the coverage I read and are unknown to me. Paths and CLI flags vary by panel version — verify before running.

Further Reading

Primary Sources and What I Could Not Verify

  • Acronis security advisory portal — security-advisory.acronis.com. This is the index where the plugin advisory should appear; I could not verify a direct advisory URL for this specific plugin, so I am not inventing one.
  • cPanel documentation — docs.cpanel.net for plugin management and upcp behavior on your version.
  • Plesk documentation — docs.plesk.com for the plesk bin extension CLI reference.

The three reports I relied on are dated 2026-09-16: SecurityWeek, "Acronis Patches Exploited Vulnerability in cPanel Backup Plugin"; The Hacker News, "Acronis cPanel Backup Plugin Vulnerability Exploited in Targeted Attacks"; and CyberSecurityNews, "Acronis Plugin Vulnerability in cPanel and Plesk Exploited in the Wild." I reached them through an aggregator feed, so I'm naming them rather than pasting redirect URLs I cannot guarantee will resolve later. If you need the vendor's own statement, the advisory portal above is the source to check.

Share this post

More posts

Comments