Back to skill

Security audit

vmware-aiops

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a legitimate VMware operations skill, but it gives agents broad power to change infrastructure and run commands inside VMs, so it belongs in Review before production use.

Install only if you intentionally want an agent to administer VMware. Use a dedicated least-privilege vCenter/ESXi account, prefer read-only or --expose read unless writes are required, configure deny rules for production, avoid passing root or admin guest credentials, and do not expose the HTTPS MCP endpoint without strict tokens and role separation.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
Findings (46)

Credential Access

High
Category
Privilege Escalation
Confidence
89% confidence
Finding

The skill relies on credentials provided via environment variables and a local .env file, and it also states that guest-operation passwords are passed as MCP tool arguments visible to the agent. This creates meaningful credential-exposure risk through local secret storage, agent visibility, prompt leakage, logs, crashes, or downstream tool misuse.

Content

Scanner excerpt · SKILL.md (reported line 18)May include surrounding context.

md
metadata: {"openclaw":{"requires":{"anyBins":["vmware-aiops","uvx"]},"optional":{"env":["VMWARE_AIOPS_CONFIG","VMWARE_TARGET_PASSWORD","VMWARE_<TARGET>_USERNAME","SLACK_WEBHOOK_URL","DISCORD_WEBHOOK_URL","VMWARE_AUDIT_APPROVED_BY"],"bins":["vmware-policy"]},"homepage":"https://github.com/vmware-skills/VMware-AIops","emoji":"🖥️","os":["macos","linux"]}}
compatibility: >
  vmware-policy auto-installed as Python dependency (provides @vmware_tool decorator and audit logging). All write operations audited to ~/.vmware/audit.db.
  Credentials: Each vCenter/ESXi target requires a per-target password env var in ~/.vmware-aiops/.env following the pattern VMWARE_<TARGET_NAME_UPPER>_PASSWORD. Passwords are never logged or echoed.
  Destructive operations: All write tools require explicit parameters and pass through the @vmware_tool decorator (policy check + audit + sanitize). Every MCP write tool annotated destructive (23 of 43: power-off, delete, migrate, snapshot revert/delete, guest exec/upload/provision, cluster delete/remove-host, TTL, Clean Slate, plan apply/rollback, host-network, DRS and alarm reset) takes one confirm argument whose default returns a no-write blast-radius preview (HLD section 7); confirm=True is refused, and audited as a failure, on a blocker or an unreadable measurement, and delete_vm also requires the preview's acknowledgement echoed back and still matching; the other 20 write tools (create, clone, deploy, power-on, reconfigure) act on the first call. The enforcement boundary is the RBAC of the vCenter/ESXi account the server connects with, so run it under a dedicated least-privilege service account (a read-only role makes it read-only). Optional deny rules in ~/.vmware/rules.yaml are checked before every MCP call and remote CLI command; the shipped baseline denies nothing. CLI destructive commands additionally require double confirmation and most CLI writes support --dry-run; neither applies to MCP calls.
  Guest operations: vm_name and command are
...[truncated 25 chars]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 54)May include surrounding context.

md
Read before connecting an agent. Per-tool inventory: `references/capabilities.md`.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 219)May include surrounding context.

md
Read before connecting an agent. Per-tool inventory: `references/capabilities.md`.

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · references/capabilities.md (reported line 24)May include surrounding context.

md
## What gates a write

<!-- gate-inventory: the counts and names below are checked against the live
     tool registry by tests/eval/regression/test_documented_gates_match_the_registry.py.
     Adding a write tool makes them wrong and turns that test red. -->

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
97% confidence
Finding

This duplicate finding reflects the same underlying issue: unrestricted guest command execution and provisioning steps can perform destructive actions inside VMs with whatever privileges the supplied guest account has. Because this is a VMware operations skill, the feature materially increases attack surface and enables immediate damage across production systems if misused by an agent or attacker.

Content

Scanner excerpt · references/capabilities.md (reported line 77)May include surrounding context.

md
command as it would run — as do `run_vm_guest_command_with_output`, `upload_vm_guest_file` and
`provision_vm_guest`. But the preview describes the command; it does not judge
it. Nothing in this skill bounds what the command may be once `confirm=True`:
`rm -rf /` is a well-formed argument, and the same is true of the `exec` steps
inside `provision_vm_guest`.

Two things follow. First, the guest credentials are a second, separate

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
97% confidence
Finding

This duplicate finding reflects the same underlying issue: unrestricted guest command execution and provisioning steps can perform destructive actions inside VMs with whatever privileges the supplied guest account has. Because this is a VMware operations skill, the feature materially increases attack surface and enables immediate damage across production systems if misused by an agent or attacker.

Content

Scanner excerpt · references/capabilities.md (reported line 77)May include surrounding context.

md
command as it would run — as do `run_vm_guest_command_with_output`, `upload_vm_guest_file` and
`provision_vm_guest`. But the preview describes the command; it does not judge
it. Nothing in this skill bounds what the command may be once `confirm=True`:
`rm -rf /` is a well-formed argument, and the same is true of the `exec` steps
inside `provision_vm_guest`.

Two things follow. First, the guest credentials are a second, separate

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
70% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · references/cli-reference.md (reported line 11)May include surrounding context.

bash
# Diagnostics
vmware-aiops doctor [--skip-auth]   # --skip-auth only skips doctor's own vSphere login check; no other command has it
vmware-aiops access-info [--tool <mcp-tool>] [--target <name>]   # account in use + its privileges per MCP tool (JSON; root folder only)

# MCP Config Generator

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · SKILL.md (reported line 308)May include surrounding context.

3. Configure

mkdir -p ~/.vmware-aiops vmware-aiops init # generates config.yaml and .env templates chmod 600 ~/.vmware-aiops/.env

Edit ~/.vmware-aiops/config.yaml and .env with your target details

text

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · SKILL.md (reported line 309)May include surrounding context.

3. Configure

mkdir -p ~/.vmware-aiops vmware-aiops init # generates config.yaml and .env templates chmod 600 ~/.vmware-aiops/.env

Edit ~/.vmware-aiops/config.yaml and .env with your target details

text

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/setup-guide.md (reported line 45)May include surrounding context.

3. Configure

mkdir -p ~/.vmware-aiops vmware-aiops init # generates config.yaml and .env templates chmod 600 ~/.vmware-aiops/.env

Edit ~/.vmware-aiops/config.yaml and .env with your target details

text

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/setup-guide.md (reported line 46)May include surrounding context.

3. Configure

mkdir -p ~/.vmware-aiops vmware-aiops init # generates config.yaml and .env templates chmod 600 ~/.vmware-aiops/.env

Edit ~/.vmware-aiops/config.yaml and .env with your target details

text

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/setup-guide.md (reported line 47)May include surrounding context.

3. Configure

mkdir -p ~/.vmware-aiops vmware-aiops init # generates config.yaml and .env templates chmod 600 ~/.vmware-aiops/.env

Edit ~/.vmware-aiops/config.yaml and .env with your target details

text

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Content

Scanner excerpt · references/setup-guide.md (reported line 161)May include surrounding context.

MCP Mode (Optional)

For Claude Code / Cursor users who prefer structured tool calls, add to ~/.claude/settings.json:

json
{

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest frames this as the entry point for VM operations plus cluster management and investigation, while the SKILL file adds host-level network administration such as creating dvSwitch portgroups and adding/removing/tagging VMkernel interfaces. Those are infrastructure networking changes that go beyond the manifest's stated VM-management focus and blur boundaries with other VMware domain skills.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The manifest explicitly mentions running commands inside VMs, but the full documented capability set includes uploading and downloading files and provisioning guests, which enables broad filesystem access and software installation inside guest OSes. That is a materially broader capability than command execution alone and is not clearly justified by the stated scope in the manifest description.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The activation guidance is broad enough to route many common VMware phrases into a high-privilege skill that can perform destructive operations, guest exec, and network changes. In an agentic environment, overbroad routing increases the chance that ambiguous user requests are handled by a write-capable skill instead of a safer read-only one.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The manifest explicitly routes general read-only queries to vmware-monitor, yet this skill advertises and exposes multiple read-only triage and investigation tools, including cluster health summary and VM/host/datastore drill-downs. Although some are delegated to vmware-monitor, this still means the skill itself serves as an entry point for read-oriented monitoring workflows, which conflicts with the stated exclusion.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The top-level manifest instruction says not to use this skill for general read-only queries and to use vmware-monitor instead. Later sections instruct users to start cluster health triage and object-centered investigations from this skill as the conversational entry point, which actively contradicts the earlier routing guidance rather than merely omitting detail.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · SKILL.md (reported line 17)May include surrounding context.

md
- Bash
metadata: {"openclaw":{"requires":{"anyBins":["vmware-aiops","uvx"]},"optional":{"env":["VMWARE_AIOPS_CONFIG","VMWARE_TARGET_PASSWORD","VMWARE_<TARGET>_USERNAME","SLACK_WEBHOOK_URL","DISCORD_WEBHOOK_URL","VMWARE_AUDIT_APPROVED_BY"],"bins":["vmware-policy"]},"homepage":"https://github.com/vmware-skills/VMware-AIops","emoji":"🖥️","os":["macos","linux"]}}
compatibility: >
  vmware-policy auto-installed as Python dependency (provides @vmware_tool decorator and audit logging). All write operations audited to ~/.vmware/audit.db.
  Credentials: Each vCenter/ESXi target requires a per-target password env var in ~/.vmware-aiops/.env following the pattern VMWARE_<TARGET_NAME_UPPER>_PASSWORD. Passwords are never logged or echoed.
  Destructive operations: All write tools require explicit parameters and pass through the @vmware_tool decorator (policy check + audit + sanitize). Every MCP write tool annotated destructive (23 of 43: power-off, delete, migrate, snapshot revert/delete, guest exec/upload/provision, cluster delete/remove-host, TTL, Clean Slate, plan apply/rollback, host-network, DRS and alarm reset) takes one confirm argument whose default returns a no-write blast-radius preview (HLD section 7); confirm=True is refused, and audited as a failure, on a blocker or an unreadable measurement, and delete_vm also requires the preview's acknowledgement echoed back and still matching; the other 20 write tools (create, clone, deploy, power-on, reconfigure) act on the first call. The enforcement boundary is the RBAC of the vCenter/ESXi account the server connects with, so run it under a dedicated least-privilege service account (a read-only role makes it read-only). Optional deny rules in ~/.vmware/rules.yaml are checked before every MCP call and remote CLI command; the shipped baseline denies nothing. CLI destructive commands additionally require double confirmation and most CLI writes support --dry-run; neither applies to MCP calls.
  Guest operations: vm_name and comm
...[truncated 25 chars]

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · SKILL.md (reported line 56)May include surrounding context.

md
Read before connecting an agent. Per-tool inventory: `references/capabilities.md`.

- **MCP gates default to a no-write preview.** 23 write tools — every destructive one — return their blast radius unless `confirm=True`, which is refused on a blocker or unreadable measurement; `delete_vm` also needs `acknowledge_blast_radius` echoing the preview. The other 20 (create, clone, deploy, power-on, reconfigure) act on the first call.
- **The enforcement boundary is vCenter/ESXi RBAC**: an agent can do whatever the configured account can. Use a dedicated, least-privilege service account scoped to what the agent may change (a read-only role makes the skill read-only). Store its password in `~/.vmware-aiops/.env` (0600) or a secret manager (`VMWARE_<TARGET>_PASSWORD`).
- **CLI only**: destructive commands require double confirmation; most CLI writes take `--dry-run`. Neither applies to MCP.
- **Policy**: deny rules and a maintenance window in `~/.vmware/rules.yaml` are checked before every MCP and remote CLI call (e.g. deny writes to `environment: production` targets). The shipped baseline denies nothing. An in-process guardrail, not a substitute for RBAC.

Unrestricted Tool Access

Medium
Category
Excessive Agency
Confidence
96% confidence
Finding

The skill explicitly supports running arbitrary in-guest commands and writing files inside VMs, with the command described as unbounded and constrained only by supplied guest credentials. That creates a powerful remote-execution surface that an agent could misuse for destructive actions, malware staging, lateral movement, or data manipulation inside guest systems.

Content

Scanner excerpt · SKILL.md (reported line 61)May include surrounding context.

md
- **CLI only**: destructive commands require double confirmation; most CLI writes take `--dry-run`. Neither applies to MCP.
- **Policy**: deny rules and a maintenance window in `~/.vmware/rules.yaml` are checked before every MCP and remote CLI call (e.g. deny writes to `environment: production` targets). The shipped baseline denies nothing. An in-process guardrail, not a substitute for RBAC.
- **Audit**: every MCP call is recorded in `~/.vmware/audit.db`, credentials redacted (`vmware-audit log --last 20`). Best-effort: a failed audit write warns, never blocks.
- **Guest ops** run any command or file write the guest account allows — a read-only vCenter role does not limit this. `username` is required (no default account) and over MCP the password is a tool argument the agent sees; pass a minimal guest account. `upload_vm_guest_file` reads any local file the server can read.

## Quick Install

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · SKILL.md (reported line 259)May include surrounding context.

md
vmware-aiops cluster info <name>
vmware-aiops cluster drs-rules <name>                                     # list DRS rules
vmware-aiops cluster drs-rule-set <name> --rule <r> --enable|--disable [--dry-run]
vmware-aiops cluster drs-rule-create <name> --rule <r> --type antiAffinity --vm <vm1> --vm <vm2> [--disabled] [--dry-run]
vmware-aiops cluster drs-rule-delete <name> --rule <r> [--dry-run]        # VM-VM only; double confirm

# Datastore

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · references/agent-guardrails.md (reported line 41)May include surrounding context.

md
|---|---|
| "Use explicit limits for queries that may return large amounts of data" | **The list envelope.** `browse_datastore`, `list_vcenter_alarms`, `list_vm_plans`, `list_vm_snapshots` and `list_vm_ttls` return `{items, returned, limit, total, truncated, hint}`, so the model reads truncation instead of guessing at it. |
| "If a listing came back empty, say so rather than claiming the call failed" | Same envelope. Empty `items` with `truncated: false` means checked-and-none — a stated result, not a silence the model has to interpret. |
| "Log every state change you make" | **The `@vmware_tool` decorator.** Every write is recorded to `~/.vmware/audit.db` before the model sees the result, and policy rules are evaluated ahead of execution. Neither depends on the model cooperating. |
| "Block state-changing writes against a production target" | **Policy.** An opt-in environment-scoped `deny` rule in `~/.vmware/rules.yaml` matches a target's `environment:` label and refuses matching writes before execution. |

---

Session Persistence

Medium
Category
Rogue Agent
Confidence
90% confidence
Finding

The audit trail is described as best-effort and non-blocking: if the audit store fails, operations still proceed. For a powerful infrastructure-management skill, this weakens non-repudiation and incident response because destructive actions may execute without reliable forensic records, especially when combined with guest command execution and VM deletion capabilities.

Content

Scanner excerpt · references/capabilities.md (reported line 41)May include surrounding context.

md
and point the skill's `.env` at that account — one decision, enforced where it
is made. What happened is then recoverable from `~/.vmware/audit.db`, which
records every MCP call (credentials redacted) before the caller sees a result;
the write is best-effort, so a failing audit store warns on stderr rather than
blocking the call. The skill's previews and refusals stop an agent acting blind;
they do not stop one determined to delete a VM the account is allowed to delete.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
83% confidence
Finding

The document explicitly states that MCP tools have no interactive confirmation step, and elsewhere notes that many high-impact write tools can execute when called with parameters such as confirm=True, while 20 write tools are entirely ungated and act on first call. In an agent context managing VMware infrastructure, that means an autonomous or compromised caller can perform destructive actions without a human approval boundary, increasing the risk of accidental or malicious VM, cluster, and guest OS changes.

Content

Scanner excerpt · references/capabilities.md (reported line 334)May include surrounding context.

md
| Feature | Details |
|---------|---------|
| Plan → Confirm → Execute → Log | CLI workflow: show current state, confirm changes, execute, audit log |
| Double Confirmation (**CLI only**) | CLI destructive and deploy commands (`vm` power-off, delete, reconfigure, snapshot-revert/delete, clone, migrate, set-ttl, clean-slate, guest-exec, guest-upload; `deploy` ova, template, linked-clone, batch, batch-clone, mark-template; `cluster` delete, add-host, remove-host, configure, drs-rule-set/create/delete; `alarm reset`) require 2 sequential prompts and take no bypass flag. **The MCP tools have no confirmation step at all** — see [What gates a write](#what-gates-a-write) |
| Rejection Logging | Declined CLI confirmations are recorded in the audit trail for security review |
| Audit Trail | Every MCP call and every CLI command that reaches vCenter logged to `~/.vmware/audit.db` (SQLite WAL, via vmware-policy; parameters, result, status, caller — credentials redacted). Most CLI writes also append to `~/.vmware-aiops/audit.log`, with before/after state where the command captures it (power, delete, reconfigure, snapshot-revert, clone, migrate, clean-slate, cluster delete/configure, DRS rule delete) |
| Input Validation | VM name length/format, CPU (1-128), memory (128-1048576 MB), disk (1-65536 GB) validated before execution |

Static analysis

No suspicious patterns detected.