Back to skill

Security audit

skill n8n by Dr. FIRAS

Security checks for vulnerabilities and agentic risk

Overview

This is a real n8n automation helper, but it can change, activate, run, and delete live workflows with too little built-in confirmation or security scoping.

Install only if you are comfortable giving this skill an n8n API key that can modify your instance. Prefer a staging n8n instance, a narrowly scoped/rotatable key, HTTPS-only N8N_BASE_URL, manual review of generated workflow JSON, and explicit confirmation before deploy, activate, run, or delete actions. Do not use untrusted recipes without reviewing node types, credentials, webhooks, schedules, code nodes, command/SSH/file-transfer nodes, and outbound HTTP destinations.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
n8n_deploy.py:31
Finding

n8n API Credential May Be Disclosed Through Insecure Transport or Cross-Origin Redirects

Content
View full analysis
Any: """Execute an API request and return parsed JSON.""" url = f"{self.base_url}/api/v1/{path.lstrip('/')}" if params: url += "?" + urlencode({k: v for k, v in params.items() if v is not None}) data = json.dumps(body).encode("utf-8") if body else None req = Request(url, data=data, method=method) req.add_header("X-N8N-API-KEY", self.api_key) req.add_header("Accept", "application/json") if data: req.add_header("Content-Type", "application/json") try: with urlopen(req) as resp: raw = resp.read() ``` ### Technical Analysis The deployment client accepts `N8N_BASE_URL` without parsing or validating its scheme, hostname, port, embedded credentials, or destination. It then attaches the privileged `N8N_API_KEY` to every outgoing request through the `X-N8N-API-KEY` header. Consequently, a base URL using plain HTTP sends the API key without transport encryption. Anyone able to observe or alter traffic between the client and the configured endpoint could recover the key. The use of `urllib.request.urlopen()` also enables standard redirect processing. The implementation does not explicitly reject redirect ...[truncated 1799 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
workflow_forge.py:388
Finding

Untrusted Recipes Can Deploy and Activate Arbitrary Privileged n8n Nodes Without a Security Gate

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (17)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The skill promises generation, validation, review, optimization, deployment, activation, monitoring, and diagnostics, but the SKILL.md mainly instructs an agent to invoke external scripts whose real behavior is not verified here. This mismatch is dangerous because users may assume safety checks and limited behavior exist when the underlying tooling may instead perform broader or destructive workflow management such as deletion, execution, or activation on a live n8n instance.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

The skill promises generation, validation, review, optimization, deployment, activation, monitoring, and diagnostics, but the SKILL.md mainly instructs an agent to invoke external scripts whose real behavior is not verified here. This mismatch is dangerous because users may assume safety checks and limited behavior exist when the underlying tooling may instead perform broader or destructive workflow management such as deletion, execution, or activation on a live n8n instance.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill promises generation, validation, review, optimization, deployment, activation, monitoring, and diagnostics, but the SKILL.md mainly instructs an agent to invoke external scripts whose real behavior is not verified here. This mismatch is dangerous because users may assume safety checks and limited behavior exist when the underlying tooling may instead perform broader or destructive workflow management such as deletion, execution, or activation on a live n8n instance.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill advertises one-step building and deployment, and later documents activation, execution, and deletion operations, but does not present a prominent safety warning that these actions can mutate or disrupt a live n8n environment. In this context, missing warnings materially increase the chance of accidental production changes, credential misuse, or destructive actions being taken under user misunderstanding.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The README explicitly promotes one-step workflow deployment to an n8n instance, including optional activation, but does not warn that this can immediately modify or enable automations in a live environment. In a skill designed to generate and deploy workflows from natural-language input, missing safety guidance materially increases the risk of unintended production changes, bad workflow logic being activated, or deployment to the wrong instance.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The quick-start section provides copy-pastable commands for push and activate operations without any adjacent caution that they perform immediate remote deployment and may enable workflows on a live n8n server. Because this skill's purpose is automation and deployment, easy-to-run examples without guardrails can cause accidental production changes or execution of unreviewed generated workflows.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill declares access to sensitive capabilities through metadata and documented scripts (environment secrets, file operations, and networked deployment) but provides no explicit tool scope or permission boundaries. In practice, this increases the blast radius of prompt-triggered actions and makes it easier for the skill to read secrets, modify local files, and make outbound API calls without clear guardrails.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
86% confidence
Finding

The phrase 'auto-deploys' indicates the skill may move from generation to mutation of an external system without a strong confirmation boundary. Autonomous or semi-autonomous deployment is particularly risky in an infrastructure automation context because malformed or hostile workflow definitions could be pushed directly into a production n8n instance.

Content

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

md
description: >
  AI-powered n8n workflow builder and deployer by Dr. FIRAS.
  Generates production-ready n8n workflow JSON from natural language, validates
  structure and logic, then auto-deploys to any n8n instance via REST API.
  Use this skill whenever the user wants to create, build, design, generate,
  deploy, or publish an n8n workflow — even from a plain description like
  "automate my Stripe payments to Slack". Also triggers when the user pastes

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The activation criteria are extremely broad ('create, build, design, generate, deploy, or publish an n8n workflow' and even pasted JSON review), which can cause the skill to trigger on ordinary requests and steer the agent into a high-privilege workflow-management path. Over-broad routing is risky here because the skill has access to deployment-related secrets and can influence or initiate changes to live automation systems.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
86% confidence
Finding

Advertising auto-deployment, activation, and monitoring as covered behavior encourages an agent to make operational decisions beyond mere content generation. In a skill with network access and API credentials, that autonomy increases the risk of unintended changes, noisy executions, or activation of unsafe workflows.

Content

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

md
deploy, or publish an n8n workflow — even from a plain description like
  "automate my Stripe payments to Slack". Also triggers when the user pastes
  n8n workflow JSON for review, debugging, optimization, or redeployment.
  Covers: workflow generation, structural validation, auto-deployment,
  activation, execution monitoring, and performance diagnostics.
  LinkedIn: https://www.linkedin.com/in/doctor-firass/
metadata: {"openclaw":{"emoji":"🚀","requires":{"env":["N8N_API_KEY","N8N_BASE_URL"]},"primaryEnv":"N8N_API_KEY"}}

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

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

md
4. Import instructions: "Open n8n → Workflows → Import from JSON → paste"
5. Credentials the user must configure post-import
6. (If API is configured) an offer to auto-deploy

---

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The CLI deletes workflows immediately when the rm command is invoked, with no confirmation prompt, dry-run mode, or force flag separation. In a tool whose purpose is to generate, deploy, activate, and manage production n8n workflows, this increases the likelihood of accidental destructive actions from user error, malformed automation, or unsafe agent behavior, potentially causing workflow loss and service disruption.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · README.md (reported line 98)May include surrounding context.

md
wf = (Workflow("My Flow")
              .add_webhook_trigger("/incoming", method="POST")
              .add_set_node("Extract", {"email": "={{ $json.email }}"})
              .add_http_request("Call API", url="https://api.example.com/users",
                                method="POST", body_expr='={{ JSON.stringify($json) }}')
              .add_respond_webhook("Reply", status=200)
              .chain_all()

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · workflow_forge.py (reported line 64)May include surrounding context.

python
wf = (Workflow("My Flow")
              .add_webhook_trigger("/incoming", method="POST")
              .add_set_node("Extract", {"email": "={{ $json.email }}"})
              .add_http_request("Call API", url="https://api.example.com/users",
                                method="POST", body_expr='={{ JSON.stringify($json) }}')
              .add_respond_webhook("Reply", status=200)
              .chain_all()

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The CLI supports --deploy and --activate, which can modify a remote n8n instance directly from a local recipe without any built-in confirmation, dry-run default, or explicit safety gate. In the context of an AI-powered workflow builder/deployer, this is dangerous because generated or user-supplied recipes can trigger real workflow publication and activation, leading to unintended automation, data movement, or service disruption on connected n8n infrastructure.

Content

No source excerpt is available for this finding.

Unbounded Resource Access

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill allows unbounded resource consumption (API calls, storage, compute). Without rate limits or quotas, a compromised or misbehaving agent can cause denial-of-service or cost overruns.

Content

Scanner excerpt · workflow_inspector.py (reported line 181)May include surrounding context.

python
# --- Phase 4: Cycle detection ---
    if _has_cycle(node_names, connections):
        report.error("CYCLE_DETECTED", "Workflow graph contains a cycle. n8n may loop infinitely.")

    # --- Phase 5: IF/Switch branch completeness ---
    for nd in nodes:

Unsafe Defaults

Medium
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool defaults are unsafe or overly permissive (e.g. disabled TLS verification, no authentication, world-writable permissions). Unsafe defaults widen the attack surface.

Content

Scanner excerpt · workflow_inspector.py (reported line 233)May include surrounding context.

python
def _check_credentials(ntype: str, name: str, creds: Dict, report: InspectionReport):
    if ntype in _CREDENTIAL_NODES and not creds:
        auth = creds if creds else None
        # httpRequest with auth=none is fine
        if ntype == "n8n-nodes-base.httpRequest":
            return
        report.info("CREDS_HINT", f"Node '{name}' may need credentials after import.", name)

Static analysis

No suspicious patterns detected.