This is a trapdoor hidden behind the staff-only door, not a broken lock on the front gate
Tenable plugin 237247 maps to CVE-2025-41225, an authenticated command-execution flaw in VMware vCenter Server. Affected ranges are 7.0.x before 7.0 U3v and 8.0.x before 8.0 U3e; Broadcom also extends impact to VMware Cloud Foundation 5.x/4.5.x and several Telco Cloud bundles carrying the same vCenter component. The bug lets a user who can create or modify alarms and use the Run Script action cause command execution on the vCenter host itself.
The vendor's HIGH/8.8 score captures the *impact* correctly but overstates the *reach* for most enterprises. This is not an unauthenticated edge bug and not even a generic low-privilege user bug; it requires a post-auth, role-constrained position inside the virtualization management plane. In real fleets, that sharply shrinks the exposed population, so this lands as a MEDIUM operational priority unless you know those privileges are broadly delegated or already suspect vCenter admin credential theft.
4 steps from start to impact.
Get a vCenter session with alarm-script rights
Run Script action. In practice this is usually obtained through stolen admin credentials, delegated virtualization-ops accounts, or a prior compromise of an admin workstation. Tools likely used here are the normal vSphere UI, API clients, or automation such as govc and pyVmomi.- Authenticated access to vCenter
- Privileges to create/modify alarms
- Privilege to configure or use script-based alarm actions
- Most enterprises keep these rights to a small virtualization-admin group
- MFA, PAM, and jump-host workflows reduce casual credential abuse
- This prerequisite already implies post-initial-access or insider position
Prepare a malicious alarm action
govc alarm.* or direct API/UI operations are the most plausible weaponized paths.- An object scope where the attacker can manage alarms
- Ability to store or reference a script/command payload
- Alarm configuration changes are administrative events and can be audited
- Some shops disable script-based operational workflows entirely
- Change-control noise around vCenter often makes new alarms noticeable
Run Script actions; configuration-drift tools and vCenter event history are the main detection points.Trigger execution on the appliance
- A triggerable alarm condition
- vCenter services able to execute the configured action
- Trigger conditions may need object access or environmental knowledge
- EDR on the appliance or process-monitoring can catch unusual child processes
- Some hardened environments restrict outbound connectivity, limiting post-exec staging
Pivot from vCenter to the wider vSphere estate
- Successful code execution on vCenter
- Useful secrets, tokens, or management connectivity present on the appliance
- Blast radius still depends on how much authority that vCenter instance holds
- Separate admin domains, segmented management networks, and secret rotation can contain follow-on abuse
- Some environments run multiple vCenters, limiting compromise to one management island
The supporting signals.
| In-the-wild status | No public evidence found of active exploitation during this review; not listed in CISA KEV. |
|---|---|
| PoC availability | No solid public PoC repository surfaced in primary search results; Tenable still states Exploit Ease: No known exploits are available. |
| EPSS | Observed via stack.watch: 0.03% EPSS, 7.47th percentile. |
| KEV status | Not present in the CISA Known Exploited Vulnerabilities Catalog. |
| CVSS vector | Broadcom/Tenable baseline is CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H (8.8 HIGH). Notably, the CVE.org record snippet shows a different CNA vector (AV:L ... S:C), so scoring metadata is inconsistent across sources. |
| Affected versions | vCenter 7.0.x < 7.0 U3v and 8.0.x < 8.0 U3e; Broadcom also maps affected bundled vCenter in VCF 5.x/4.5.x and multiple Telco Cloud releases. |
| Fixed versions | Patch to vCenter Server 7.0 U3v or 8.0 U3e; bundled products inherit fixes through Broadcom async patch guidance where applicable. |
| Scanner coverage | Tenable detection is version-only: it explicitly says Nessus did not test exploitability and relied on the product's self-reported version. |
| Exposure data | Current public-search surface still exists for internet-facing vCenter: a live Shodan vcenter query showed 1,307 matches in the indexed snippet. That is not CVE-specific, but it confirms there is still reachable population when admins expose the control plane. |
| Disclosure / credits | Disclosed 2025-05-20 in VMSA-2025-0010; Broadcom credits Oliver Bachtik and Bert De Bruijn. |
noisgate verdict.
The decisive factor is the attacker position requirement: this starts with an authenticated vCenter user who already has a narrow, administrative capability set around alarms and script actions. That makes it a post-initial-access control-plane abuse path, not a broad front-door compromise, even though the eventual impact on a vCenter server can be severe.
Why this verdict
- Requires authenticated remote access first: this is not unauthenticated edge exposure; the attacker must already be inside the vCenter trust boundary.
- Requires a specific privileged role: create/modify alarms plus script-action capability is a much smaller population than 'any vCenter user,' which pushes the vendor's impact-heavy score down.
- vCenter compromise is still consequential: if exploited, the blast radius can be large because vCenter is the virtualization control plane, so this stays above LOW.
Why not higher?
There is no evidence here of mass-reachable exploitation conditions like unauthenticated RCE, broad default exposure, or KEV-listed abuse. Every prerequisite in the chain compounds downward: authenticated access, then specific RBAC, then successful alarm manipulation, then execution and pivot.
Why not lower?
Once the preconditions are met, the payoff is not minor. Command execution on vCenter can expose a management-plane crown jewel, including secrets, automation trust, and administrative reach into clusters and hosts, so treating it as mere backlog hygiene would understate the impact.
What to do — in priority order.
- Trim alarm-script privileges — Review vCenter roles and remove
create/modify alarmsand script-action capability from anyone who does not truly need it. For a MEDIUM finding there is no mitigation SLA — go straight to the 365-day remediation window, but this is the single best hardening move if patching is delayed. - Alert on alarm creation and changes — Send vCenter events for alarm creation, modification, and trigger actions into your SIEM, and specifically flag the use of
Run Script. There is no mitigation SLA for MEDIUM, so deploy this through normal detection engineering, but do not let it slip past the 365-day patch window. - Isolate the management plane — Keep vCenter reachable only from admin jump hosts or management enclaves, not broad user networks and definitely not the open internet. This does not remove the bug, but it constrains who can reach the authenticated entry point while you patch inside the remediation window.
- Put vCenter admins behind PAM — Enforce MFA, session recording, and checkout controls for vCenter administration so stolen standing credentials are harder to use. That helps most at step 1 of the attack path, where real-world abuse would begin.
- A WAF is mostly irrelevant because this is not an unauthenticated HTTP exploit you can reliably signature at the edge; the abuse rides legitimate authenticated admin functionality.
- Perimeter ACLs alone do not solve the problem if the attacker already operates from an approved admin segment or a compromised jump box.
- Vulnerability scanning alone is insufficient because Tenable's check is version-based and does not tell you whether dangerous alarm/script privileges are broadly delegated.
Crowdsourced verification payload.
Run this on the target vCenter Server Appliance, not from your scanner. Invoke it as sudo bash check_cve_2025_41225.sh; root or an account that can execute vpxd -v and read basic system files is recommended. The script checks the installed vCenter build and prints VULNERABLE, PATCHED, or UNKNOWN.
#!/usr/bin/env bash
# check_cve_2025_41225.sh
# Detects likely exposure to CVE-2025-41225 on VMware vCenter Server Appliance.
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
set -u
VC7_FIXED_BUILD=24730281
VC8_FIXED_BUILD=24674346
have_cmd() {
command -v "$1" >/dev/null 2>&1
}
extract_build() {
local src="$1"
echo "$src" | grep -Eo 'build-?[[:space:]]*[0-9]+' | grep -Eo '[0-9]+' | head -n1
}
extract_version() {
local src="$1"
echo "$src" | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?' | head -n1
}
RAW=""
if have_cmd vpxd; then
RAW="$(vpxd -v 2>/dev/null || true)"
fi
if [ -z "$RAW" ] && [ -r /etc/vmware/.buildInfo ]; then
RAW="$(cat /etc/vmware/.buildInfo 2>/dev/null || true)"
fi
if [ -z "$RAW" ]; then
echo "UNKNOWN: could not obtain vCenter version/build from vpxd or /etc/vmware/.buildInfo"
exit 2
fi
BUILD="$(extract_build "$RAW")"
VERSION="$(extract_version "$RAW")"
if [ -z "$VERSION" ]; then
echo "UNKNOWN: could not parse version from: $RAW"
exit 2
fi
MAJOR="$(echo "$VERSION" | cut -d. -f1)"
MINOR="$(echo "$VERSION" | cut -d. -f2)"
PATCH="$(echo "$VERSION" | cut -d. -f3)"
# Only vCenter 7.0.x and 8.0.x are in scope for this advisory.
if [ "$MAJOR" = "7" ] && [ "$MINOR" = "0" ]; then
if [ -z "$BUILD" ]; then
echo "UNKNOWN: detected vCenter $VERSION but no build number was parseable"
exit 2
fi
if [ "$BUILD" -lt "$VC7_FIXED_BUILD" ]; then
echo "VULNERABLE: vCenter $VERSION build $BUILD is older than 7.0 U3v build $VC7_FIXED_BUILD"
exit 1
else
echo "PATCHED: vCenter $VERSION build $BUILD meets or exceeds 7.0 U3v build $VC7_FIXED_BUILD"
exit 0
fi
elif [ "$MAJOR" = "8" ] && [ "$MINOR" = "0" ]; then
if [ -z "$BUILD" ]; then
echo "UNKNOWN: detected vCenter $VERSION but no build number was parseable"
exit 2
fi
if [ "$BUILD" -lt "$VC8_FIXED_BUILD" ]; then
echo "VULNERABLE: vCenter $VERSION build $BUILD is older than 8.0 U3e build $VC8_FIXED_BUILD"
exit 1
else
echo "PATCHED: vCenter $VERSION build $BUILD meets or exceeds 8.0 U3e build $VC8_FIXED_BUILD"
exit 0
fi
else
echo "PATCHED: version $VERSION is outside the affected 7.0.x / 8.0.x ranges checked by this script"
exit 0
fi
If you remember one thing.
Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.