Back to skill

Security audit

n8n Workflow Templates

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its n8n automation purpose, but it needs Review because its deploy script has a local code-injection flaw and one template exposes an unauthenticated Telegram-forwarding webhook.

Review before installing. Use a minimally privileged n8n API key, patch deploy.sh to pass values as Python arguments instead of embedding them in source, add authentication and validation to webhook templates, and review every workflow's Telegram, social API, backup, and execution-history settings before activation.

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
deploy.sh:25
Finding

Arbitrary Local Code Execution Through Python Source Injection

Content
View full analysis
/dev/null; then echo "Error: Invalid JSON in template file" exit 1 fi # Read and optionally rename workflow WORKFLOW_JSON=$(cat "$TEMPLATE_FILE") if [[ -n "$WORKFLOW_NAME" ]]; then WORKFLOW_JSON=$(echo "$WORKFLOW_JSON" | python3 -c "import json,sys; d=json.load(sys.stdin); d['name']='$WORKFLOW_NAME'; print(json.dumps(d))") fi ``` ### Technical Analysis The script interpolates the attacker-influenced `TEMPLATE_FILE` and `WORKFLOW_NAME` values directly into source code passed to `python3 -c`. Shell quoting does not make these values safe inside the resulting Python program. Single quotes included in either argument become Python syntax and can terminate the intended string literal. An attacker can then append arbitrary Python statements, including calls to `os.system`, `subprocess`, or APIs for reading and transmitting local files. The template filename issue requires the crafted filename to refer to an existing file because the script checks it with `[[ -f "$TEMPLATE_FILE" ]]`. However, an attacker who can create or supply a template file can choose a filename containing Python metacharacters. The workflow-name argument is directly exploitable without that constraint. ### Attack Path 1. An attacker creates a valid workflow JSON file or convinces the user to deploy an attacker-supplied template. 2. The attacker supplies a workflow name containing a single quote and injected Python statements, or provides an existing template whose filename contains a Python injection payload. 3. The script embeds the malicious value in the `python3 -c` source string. 4. The injected statement executes when Python processes the generated program. 5. The malicious code run ...[truncated 1086 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
templates/webhook-to-telegram.json:13
Finding

Unauthenticated Webhook Permits Telegram Message Spoofing and Resource Abuse

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
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (24)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| `rss-monitor.json` | RSS feed monitoring with filtering | Track blogs, news, releases |

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| `health-check.json` | HTTP health checks with alerts | Monitor services, APIs, websites |

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| `health-check.json` | HTTP health checks with alerts | Monitor services, APIs, websites |

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| `health-check.json` | HTTP health checks with alerts | Monitor services, APIs, websites |

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| `social-metrics.json` | Scheduled social media collection | Track followers, engagement |

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 41)May include surrounding context.

Usage:

bash
curl -X POST "$N8N_HOST/webhook/webhook-alert" \
  -H "Content-Type: application/json" \
  -d '{"message":"Server alert","level":"warning","source":"api"}'

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This markdown file includes a delete-workflow.sh command description, but it does not warn that deleting a workflow is destructive and may permanently remove configured automations. For markdown files, destructive behaviors that can affect user data or system integrity should be accompanied by a clear warning.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill clearly instructs users to run shell scripts (bash deploy.sh, bash list-workflows.sh) and declares required binaries, but it does not define any explicit tool scope such as allowed tools or permissions. In an agent setting, this weakens least-privilege controls and can let a skill invoke shell capabilities more broadly than a user may expect, increasing the risk of unintended command execution or unsafe automation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The deployment and workflow-management sections describe authenticated API operations against an n8n instance, including create, update, activate, and deactivate actions, but they do not prominently warn users that these commands will make live remote changes. This can mislead users or upstream agents into treating the skill as informational when it actually performs state-changing operations on infrastructure.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The template descriptions discuss Telegram alerts, RSS monitoring, health checks, social metrics collection, backups, and webhooks, all of which may transmit data to external services or accept inbound data, but the documentation does not clearly warn about those data flows. In practice, users may deploy workflows that send sensitive operational, social, or backup-related information to third parties without understanding the privacy and security implications.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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 · deploy.sh (reported line 40)May include surrounding context.

sh
echo "Deploying workflow to $N8N_URL..."

# Deploy workflow
RESPONSE=$(curl -s -w "\n%{http_code}" \
    -X POST \
    -H "Content-Type: application/json" \
    -H "X-N8N-API-KEY: $API_KEY" \

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The manifest describes workflow templates for data backup, deployment, and workflow management. While backup validation and database dump operations fit that purpose, sending Telegram notifications and consuming TELEGRAM_CHAT_ID introduces a separate alerting/credential-handling capability that is not explicitly justified by the skill's stated scope.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · templates/health-check.json (reported line 23)May include surrounding context.

json
},
    {
      "parameters": {
        "jsCode": "// Define services to check\nconst services = [\n  { name: 'API Server', url: 'https://api.example.com/health', expectedStatus: 200 },\n  { name: 'Website', url: 'https://example.com', expectedStatus: 200 },\n  { name: 'Database', url: 'http://localhost:5432/health', expectedStatus: 200 }\n];\n\nreturn services.map(s => ({ json: s }));"
      },
      "id": "2",
      "name": "Service List",

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The workflow formats and sends health-check alerts to Telegram that include internal service names, full URLs, status codes, and timing data. This creates an external data egress path to a third-party messaging platform, which can expose internal topology and operational details if used in production without explicit disclosure, minimization, or approval.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

This JSON manifest defines activation through a generic schedule trigger that runs every 15 minutes, but it does not document any limiting context, exclusions, or user-controlled invocation boundaries. For manifest files, broad or underspecified activation conditions can cause unintended or opaque skill execution.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This manifest transmits fetched feed content and links to an external Telegram destination, which is a network operation affecting data privacy. There is no visible warning, confirmation, or descriptive note in this file explaining that matched RSS items will be forwarded to Telegram.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · templates/social-metrics.json (reported line 33)May include surrounding context.

json
},
    {
      "parameters": {
        "url": "https://api.twitter.com/2/users/by/username/{{$json.username}}",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · templates/social-metrics.json (reported line 59)May include surrounding context.

json
},
    {
      "parameters": {
        "url": "https://api.linkedin.com/v2/networkSizes/urn:li:organization:{{$json.username}}",
        "options": {}
      },
      "id": "4",

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
85% confidence
Finding

The manifest describes production-ready n8n workflow templates for automations such as social metrics, but this template's reporting logic directly accesses {{$env.TELEGRAM_CHAT_ID}} inside code. Reading environment variables is not an obvious requirement of social-metrics collection itself, especially when the workflow already uses declared Telegram credentials for delivery.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This workflow formats account metrics into a message, pulls a Telegram chat ID from an environment variable, and sends the report through a Telegram bot. The file contains no user-facing notice, confirmation, or descriptive comment warning that collected data will be transmitted to an external messaging service.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The workflow exposes a POST webhook at a fixed path with no visible authentication, signature verification, IP allowlisting, or secret token check before processing attacker-controlled input. In this skill context, that means any external party who can reach the endpoint can trigger Telegram messages, enabling spam, alert spoofing, and possible operational confusion.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The workflow takes incoming webhook fields and forwards them directly to Telegram, causing external transmission of untrusted data without consent, filtering, or sanitization. In a workflow-template skill whose purpose is deployment-ready automation, this is more dangerous because users may deploy it as-is and unintentionally create a data exfiltration path or a channel for phishing/social-engineering messages to operators.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The success message uses new Date().toLocaleString() directly, which implicitly formats output according to the runtime's locale settings rather than a user-selected or documented locale. This can violate the language/locale policy because recipients receive locale-specific formatting without opt-in or explanation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The failure message also calls new Date().toLocaleString(), causing locale-dependent output based on the host environment rather than an explicit user preference. This is a natural-language policy concern because locale presentation is imposed implicitly.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.