Back to skill

Security audit

Zapier MCP

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent Zapier integration, but its reference backend accepts arbitrary server-side URLs and exposes a credential-bearing Zapier URL, so it should be reviewed before use.

Review this before installing in a shared or sensitive environment. Restrict who can access the Clawdbot dashboard/RPC methods, validate MCP URLs to the exact Zapier host and path, treat the URL like a password, mask it in UI/logs, and carefully limit which Zapier actions are exposed to the agent.

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)

T09 · Insecure Skill Coding Practices

Error
Location
reference/zapier-backend.ts:108
Finding

Server-Side Request Forgery Through Unrestricted MCP URLs

Content
View full analysis
{ try { const response = await fetch(mcpUrl, { method: "POST", headers: { "Content-Type": "application/json", Accept: "application/json, text/event-stream", }, body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "tools/list", }), }); ``` The save handler only verifies that the supplied string begins with `https://` before passing it to the request function: ```typescript const mcpUrl = typeof params?.mcpUrl === "string" ? params.mcpUrl.trim() : ""; if (!mcpUrl) { respond(true, { success: false, error: "MCP URL is required" }); return; } // Validate URL format if (!mcpUrl.startsWith("https://")) { respond(true, { success: false, error: "MCP URL must use HTTPS" }); return; } // Test the URL first const testResult = await testZapierUrl(mcpUrl); if (!testResult.success) { respond(true, { success: false, error: `Connection test failed: ${testResult.error}` }); return; } ``` The test handler accepts an arbitrary URL without even applying the save handler's prefix check: ```typescript let mcpUrl = typeof params?.mcpUrl === "string" ? params.mcpUrl.trim() : ""; if (!mcpUrl) { // Use saved URL if not provided const status = getZapierConfig(); if (!status.mcpUrl) { respond(true, { success: false, error: "No URL configured" }); return; } mcpUrl = status.mcpUrl; } const testResult = await testZapierUrl(mcpUrl); respond(true, testResult); ``` ### Technical Analysis The integration documentation expects personalized URLs under `https://actions.zapier.com/mcp/...`, but the backend does not enforce that destination. The ...[truncated 2678 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
SKILL.md:23
Finding

Unpinned Global npm Package Installation

Content
View full analysis
Remediation
View remediation
``` 2. Document the expected package publisher, npm registry, package name, and verified version. 3. Prefer a project-local dependency managed by a committed lockfile over a global installation. 4. Use npm provenance and integrity verification where supported. 5. Review package lifecycle scripts and published artifacts before recommending version updates. 6. Establish a controlled dependency-update process that requires security review before changing the documented version. 7. Avoid running npm installation with administrative privileges unless strictly required. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (2)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
87% confidence
Finding

The skill clearly enables external network interaction with Zapier MCP and documents storage of an authenticated MCP URL, but it does not declare any explicit tool scope such as permissions or allowed-tools. That creates a trust-boundary mismatch: an agent or platform may permit broader networked behavior than reviewers expect, increasing the chance of unintended data exfiltration or invocation of external actions across connected third-party apps.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The UI renders the full personalized Zapier MCP URL directly in the page inside a code block, and the surrounding copy treats it like ordinary configuration data rather than a secret-bearing endpoint. If that URL embeds authentication or grants access to the user's Zapier-exposed tools, shoulder-surfing, screen sharing, screenshots, browser extensions, or logs could leak it and enable unauthorized use of connected actions across thousands of downstream apps.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.