Back to skill

Security audit

Ai Seo Content Engine

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly transparent about its blog automation, but it auto-publishes AI-generated review content using admin credentials and includes unsafe defaults.

Install only after changing the blog endpoint to HTTPS, removing the API-key fallback, scoping the key to the minimum needed permissions, and adding a draft or approval step before publication. Also remove unsupported first-person testing claims unless you provide real review evidence.

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 (1)

T09 · Insecure Skill Coding Practices

Error
Location
workflows/content-gen-workflow.json:87
Finding

Blog Administrator API Key Transmitted over Plaintext HTTP

Content
View full analysis

Vulnerability Details

File Location: workflows/content-gen-workflow.json, lines 87–96
Vulnerability Type: Plaintext transmission of sensitive credentials
Risk Level: High

Vulnerable Code

json
"url": "http://YOUR_BLOG_ADMIN_HOST:3000/api/posts",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ JSON.stringify({ slug: $json.slug, lang: 'en', frontmatter: {}, body: $json.content, raw: true }) }}",
"sendHeaders": true,
"headerParameters": {
  "parameters": [
    {
      "name": "X-API-Key",
      "value": "={{ $env.NICHE_BLOG_ADMIN_API_KEY || 'YOUR_BLOG_ADMIN_API_KEY' }}"
    }
  ]
}

Technical Analysis

The publishing node sends a privileged blog API key in the X-API-Key request header to an endpoint configured with the unencrypted http:// scheme. HTTP provides neither transport confidentiality nor server authenticity.

An attacker with network visibility between the n8n instance and the blog administration service could capture the API key and complete generated article contents. An active network attacker could also modify the request in transit, redirect it, or replay it later.

The expression additionally falls back to the literal value YOUR_BLOG_ADMIN_API_KEY when the environment variable is absent. Although this placeholder is not itself a secret, silently continuing with a fallback rather than failing closed can obscure configuration errors and generate unintended authentication attempts.

Attack Path

  1. An operator replaces the host placeholder but retains the configured HTTP scheme and activates the workflow.
  2. On its scheduled execution, the workflow generates an article and submits it to the blog administration API.
  3. The request includes NICHE_BLOG_ADMIN_API_KEY in the X-API-Key header and the unpublished article in its body.
  4. An attacker positioned on the local network, an intermediate network segment, or another traffic-observation point captures or modifies the plaintext request.
  5. The at ...[truncated 792 chars]
Remediation
View remediation

Remediation Suggestions

  1. Replace the plaintext endpoint with an https:// URL and require a valid TLS certificate.
  2. Keep certificate verification enabled. Do not permit insecure TLS modes or acceptance of untrusted certificates in production.
  3. Add deployment-time validation that rejects endpoints using HTTP, unresolved placeholders, loopback mistakes, or unexpected hosts.
  4. Remove the literal API-key fallback and fail closed when the environment variable is missing, for example:
javascript
={{ (() => {
  if (!$env.NICHE_BLOG_ADMIN_API_KEY) {
    throw new Error('NICHE_BLOG_ADMIN_API_KEY is required');
  }
  return $env.NICHE_BLOG_ADMIN_API_KEY;
})() }}
  1. Restrict the API key to the minimum necessary permissions, preferably create-only access to the required publishing endpoint.
  2. Apply destination allowlisting and network controls so the n8n instance can send publishing requests only to the intended blog service.
  3. Rotate the API key if the workflow has ever operated over an untrusted or plaintext network.
  4. Implement short-lived credentials, request signing, replay protection, and server-side audit logging where supported.
  5. Avoid logging authentication headers or full request objects in workflow execution logs.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • 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 (6)

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The prompt instructs the model to write as if the authors directly tested the products ('we tested', 'in our experience'), but the workflow contains no evidence-gathering, product-testing, or human review step to substantiate those claims. This creates deceptive autogenerated content that can mislead readers and expose the operator to trust, compliance, and affiliate disclosure risks.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill clearly automates generation and publication of AI-written articles on a recurring schedule, but the description does not prominently warn users that activation can push content directly to a live blog without manual review. This creates a meaningful risk of unintended publication, reputational damage, and dissemination of inaccurate or policy-violating content, especially because the workflow is positioned as a turnkey automation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The workflow automatically posts generated content to a blog API and includes an authentication key, with no approval gate, moderation step, or user-facing confirmation. In this context, the risk is not just routine automation: unreviewed LLM output can publish false, policy-violating, or manipulated content directly to a live site using privileged credentials.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The HTTP request pulls an API key from $env.NICHE_BLOG_ADMIN_API_KEY, which is sensitive credential access. In this file there is no accompanying comment, warning, or other user-visible disclosure explaining that the workflow reads environment-stored credentials for publishing.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The workflow sends outbound notification emails via SMTP, but the skill metadata only describes content generation, blog publishing, and Google Sheets tracking. Undisclosed communication capabilities expand the operational scope of the skill and can be abused for silent exfiltration, spam, or covert notifications once deployed.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The workflow description mentions Google Sheets tracking and owner email notifications, but it does not clearly foreground that article metadata will be automatically transmitted to external services after publication. While this is less severe than auto-publishing itself, users may not fully appreciate the data-sharing behavior, which can expose internal workflow details, content plans, or recipient addresses.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.