Back to skill

Security audit

Vmware Nsx

Security checks across malware telemetry and agentic risk

Overview

This is a coherent VMware NSX management skill, but it can directly change live network infrastructure through MCP tools without the CLI confirmation safeguards.

Install only with a least-privilege NSX service account and review the target environment before enabling writes. Prefer CLI dry-run and confirmation for changes, and only allow MCP write tools when the user has explicitly approved the exact operation and target. Review mcp-config install output before applying it to local agent configs, keep ~/.vmware-nsx/.env locked down, and use a secret manager for production credentials where possible.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (17)

Intent-Code Divergence

Medium
Confidence
97% confidence
Finding
Lines L024-L025 state that vmware-nsx uses the NSX Policy API for all operations and that anything else is not used. However, later capability tables explicitly list multiple `/api/v1/` Management API endpoints for transport nodes, edge clusters, alarms, status, and VM/VIF discovery, and L182 acknowledges this mixed usage. This is an active contradiction in the file's intent/documentation.

Description-Behavior Mismatch

Medium
Confidence
92% confidence
Finding
The manifest positions this skill as focused on NSX networking resources such as segments, gateways, NAT, routing, IP pools, and NSX health. The documented `troubleshoot vm-segment` command takes a vSphere VM display name and finds its attached segment, which introduces a VM-oriented inventory/troubleshooting capability not declared in the manifest and arguably overlaps with VM lifecycle/VM-centric tooling the manifest says should use another skill.

Context-Inappropriate Capability

Medium
Confidence
97% confidence
Finding
The manifest describes a networking-management skill for NSX operations like segment, gateway, NAT, routing, IP pool, and health tasks. The `mcp-config generate / install / list` capability manages local AI-agent integration configuration for tools like goose, cursor, claude-code, and vscode-copilot, which is ancillary developer tooling rather than an NSX management function.

Intent-Code Divergence

Medium
Confidence
94% confidence
Finding
Line L245 states that passwords are only loaded from environment variables via the .env file, implying a strict source and handling model. However, lines L222-L233 describe code that reads plaintext `*_PASSWORD` entries from the `.env` file itself and rewrites that file on first load, which is more than merely loading env vars and creates a contradiction in the documented behavior.

Intent-Code Divergence

Low
Confidence
76% confidence
Finding
The guide states at L347-L354 that the skill has no firewall or security operations, yet the manifest scope explicitly includes creating and managing NAT rules. While NAT is distinct from DFW/security-group management, describing the skill as having no security operations is overly absolute and can mislead users about what network control changes it can make.

Vague Triggers

Medium
Confidence
95% confidence
Finding
The phrase "Always use this skill for ... any NSX/networking/segment task" is broader than the rest of the routing guidance and can collide with generic networking requests. Although exclusions are listed, "any networking task" is still ambiguous enough to cause unintended invocation when the request is not specifically about NSX management.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The document notes that MCP write tools execute directly, while CLI write commands have double confirmation and dry-run support. Because these operations include creating, updating, and deleting NSX networking resources, the skill description should more explicitly warn users that MCP mode can modify infrastructure immediately without interactive confirmation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
| Multi-tool workflows take 30–50s end to end | Prefer the tools that answer a whole question in one call: `get_segment_port_for_vm` finds a VM's segment directly, `get_ip_pool_usage` gives allocation without enumerating pools, and `get_nsx_manager_status` covers cluster health in one round trip. |
| Uses a segment's display name where the Policy API id is required | The identifier rule above. The failure reads as "segment not found", which a model tends to interpret as a missing object rather than a wrong key. |
| Invents or reformats an IP address, prefix length or ASN | The "report exactly as returned" rule. In this skill a plausible-looking wrong prefix is worse than no answer. |
| Proposes a deletion without checking what is attached | Require a `get_segment` port count first. The tool warns, but the model should have looked before it asked. |
| Silently falls back to the default target in a multi-manager estate | Name the target in the request. |

## Reporting results
Confidence
22% confidence
Finding
without checking

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
| **L5** | Auto-remediation from learned pattern | Pattern library only; requires `risk:low` + `reversible:true` + `repeatable:true` | *(roadmap — candidates: stale segment cleanup, transport-node refresh)* |

**Notes**:
- L1/L2 tools are always safe for agents to call without confirmation.
- L3 tools always pass through the `@vmware_tool` decorator: connection check → policy check → audit log → double-confirm. Segment delete additionally verifies port count = 0.
- For DFW/security rules see [vmware-nsx-security](https://github.com/zw008/VMware-NSX-Security).
Confidence
22% confidence
Finding
without confirmation

Credential Access

High
Category
Privilege Escalation
Content
package: vmware-nsx-mgmt
allowed-tools:
  - Bash
metadata: {"openclaw":{"requires":{"env":["VMWARE_NSX_CONFIG"],"bins":["vmware-nsx"],"config":["~/.vmware-nsx/config.yaml","~/.vmware-nsx/.env"]},"optional":{"env":["VMWARE_NSX_<TARGET>_PASSWORD","VMWARE_NSX_<TARGET>_USERNAME","VMWARE_AUDIT_APPROVED_BY"],"bins":["vmware-policy"]},"primaryEnv":"VMWARE_NSX_CONFIG","homepage":"https://github.com/zw008/VMware-NSX","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 NSX Manager target requires a per-target password env var in ~/.vmware-nsx/.env following the pattern VMWARE_NSX_<TARGET_NAME_UPPER>_PASSWORD. Also supports certificate-based auth. Passwords are never logged or echoed.
Confidence
60% confidence
Finding
.env"

Credential Access

High
Category
Privilege Escalation
Content
metadata: {"openclaw":{"requires":{"env":["VMWARE_NSX_CONFIG"],"bins":["vmware-nsx"],"config":["~/.vmware-nsx/config.yaml","~/.vmware-nsx/.env"]},"optional":{"env":["VMWARE_NSX_<TARGET>_PASSWORD","VMWARE_NSX_<TARGET>_USERNAME","VMWARE_AUDIT_APPROVED_BY"],"bins":["vmware-policy"]},"primaryEnv":"VMWARE_NSX_CONFIG","homepage":"https://github.com/zw008/VMware-NSX","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 NSX Manager target requires a per-target password env var in ~/.vmware-nsx/.env following the pattern VMWARE_NSX_<TARGET_NAME_UPPER>_PASSWORD. Also supports certificate-based auth. Passwords are never logged or echoed.
  Destructive operations: Segment/gateway/NAT delete require double confirmation + --dry-run. Segment delete checks for connected ports, gateway delete checks for connected segments.
  VMWARE_AUDIT_APPROVED_BY is an optional attestation recorded in the audit row; it is not a gate and does not carry credentials.
  No webhooks, no outbound network calls, no guest operations. Local only: stdio MCP + NSX Policy API (HTTPS 443).
Confidence
60% confidence
Finding
.env

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
| File | Purpose |
|------|---------|
| `~/.vmware-nsx/config.yaml` | Connection targets and settings |
| `~/.vmware-nsx/.env` | Passwords (chmod 600) |
| `~/.vmware/audit.db` | Operation audit trail (SQLite WAL, via vmware-policy) |

## Combining with Other VMware Skills
Confidence
24% confidence
Finding
chmod 600

Session Persistence

Medium
Category
Rogue Agent
Content
description: >
  Use this skill whenever the user needs to manage VMware NSX networking — segments, gateways, NAT, routing, and IP pools.
  Directly handles: create/manage network segments, configure Tier-0/Tier-1 gateways, set up NAT rules, manage static routes, configure IP pools, check transport node and edge cluster health.
  Always use this skill for "create segment", "set up gateway", "create NAT rule", "check network health", "troubleshoot connectivity", or any NSX/networking/segment task.
  Do NOT use for DFW firewall rules or security groups (use vmware-nsx-security), VM lifecycle (use vmware-aiops), or AVI/ALB load balancing (use vmware-avi).
  For multi-step workflows use vmware-pilot.
installer:
Confidence
60% confidence
Finding
create segment", "set up gateway", "create NAT rule", "check network health", "troubleshoot connectivity", or any NSX/networking/segment task. Do NOT use for DFW firewall rules or security groups (u

Session Persistence

Medium
Category
Rogue Agent
Content
vmware-nsx route delete-static --tier1 <id> --route-id <id> [--dry-run]

# IP pools (write)
vmware-nsx ip-pool create <pool-id> --name <name> --start <ip> --end <ip> --cidr <cidr> [--dry-run]

# Health & Troubleshooting (read-only)
vmware-nsx health alarms [--severity CRITICAL]
Confidence
60% confidence
Finding
create <pool-id> --name <name> --start <ip> --end <ip> --cidr <cidr> [--dry-run] # Health & Troubleshooting (read-only) vmware-nsx health alarms [--severity CRITICAL] vmware-nsx health transport-node

Session Persistence

Medium
Category
Rogue Agent
Content
| "Warn me if a segment still has workloads on it before deleting" | **`delete_segment` checks port count** and warns on connected ports. The check runs server-side, not in the prompt. |
| "Use explicit limits for queries that may return large amounts of data" | **The list envelope.** Every list-returning tool returns `{items, returned, limit, total, truncated, hint}`, so the model reads truncation instead of guessing at it. `truncated: true` means more rows exist — the `hint` says how to re-query. |
| "If a listing came back empty, say so rather than claiming the call failed" | Same envelope. Empty `items` with `truncated: false` means the query genuinely matched nothing — 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. |
| "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. |

---
Confidence
18% confidence
Finding
write is recorded to `~/.vmware

Session Persistence

Medium
Category
Rogue Agent
Content
- Python 3.10+
- NSX-T 3.0+ or NSX 4.x Manager
- Network access to NSX Manager on port 443 (HTTPS)
- NSX Manager credentials with appropriate role (minimum: `network_engineer` for read-only, `enterprise_admin` for write operations)

## Installation
Confidence
18% confidence
Finding
write operations) ## Installation ### Via uv (recommended) ```bash uv tool install vmware-nsx-mgmt ``` ### Via pip ```bash pip install vmware-nsx-mgmt ``` ### From source ```bash git clone http

Session Persistence

Medium
Category
Rogue Agent
Content
### Credential Safety

- Passwords are **only loaded from environment variables** (via `.env` file), never from `config.yaml`
- The `.env` file permissions are checked at startup; a warning is logged if permissions are wider than `600` (owner read/write only)
- The `doctor` command verifies `.env` permissions and reports failures

### Authentication
Confidence
18% confidence
Finding
write only) - The `doctor` command verifies `.env` permissions and reports failures ### Authentication Authentication is username/password against the NSX session-create API. Credentials are form-bo

VirusTotal

64/64 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.