← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
CVE-2026-44962 · CWE-643 · Disclosed 2026-05-29

Plesk contains an XPath injection vulnerability in the APS Application Catalog search functionality

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
01 · The Real Story

This is a loaded trapdoor in the tenant hallway, not a sniper round from the street

CVE-2026-44962 is an XPath injection flaw in Plesk for Linux's APS Application Catalog search path. The vendor says low-privileged authenticated users can turn that bug into arbitrary OS command execution and local privilege escalation. Authoritative advisories point to vulnerable Linux builds prior to 18.0.75.1 and prior to 18.0.76.2, with fixes shipped on February 24-25, 2026; the workaround is to disable APS entirely in panel.ini.

The vendor's 9.9 CRITICAL score is technically understandable because the end-state is server-level compromise, but it overrates the real-world entry cost. This is not unauthenticated internet RCE: the attacker needs a valid Plesk account, the vulnerable APS feature must be reachable, and the component is already deprecated and headed for removal. That combination pushes this down from *internet emergency* to *serious tenant-to-root risk*.

"Big impact, but it is still a post-auth panel bug in a dying feature, not a drop-everything pre-auth internet fire."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Get a valid Plesk foothold

The attacker first needs working credentials for a Plesk account that can log into the control panel, typically over https://host:8443. In practice this means a customer account, reseller account, reused password, stolen session, or already-compromised web-hosting tenant. The likely tooling is just a browser or curl; there is no public weaponized exploit kit widely circulating at the time of writing.
Conditions required:
  • Internet or internal reachability to the Plesk panel
  • Valid low-privileged Plesk credentials
  • Plesk for Linux deployment
Where this breaks in practice:
  • This is authenticated remote, not pre-auth
  • MFA, SSO, IP allowlisting, or admin-VPN-only exposure blocks the first move
  • Many enterprises do not expose customer logins for Plesk at all
Detection/coverage: Good identity controls catch this step better than vuln scanners. Expect login telemetry in Plesk/auth logs, but most external scanners cannot validate exploitability without credentials.
STEP 02

Reach the APS Catalog search surface

After login, the attacker must reach the APS Application Catalog search functionality. Plesk documentation shows customers can see catalog apps by default unless availability is restricted, but the feature can also be globally disabled and is being deprecated. The attacker is effectively targeting an application-management feature inside the panel, not the hosted websites themselves.
Conditions required:
  • APS Catalog feature enabled
  • Account can access the Applications/App Catalog area
Where this breaks in practice:
  • Admins can disable APS with [aps] enabled = off
  • The feature is deprecated and may already be absent or unused in newer estates
  • Some service plans or role setups may hide app access from customers
Detection/coverage: Authenticated DAST or manual testing can find this; unauthenticated perimeter scanners usually will not. Panel configuration review is more reliable than network-only scanning.
STEP 03

Inject into the XPath query

The vulnerable search input is interpolated into XPath expressions without proper neutralization. A crafted search string can alter query behavior and, per the vendor/CNA description, cross the line from data-layer manipulation into arbitrary operating-system command execution. At this point the practical tooling is still lightweight: browser requests, a small script, or curl with crafted parameters.
Conditions required:
  • Vulnerable build installed
  • Search request reaches the vulnerable code path
Where this breaks in practice:
  • No public GitHub or Exploit-DB PoC was readily discoverable during this review
  • The attack path depends on a specific feature path rather than a generic panel endpoint
  • Modern WAFs often do not inspect or protect the Plesk control plane on 8443
Detection/coverage: Detection is weak if you rely on edge signatures alone. Look for unusual APS search requests, anomalous panel activity, and suspicious child processes spawned from Plesk web components.
STEP 04

Turn panel code execution into host compromise

Once command execution lands on the Plesk server, the attacker can pivot from a low-privileged panel identity into host-level control consistent with the advisory's local privilege escalation impact. On multi-tenant hosting infrastructure, that means one tenant or stolen customer login can become a server-wide event affecting many subscriptions and secrets.
Conditions required:
  • Successful command execution
  • Host contains other tenant data, keys, backups, or management secrets
Where this breaks in practice:
  • Blast radius is huge after exploitation, but only for hosts that permit the earlier authenticated feature path
  • EDR, process allowlisting, and hardening can interrupt post-exploitation activity
Detection/coverage: This is where EDR has the best chance: shell spawns, unexpected interpreters, cron changes, service modifications, or outbound beacons from Plesk processes.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo CISA KEV listing and no credible public reporting of active campaigns found as of 2026-06-02.
Proof-of-concept availabilityNo clear public GitHub or Exploit-DB PoC was readily discoverable in web review. That lowers short-term weaponization pressure, though authenticated bugs are easy to reproduce once researchers reverse the fix.
EPSS0.00047 from the provided intel, which is extremely low. Percentile was not independently verified from FIRST during this browse session.
KEV statusNot KEV-listed as of 2026-06-02; treat this as a meaningful downgrade from vendor urgency language.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H — the decisive field is PR:L. This is network-reachable *after login*, not an unauthenticated perimeter break.
Affected versionsPlesk advisories say Plesk for Linux versions prior to 18.0.75.1 and prior to 18.0.76.2 are affected.
Fixed versions / backportsFixed in 18.0.75.1 and 18.0.76.2. No distro backport guidance was published because this is a vendor-managed Plesk product update, not an OS package CVE bulletin.
Exposure realityPlesk's admin interface normally runs on TCP/8443, and Plesk docs explicitly document that port. Bitsight's public footprint page reports 1,445,957 Plesk Obsidian observations over the prior 30 days, which shows a large exposed ecosystem even though that is not a count of vulnerable hosts.
Feature exposure nuancePlesk documentation says customers see Application Catalog apps by default unless availability is restricted, which supports the low-privileged authenticated attack model. But APS Catalog is also deprecated and scheduled for removal, so many estates may already have reduced exposure.
Disclosure / creditPublic disclosure hit NVD on 2026-05-29. Plesk credits Georgii Shutiaev for responsible disclosure.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to HIGH (7.8/10)

The single biggest downgrade factor is the attacker position: this requires authenticated remote access to the Plesk panel, which means it is a post-login control-plane flaw rather than an internet-scale pre-auth takeover. It stays in HIGH because a low-privileged tenant can reportedly convert that foothold into server-level command execution on a widely exposed hosting platform.

HIGH Version/fix metadata and workaround from vendor advisory
MEDIUM Real-world exposure of APS Catalog to low-privileged users across mixed Plesk estates
MEDIUM Current absence of public exploitation or PoC activity

Why this verdict

  • Downgrade: requires authenticated remote access — vendor CVSS starts at 9.9, but PR:L means the attacker already has a valid Plesk foothold. That is a major friction point versus true perimeter RCE.
  • Partial downgrade: feature-specific path — the bug lives in APS Catalog search, not in a universally hit panel route. Estates that disabled APS or never expose app management to customers cut the reachable population.
  • Partial downgrade: deprecated component — APS Catalog is deprecated and scheduled for removal, which materially narrows the modern exposed population compared with core Plesk panel bugs.
  • Upgrade pressure remains: tenant-to-host blast radius — if the vulnerable path is reachable, the stated impact is arbitrary OS command execution and LPE on the server. On shared hosting or MSP estates, one low-privileged account can become a multi-tenant incident.
  • No exploitation pressure today — no KEV listing, no verified public campaign reporting, and a very low EPSS meaningfully reduce immediate emergency handling.

Why not higher?

Because the exploit chain starts with valid credentials. That prerequisite implies either prior compromise, insider access, or tenant access already exists, and each of those sharply narrows the attacker population compared with anonymous internet exploitation. The lack of KEV, low EPSS, no obvious public PoC, and the dying APS feature all keep this out of CRITICAL.

Why not lower?

Because once you are in, the impact is ugly: the vendor says a low-privileged authenticated user can reach arbitrary OS command execution and local privilege escalation. On internet-facing shared-hosting control planes, that is exactly the kind of bug that turns one customer account into full-host compromise, so treating it as routine backlog would be reckless.

05 · Compensating Control

What to do — in priority order.

  1. Disable APS now — If you cannot upgrade immediately, apply the vendor workaround by setting [aps] enabled = off in /usr/local/psa/admin/conf/panel.ini and reload/restart the relevant Plesk services. For a HIGH verdict, deploy this control within 30 days; if the box is multi-tenant or customer-accessible, do it on the next change window, not at quarter-end.
  2. Restrict panel access — Move 8443 behind VPN, SSO proxy, bastion, or IP allowlists so random internet users and commodity credential-stuffing never reach the login page. For a HIGH verdict, implement or tighten this within 30 days, prioritizing customer-exposed shared-hosting nodes first.
  3. Enforce strong auth on Plesk accounts — Turn on MFA where available, rotate stale credentials, and review reseller/customer accounts with broad permissions. This directly attacks the main prerequisite — valid login — and should be completed within 30 days for exposed hosts.
  4. Hunt for suspicious Plesk child processes — Create detections for shells, interpreters, package managers, downloaders, and cron/service changes spawned by Plesk web components. Roll this out within 30 days so you have post-exploitation visibility even if the panel bug is missed at the edge.
  5. Prune customer app-management rights — Review service plans and subscription settings that expose Application Catalog functionality to customers and resellers. Where business use allows, remove or narrow access within 30 days to shrink the reachable population.
What doesn't work
  • A website WAF in front of hosted domains does not reliably help if the vulnerable traffic goes to the Plesk control plane on 8443 rather than customer sites on 80/443.
  • Patching only customer CMS apps like WordPress, Joomla, or Drupal does nothing here; the flaw is in Plesk itself.
  • Counting on low EPSS alone is a trap. EPSS is useful for queue order, not for dismissing a post-auth tenant-to-root bug on exposed hosting infrastructure.
06 · Verification

Crowdsourced verification payload.

Run this on the target Plesk for Linux host as root or with sufficient privileges to read /usr/local/psa/admin/conf/panel.ini and execute Plesk CLI commands. Save it as check-cve-2026-44962.sh, then run sudo bash check-cve-2026-44962.sh; it reports VULNERABLE, PATCHED, or UNKNOWN based on installed Plesk version and whether the vendor workaround disables APS.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check-cve-2026-44962.sh
# Detects likely exposure to CVE-2026-44962 on Plesk for Linux.
# Output: VULNERABLE / PATCHED / UNKNOWN
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -u

PANEL_INI="/usr/local/psa/admin/conf/panel.ini"
VERSION_FILE="/usr/local/psa/version"

get_version() {
  local v=""

  if [[ -r "$VERSION_FILE" ]]; then
    v=$(grep -Eo '[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?' "$VERSION_FILE" | head -n1)
  fi

  if [[ -z "$v" ]] && command -v plesk >/dev/null 2>&1; then
    v=$(plesk version 2>/dev/null | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?' | head -n1)
  fi

  echo "$v"
}

aps_disabled() {
  [[ -r "$PANEL_INI" ]] || return 1
  awk '
    BEGIN { in_aps=0; disabled=0 }
    /^[[:space:]]*\[aps\][[:space:]]*$/ { in_aps=1; next }
    /^[[:space:]]*\[/ && $0 !~ /^[[:space:]]*\[aps\][[:space:]]*$/ { in_aps=0 }
    in_aps && /^[[:space:]]*enabled[[:space:]]*=[[:space:]]*off[[:space:]]*$/ { disabled=1 }
    END { exit(disabled ? 0 : 1) }
  ' "$PANEL_INI"
}

# Compare dotted versions. Returns 0 if $1 < $2
version_lt() {
  local IFS=.
  local i
  local -a a=($1) b=($2)

  for ((i=${#a[@]}; i<4; i++)); do a[i]=0; done
  for ((i=${#b[@]}; i<4; i++)); do b[i]=0; done

  for i in 0 1 2 3; do
    if ((10#${a[i]} < 10#${b[i]})); then return 0; fi
    if ((10#${a[i]} > 10#${b[i]})); then return 1; fi
  done
  return 1
}

version_ge() {
  ! version_lt "$1" "$2"
}

is_vulnerable_version() {
  local v="$1"

  # Advisory-fixed builds: 18.0.75.1 and 18.0.76.2
  # Vulnerable if:
  #  - any version < 18.0.75.1
  #  - 18.0.76.0 or 18.0.76.1
  #  - anything between 18.0.75.1 and 18.0.76.0 is treated as patched branch-wise
  if version_lt "$v" "18.0.75.1"; then
    return 0
  fi

  if version_ge "$v" "18.0.76.0" && version_lt "$v" "18.0.76.2"; then
    return 0
  fi

  return 1
}

main() {
  local version
  version=$(get_version)

  if [[ -z "$version" ]]; then
    echo "UNKNOWN"
    exit 2
  fi

  # Vendor workaround disables the vulnerable feature.
  if aps_disabled; then
    echo "PATCHED"
    exit 0
  fi

  if is_vulnerable_version "$version"; then
    echo "VULNERABLE"
    exit 1
  fi

  # Patched versions include 18.0.75.1+, 18.0.76.2+, and later branches.
  if version_ge "$version" "18.0.75.1"; then
    echo "PATCHED"
    exit 0
  fi

  echo "UNKNOWN"
  exit 2
}

main
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: inventory every internet-reachable Plesk for Linux node, identify whether customer/reseller logins are allowed, and immediately disable APS on any lagging host where upgrades are blocked. For this HIGH reassessment, the noisgate mitigation SLA is within 30 days for compensating controls like APS disablement and panel-access restriction, and the noisgate remediation SLA is within 180 days for installing the vendor-fixed builds; in practice, exposed shared-hosting systems should be handled near the front of that window because this is a tenant-to-root class bug, not ordinary hygiene.

Sources

  1. NVD record for CVE-2026-44962
  2. Plesk advisory for CVE-2026-44962
  3. Plesk Obsidian change log
  4. Canadian Centre for Cyber Security advisory AV26-534
  5. Plesk docs: How Apps Become Available to Your Customers
  6. Plesk docs: Ports Used by Plesk
  7. Plesk KB noting APS Catalog deprecation/removal
  8. Bitsight public Plesk Obsidian footprint page
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.