← Back to Feed CACHED · 2026-09-16 18:27:52 · CACHE_KEY CVE-2026-90894
CVE-2026-90894 · CWE-78 · Disclosed 2026-09-14

Parallels Desktop runs prl_disp_service as root.

ASSESSED — NOISGATE
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

A world-writable socket and a quote character hand root to any unprivileged user sitting at a Mac running Parallels

CVE-2026-90894, dubbed ParaShells by JFrog researcher Yuval Moravchick, is a local privilege escalation in Parallels Desktop for Mac affecting all versions prior to 27.0.0 (confirmed on 26.4.0 build 57513, Apple Silicon). The root-running prl_disp_service daemon listens on a world-writable Unix socket (/var/run/prl_disp_service.socket), performs weak local client authentication, and then constructs a tar command by interpolating user-supplied folder paths into a single string. Qt's QProcess::splitCommand tokenizes that string on spaces and quotes — so a crafted directory name containing a double-quote can close the path argument early and inject --use-compress-program=/tmp/evil, causing macOS tar to execute the attacker's script as root. No admin rights, no running VM, and no Parallels-signed binary are required.

The vendor's CVSS 7.8 HIGH is technically accurate for the local impact — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H correctly reflects that a low-privileged local user achieves full root with no user interaction. Where vendor scoring overstates the *enterprise* risk is reach: Parallels Desktop is a macOS-only Type-2 desktop hypervisor with roughly 0.08% of the overall virtualization market. In a 10,000-host fleet the affected population is typically in the single digits — a handful of developer Macs — not your server estate. The bug is real and reliable, but its blast radius is one macOS workstation at a time.

"Clean local-to-root on any Mac running Parallels — easy chain, narrow installed base"
02 · The Attack Path

4 steps from start to impact.

STEP 01

Local session on a Mac with Parallels installed

The attacker needs code execution as any local user on a macOS host where Parallels Desktop ≤ 26.4.x is installed. The prl_disp_service daemon starts automatically at boot and persists even when no VM is running. No remote vector exists — this is strictly local.
Conditions required:
  • Local shell or code execution on macOS
  • Parallels Desktop installed and prl_disp_service running
Where this breaks in practice:
  • Requires prior compromise of the Mac — phishing, supply-chain implant, insider, or physical access
  • Parallels Desktop is not standard enterprise infrastructure; most fleets have single-digit installs
Detection/coverage: EDR telemetry on macOS (CrowdStrike Falcon, SentinelOne) should flag unusual process ancestry from tar. No Nuclei or Nessus plugin published yet.
STEP 02

Connect to world-writable Unix socket

The attacker opens a connection to /var/run/prl_disp_service.socket. The socket is world-writable by default, so any local user can connect. The attacker then calls PrlSrv_LoginLocal, which accepts peer credentials from any UID — effectively no authentication beyond being local.
Conditions required:
  • Socket exists at /var/run/prl_disp_service.socket
  • No additional authentication beyond local UID
Where this breaks in practice:
  • macOS SIP and TCC do not restrict Unix socket connections from Terminal or unsigned binaries by default
  • An endpoint agent watching socket connections to prl_disp_service would flag this, but few have signatures for it today
STEP 03

Craft malicious directory path with argument injection

The attacker creates a directory tree where the parent folder name contains a double-quote followed by --use-compress-program=/tmp/payload. For example: /tmp/sprl_p_501" --use-compress-program=/tmp/u501 ". They place a shell script at /tmp/u501 containing the desired root-level commands. The script must be executable.
Conditions required:
  • Write access to /tmp (standard for all users)
  • Ability to create directories with special characters (macOS allows this)
Where this breaks in practice:
  • The directory naming trick is well-documented in the JFrog advisory — trivial to replicate
  • No file-integrity or allowlisting tool blocks directory creation in /tmp by default
Detection/coverage: File-integrity monitoring on /tmp for unusual directory names containing quotes or tar flags could catch this.
STEP 04

Trigger PrlSrv_InstallAppliance

The attacker sends the PrlSrv_InstallAppliance command over the socket, specifying the crafted directory as the appliance path. The daemon constructs tar -xf "%1" -C "%2" with the attacker's path, Qt's QProcess::splitCommand tokenizes it, and the injected --use-compress-program flag causes tar to invoke the attacker's script as root.
Conditions required:
  • Authenticated session on prl_disp_service socket (achieved in step 2)
Where this breaks in practice:
  • Single command — exploitation is near-instant once prerequisites are met
  • Parallels v27.0.0 fixes this by using an argv list instead of string interpolation
Detection/coverage: Process-tree monitoring: tar spawning an unexpected child process under prl_disp_service (root) is a strong signal. CrowdStrike and SentinelOne macOS agents should detect anomalous tar --use-compress-program invocations.
03 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationNo known exploitation in the wild as of 2026-09-17. Not listed on CISA KEV.
Proof-of-ConceptJFrog published full technical details and exploitation steps but withheld the one-liner PoC script. Reproduction from the advisory is straightforward for any competent attacker. Researcher: Yuval Moravchick, JFrog Security Research.
EPSS Score0.00148 — bottom ~15th percentile. Reflects the local-only, niche-product nature of the bug.
KEV StatusNot listed. No CISA KEV entry as of 2026-09-17.
CVSS VectorCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H7.8 HIGH. Local attack vector, low complexity, low privilege, no user interaction. Scope unchanged means impact is confined to the host.
Affected VersionsParallels Desktop for Mac all versions prior to 27.0.0. Confirmed on 26.4.0 build 57513 (Apple Silicon / ARM64).
Fixed VersionParallels Desktop 27.0.0 (released early September 2026). No distro backports — Parallels is a commercial macOS-only product with a single update channel.
Scanning / ExposureNot remotely exploitable — no Shodan/Censys/GreyNoise surface. Exposure is limited to the installed base of Parallels Desktop on macOS. Parallels holds ~0.08% of the overall virtualization market per 6sense, with ~2.5M total paying customers (mostly individual/SMB).
Disclosure Date2026-09-14 (public disclosure). JFrog advisory and HelpNetSecurity coverage published 2026-09-16.
Reporting ResearcherYuval Moravchick, JFrog Security Research Team. Vulnerability responsibly disclosed to Alludo (Parallels parent company).
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to HIGH (7.0/10)

The single most decisive factor is the narrow installed base: Parallels Desktop occupies ~0.08% of the virtualization market and is a macOS-only desktop product, meaning the reachable population in a typical 10,000-host enterprise is single-digit machines. The local-only attack vector (requiring prior host compromise) further compounds the limited exposure, but the clean low-privilege-to-root chain with no user interaction keeps this firmly in HIGH territory.

HIGH Vulnerability mechanics and exploitability
HIGH Affected and fixed version ranges
MEDIUM Absence of in-the-wild exploitation
LOW Enterprise installed-base estimates

Why this verdict

  • Low friction, reliable chain: The exploit requires only a low-privileged local user, no admin rights, no running VM, and no signed binary. The four-step chain is deterministic — no race conditions, no ASLR bypass, no heap grooming. This keeps the score in HIGH.
  • Local-only vector with prior-compromise prerequisite: AV:L means the attacker must already have code execution on the Mac. In a well-managed fleet this implies a prior phishing/malware stage or insider threat, which is a compounding friction factor. Adjusted down ~0.4 from vendor score.
  • Narrow installed base: Parallels Desktop is a macOS-only Type-2 hypervisor with ~0.08% virtualization market share. In a 10,000-host enterprise, the affected population is typically 1–10 developer workstations. This sharply limits fleet-wide blast radius. Adjusted down ~0.4 from vendor score.
  • Role multiplier: Parallels Desktop is a *desktop* virtualization tool, not an infrastructure hypervisor. Its canonical deployment role is (a) developer workstation or (b) power-user Mac. It is NOT deployed on domain controllers, CI/CD servers, production database tiers, or network edge. A root compromise of one developer Mac is serious (credential theft, source code access) but the blast radius is host-level, not domain or fleet scale. The high-value-role floor does not apply — Parallels is not canonically a high-value-role component, and <1% of installs occupy any infrastructure-critical role.
  • No remote exploitation, no KEV, no ITW activity: EPSS at 0.00148 and no CISA KEV listing confirm the threat intelligence community does not currently see active exploitation pressure.

Why not higher?

The bug does not cross a network boundary — it requires local access to a macOS host that already has Parallels installed. The affected product is a desktop application, not an infrastructure hypervisor, identity provider, or network appliance. The installed base in a typical enterprise is negligible, so even a reliable root chain cannot produce fleet-scale impact. No active exploitation or KEV listing exists to force an upgrade.

Why not lower?

The chain is exceptionally clean: low-privilege local user to root with no user interaction, no complexity barriers, and near-instant exploitation. JFrog published enough detail for any skilled attacker to reproduce the exploit. If an adversary is already on a developer's Mac (e.g., via supply-chain compromise of a dev tool), this LPE gives them root immediately — enabling credential harvesting, keychain dumping, and lateral movement from a high-value endpoint.

05 · Compensating Control

What to do — in priority order.

  1. Update to Parallels Desktop 27.0.0 immediately — The vendor patch replaces string interpolation with a proper argv list, eliminating the injection entirely. This is the definitive fix. For a HIGH verdict, deploy within 30 days per noisgate mitigation SLA.
  2. Restrict socket permissions on prl_disp_service.socket — Use a LaunchDaemon override or post-install script to chmod 0660 /var/run/prl_disp_service.socket and set group ownership to a dedicated _parallels group. This blocks unprivileged users from connecting. Note: Parallels may reset permissions on restart — monitor with a cron job or configuration management.
  3. Deploy EDR process-tree rules for tar child processes under prl_disp_service — Create a detection rule that alerts when tar spawned by prl_disp_service (or any root process) uses --use-compress-program with a path outside Parallels' own directories. CrowdStrike custom IOA or SentinelOne STAR rule can implement this.
  4. Audit and minimize Parallels Desktop installations fleet-wide — Use your MDM (Jamf, Kandji, Mosyle) to inventory all hosts with Parallels Desktop installed. Remove it from any machine that doesn't have a documented business need. Fewer installs = smaller attack surface.
What doesn't work
  • macOS SIP (System Integrity Protection) does not prevent this attack. SIP protects Apple system binaries but does not restrict third-party root daemons like prl_disp_service from executing attacker-controlled scripts.
  • macOS Gatekeeper / notarization does not help. The exploit uses the system tar binary and a shell script — no unsigned .app bundle is launched, so Gatekeeper is never invoked.
  • Network firewalls / WAF / IDS are irrelevant. The attack is entirely local via a Unix domain socket — no network traffic is generated.
06 · Verification

Crowdsourced verification payload.

Run this script on each macOS host where Parallels Desktop may be installed. No special privileges required — it checks the installed version via defaults read. Example: chmod +x check_parashells.sh && ./check_parashells.sh

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/bin/bash
# check_parashells.sh — CVE-2026-90894 (ParaShells) version checker
# Target: macOS hosts with Parallels Desktop
# Privileges: none (reads plist only)
# Exit codes: 1=VULNERABLE, 0=PATCHED, 2=UNKNOWN

PLIST="/Applications/Parallels Desktop.app/Contents/Info.plist"

if [ ! -f "$PLIST" ]; then
  echo "UNKNOWN — Parallels Desktop not found at standard path"
  exit 2
fi

VERSION=$(defaults read "$PLIST" CFBundleShortVersionString 2>/dev/null)
if [ -z "$VERSION" ]; then
  echo "UNKNOWN — could not read Parallels version from plist"
  exit 2
fi

# Extract major version number
MAJOR=$(echo "$VERSION" | cut -d. -f1)

echo "Detected Parallels Desktop version: $VERSION"

if [ "$MAJOR" -ge 27 ] 2>/dev/null; then
  echo "PATCHED — version $VERSION is >= 27.0.0 (CVE-2026-90894 fixed)"
  exit 0
else
  # Double-check socket exists (confirms daemon is active)
  if [ -S /var/run/prl_disp_service.socket ]; then
    echo "VULNERABLE — version $VERSION < 27.0.0 AND prl_disp_service socket is active"
  else
    echo "VULNERABLE — version $VERSION < 27.0.0 (socket not found but daemon may restart)"
  fi
  exit 1
fi
07 · Bottom Line

If you remember one thing.

TL;DR
Inventory your fleet for Parallels Desktop installations via MDM today. The affected population in most enterprises is small — likely single-digit Macs — but each one is a clean path to root for any local attacker. Per the noisgate mitigation SLA for HIGH findings, deploy compensating controls (socket permission hardening, EDR detection rules) within 30 days. Per the noisgate remediation SLA, push the Parallels Desktop 27.0.0 update to all affected hosts within 180 days, though given the low install count, there is no reason not to patch this week. If any affected Mac is a developer workstation with access to source code repositories, CI/CD credentials, or production secrets, prioritize that host for immediate update — a root compromise there has outsized lateral-movement potential.

Sources

  1. JFrog Security Research Advisory
  2. Help Net Security — ParaShells Coverage
  3. CybersecurityNews — Parallels Desktop Root Execution
  4. GBHackers — Parallels Desktop Flaw
  5. OffSeq Threat Radar — CVE-2026-90894
  6. 6sense — Parallels Virtualization Market Share
  7. Strix AI — CVE-2026-90894 Detail
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.