Back to skill

Security audit

Openclaw 3d Blender MCP

Security checks for vulnerabilities and agentic risk

Overview

This Blender MCP skill is purpose-aligned overall, but it includes hard-coded public ngrok endpoints and unauthenticated remote-control scripts that need careful review before use.

Install only if you are comfortable reviewing and editing the scripts first. Prefer local `localhost:9876`, remove hard-coded ngrok hosts, pin `blender-mcp` to a reviewed version, pass a minimal environment to subprocesses, and do not expose Blender MCP over public ngrok without authentication and encrypted transport.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (2)

T08 · Insecure Dependencies

Warning
Location
scripts/start-server.sh:4
Finding

Unpinned Third-Party Package Is Downloaded and Executed at Runtime

Content
View full analysis
/dev/null; then echo "Error: uvx not found. Please install uv first." exit 1 fi # Start blender-mcp echo "Starting Blender MCP server..." uvx blender-mcp ``` The same mutable dependency is launched from Python scripts: ```python self.process = subprocess.Popen( ['uvx', 'blender-mcp'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, env=env, bufsize=1 ) ``` ### Technical Analysis The project invokes `uvx blender-mcp` without specifying an exact package version, lock file, artifact hash, or verified immutable source. `uvx` can resolve and execute package content obtained from the configured Python package index. Consequently, the code that runs can change independently of this audited project. This is a supply-chain weakness rather than evidence that the current `blender-mcp` package is malicious. Nevertheless, executing a mutable dependency directly creates a time-of-check/time-of-use gap: a package version published or selected after this audit may behave differently from the version expected by the project. The subprocess inherits the calling user's environment through constructs such as: ```python env = { **os.environ, 'BLENDER_HOST': host, 'BLENDER_PORT': str(port), 'DISABLE_TELEMETRY': 'true' } ``` A compromised dependency would therefore execute with the user's operating-system privileges and receive the inherited environment, including variables unrelated to Blender. ### Attack Path 1. An attacker compromises the upst ...[truncated 1227 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/blender_direct.py:12
Finding

Bundled Scripts Default to Unverified Public ngrok Endpoints over Plain TCP

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (69)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill's verification workflow includes active network probing, external process launch, JSON-RPC/MCP command transmission, scene enumeration, and even scene modification by creating a cube. In context, this is not merely informational setup content; it is an operational remote-control path into Blender, with real risk to confidentiality and integrity of project assets.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The skill's verification workflow includes active network probing, external process launch, JSON-RPC/MCP command transmission, scene enumeration, and even scene modification by creating a cube. In context, this is not merely informational setup content; it is an operational remote-control path into Blender, with real risk to confidentiality and integrity of project assets.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The skill's verification workflow includes active network probing, external process launch, JSON-RPC/MCP command transmission, scene enumeration, and even scene modification by creating a cube. In context, this is not merely informational setup content; it is an operational remote-control path into Blender, with real risk to confidentiality and integrity of project assets.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill's verification workflow includes active network probing, external process launch, JSON-RPC/MCP command transmission, scene enumeration, and even scene modification by creating a cube. In context, this is not merely informational setup content; it is an operational remote-control path into Blender, with real risk to confidentiality and integrity of project assets.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The skill's verification workflow includes active network probing, external process launch, JSON-RPC/MCP command transmission, scene enumeration, and even scene modification by creating a cube. In context, this is not merely informational setup content; it is an operational remote-control path into Blender, with real risk to confidentiality and integrity of project assets.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill's verification workflow includes active network probing, external process launch, JSON-RPC/MCP command transmission, scene enumeration, and even scene modification by creating a cube. In context, this is not merely informational setup content; it is an operational remote-control path into Blender, with real risk to confidentiality and integrity of project assets.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The skill's verification workflow includes active network probing, external process launch, JSON-RPC/MCP command transmission, scene enumeration, and even scene modification by creating a cube. In context, this is not merely informational setup content; it is an operational remote-control path into Blender, with real risk to confidentiality and integrity of project assets.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The skill's verification workflow includes active network probing, external process launch, JSON-RPC/MCP command transmission, scene enumeration, and even scene modification by creating a cube. In context, this is not merely informational setup content; it is an operational remote-control path into Blender, with real risk to confidentiality and integrity of project assets.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The skill's verification workflow includes active network probing, external process launch, JSON-RPC/MCP command transmission, scene enumeration, and even scene modification by creating a cube. In context, this is not merely informational setup content; it is an operational remote-control path into Blender, with real risk to confidentiality and integrity of project assets.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The skill's verification workflow includes active network probing, external process launch, JSON-RPC/MCP command transmission, scene enumeration, and even scene modification by creating a cube. In context, this is not merely informational setup content; it is an operational remote-control path into Blender, with real risk to confidentiality and integrity of project assets.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill's verification workflow includes active network probing, external process launch, JSON-RPC/MCP command transmission, scene enumeration, and even scene modification by creating a cube. In context, this is not merely informational setup content; it is an operational remote-control path into Blender, with real risk to confidentiality and integrity of project assets.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The skill's verification workflow includes active network probing, external process launch, JSON-RPC/MCP command transmission, scene enumeration, and even scene modification by creating a cube. In context, this is not merely informational setup content; it is an operational remote-control path into Blender, with real risk to confidentiality and integrity of project assets.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The skill's verification workflow includes active network probing, external process launch, JSON-RPC/MCP command transmission, scene enumeration, and even scene modification by creating a cube. In context, this is not merely informational setup content; it is an operational remote-control path into Blender, with real risk to confidentiality and integrity of project assets.

Content

No source excerpt is available for this finding.

Env Variable Harvesting

High
Category
Data Exfiltration
Confidence
60% confidence
Finding

Code enumerates, copies, or searches environment variables for secrets. Bulk environment access can collect credentials unrelated to the skill's stated purpose.

Content

Scanner excerpt · scripts/get_scene_info.py (reported line 21)May include surrounding context.

python
blender_port = os.environ.get('BLENDER_PORT', '9876')
    
    mcp_path = "blender-mcp"
    env = {
        **os.environ,
        'BLENDER_HOST': blender_host,
        'BLENDER_PORT': blender_port,

Env Variable Harvesting

High
Category
Data Exfiltration
Confidence
60% confidence
Finding

Code enumerates, copies, or searches environment variables for secrets. Bulk environment access can collect credentials unrelated to the skill's stated purpose.

Content

Scanner excerpt · scripts/http_bridge.py (reported line 26)May include surrounding context.

python
def start_mcp(self):
        """Start MCP server process"""
        env = {
            **os.environ,
            'BLENDER_HOST': BLENDER_HOST,
            'BLENDER_PORT': str(BLENDER_PORT),

Env Variable Harvesting

High
Category
Data Exfiltration
Confidence
84% confidence
Finding

The child process inherits the full parent environment via **os.environ, which can expose secrets such as API keys, tokens, or cloud credentials to the spawned MCP server and any downstream components it starts. In a tool designed to connect to local or remote services, broad environment inheritance expands the blast radius if the MCP server, package supply chain, or connected components are compromised.

Content

Scanner excerpt · scripts/mcp_client_full.py (reported line 19)May include surrounding context.

python
def start_mcp(self, host, port):
        """Start MCP server process"""
        env = {
            **os.environ,
            'BLENDER_HOST': host,
            'BLENDER_PORT': str(port),

Env Variable Harvesting

High
Category
Data Exfiltration
Confidence
82% confidence
Finding

The script forwards the entire parent environment to an external process via '{**os.environ, ...}', which can expose secrets such as API keys, tokens, and credentials to the spawned MCP server and anything it invokes. In this skill context, the subprocess then communicates with a remote Blender endpoint configured via ngrok-style host/port defaults, which makes broad environment inheritance more dangerous because the external tool may process or leak inherited secrets beyond the local trust boundary.

Content

Scanner excerpt · scripts/mcp_persistent.py (reported line 21)May include surrounding context.

python
print(f"Target: {HOST}:{PORT}")
print()

env = {**os.environ, 'BLENDER_HOST': HOST, 'BLENDER_PORT': PORT, 'DISABLE_TELEMETRY': 'true'}

# Start MCP server
print("1. Starting MCP server...")

Env Variable Harvesting

High
Category
Data Exfiltration
Confidence
60% confidence
Finding

Code enumerates, copies, or searches environment variables for secrets. Bulk environment access can collect credentials unrelated to the skill's stated purpose.

Content

Scanner excerpt · scripts/test_modal.py (reported line 23)May include surrounding context.

python
HOST = os.getenv('BLENDER_HOST', '8.tcp.ngrok.io')
PORT = os.getenv('BLENDER_PORT', '16325')
env = {**os.environ, 'BLENDER_HOST': HOST, 'BLENDER_PORT': PORT, 'DISABLE_TELEMETRY': 'true'}

print("="*60)
print("🔍 PRUEBA: COMANDOS SIMPLES")

Env Variable Harvesting

High
Category
Data Exfiltration
Confidence
60% confidence
Finding

Code enumerates, copies, or searches environment variables for secrets. Bulk environment access can collect credentials unrelated to the skill's stated purpose.

Content

Scanner excerpt · scripts/test_simple.py (reported line 13)May include surrounding context.

python
HOST = os.getenv('BLENDER_HOST', '8.tcp.ngrok.io')
PORT = os.getenv('BLENDER_PORT', '16325')
env = {**os.environ, 'BLENDER_HOST': HOST, 'BLENDER_PORT': PORT, 'DISABLE_TELEMETRY': 'true'}

print("="*60)
print("🔍 PRUEBA: COMANDOS SIMPLES")

Env Variable Harvesting

High
Category
Data Exfiltration
Confidence
88% confidence
Finding

The script forwards the entire parent environment to an external executable, which can expose sensitive credentials, API tokens, and system-specific secrets to that child process. This is especially relevant here because the executable path may resolve to an unpinned external tool, increasing the blast radius if that tool is compromised or replaced.

Content

Scanner excerpt · scripts/verify_blender_connection.py (reported line 125)May include surrounding context.

python
if not mcp_path:
        mcp_path = "blender-mcp"  # Fallback, let subprocess find it in PATH
    
    env = {
        **os.environ,
        'BLENDER_HOST': blender_host,
        'BLENDER_PORT': blender_port,

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill invokes shell, network, MCP, environment variables, and file access behaviors but does not declare any explicit tool scope or permissions boundary. That makes the skill harder to review, increases the chance of overbroad execution by the host agent, and obscures the real operational risk of remote Blender control.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding

Using uvx blender-mcp without a pinned version allows the installed package to change over time, which creates supply-chain risk and undermines reproducibility. If the upstream package is compromised or introduces unsafe behavior, users may execute that code automatically during setup or runtime.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The remote setup instructions tell users to expose Blender over ngrok TCP without any warning about authentication, access control, project-data exposure, or remote code-execution implications. Because Blender MCP can execute operational commands and potentially Python code, exposing it publicly through ngrok can give unauthorized parties control over the Blender instance and its assets.

Content

No source excerpt is available for this finding.

Internal Network Request

Medium
Category
Server-Side Request Forgery
Confidence
70% confidence
Finding

Code issues a request to a loopback, link-local, or private-range host. This can reach internal services not meant to be exposed and is a common SSRF pivot.

Content

Scanner excerpt · references/common_errors.md (reported line 317)May include surrounding context.

md
import requests

# ngrok expone API local en puerto 4040
resp = requests.get('http://localhost:4040/api/tunnels')
tunnels = resp.json()['tunnels']

for tunnel in tunnels:

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The client is hard-coded to connect to an external ngrok endpoint, which gives a fixed remote host direct access as the command receiver for Blender operations. Because the skill description emphasizes installation/setup but this file implements direct remote connectivity, users may unknowingly send commands and scene-related data to an external service outside their local environment.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.