Back to skill

Security audit

Substack Autopilot

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed Substack drafting automation, but it recommends recurring autonomous runs that modify local state, use a browser profile, and send Telegram messages without enough scoping or removal controls.

Install only if you want an unattended weekly Substack drafting job. Configure it to a dedicated workspace path, verify the Telegram recipient and Substack publication, add a finite timeout, keep publication manual, and ensure you know how to disable or delete the cron job before enabling it.

Vulnerability Patterns
  • System PersistenceInstalls backdoors, hooks, services, or scheduled tasks that survive the run
  • 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)

T06 · System Persistence

Warning
Location
SKILL.md:75
Finding
Persistent Weekly Agent Execution Through Cron Scheduling## Vulnerability Details **File Location**: `SKILL.md`, lines 75–84 **Vulnerability Type**: Persistent scheduled agent execution **Risk Level**: Medium ### Vulnerable Code ```markdown ## Cron Job Setup **Recommended schedule:** Weekly, Wednesday UTC 13:00 (Stockholm 14:00) ``` schedule: { "kind": "cron", "expr": "0 13 * * 3", "tz": "UTC" } sessionTarget: "isolated" payload.kind: "agentTurn" timeoutSeconds: 0 ``` ``` ### Technical Analysis The skill recommends creating a recurring cron job whose payload is an autonomous `agentTurn`. Once installed, this scheduled task survives the initial skill invocation and executes every Wednesday without requiring a new direct user request. The configured `timeoutSeconds: 0` may permit the scheduled agent turn to run without an explicit time limit. The referenced cron prompt directs subsequent runs to read and modify workspace files, open an authenticated browser profile, and send Telegram messages. Consequently, accepting the setup extends the skill's operational lifetime and authority beyond the session in which it was configured. This is a persistence mechanism rather than evidence of a concealed startup backdoor. The scheduling behavior is documented and supports the skill's stated automation purpose, but it still crosses a session boundary and should require explicit, informed authorization. Risk increases if the prompt, topic queue, referenced files, browser profile, or notification destination can later be modified by an untrusted party. ### Attack Path 1. A user or privileged agent loads the skill and follows its cron setup recommendation. 2. A recurring scheduled task is registered with an `agentTurn` payload. 3. The initial session ends, but the scheduled task remains installed. 4. On each weekly trigger, the agent reads the topic queue and related content from the configured workspace. 5. If an attacker can alter those inputs or the stored cron prompt, attac ...[truncated 1033 chars]
Remediation
## Remediation Suggestions 1. Require explicit user confirmation immediately before registering any scheduled task, including a clear description of its frequency, permissions, integrations, and removal procedure. 2. Do not create the cron job automatically when the skill is loaded or invoked for ordinary draft generation. 3. Apply a finite execution timeout instead of `timeoutSeconds: 0`, with a limit appropriate for one article-generation run. 4. Run the scheduled task with a dedicated least-privilege identity restricted to the required Substack workspace directory. 5. Disable shell execution, unrestricted filesystem access, credential access, and unrelated network tools for scheduled sessions. 6. Restrict browser automation to the intended Substack origin and retain the existing requirement for human approval before publication. 7. Validate the topic queue and other workspace inputs as untrusted data; do not interpret content from those files as agent instructions. 8. Pin the scheduled prompt or verify its integrity before each run so that unauthorized modifications cannot silently change future behavior. 9. Provide commands or documented controls to list, pause, and permanently remove the cron job. 10. Record each scheduled execution and notify the user when the job is created, changed, triggered, disabled, or deleted. 11. Consider an approval-gated scheduler that requests confirmation before every run rather than permitting unattended recurring execution.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (3)

Vague Triggers

Medium
Confidence
89% confidence
Finding
The trigger list includes broad phrases such as "automate newsletter" and "generate Substack article," which can match ordinary user requests and cause the skill to activate when the user did not explicitly intend to run this automation. Because the skill performs state-changing actions like writing files, marking topics used, opening a browser, and sending Telegram notifications, unintended invocation can lead to accidental workflow execution and unwanted side effects.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The template directs the agent to send Telegram notifications and open an external Substack browser page, but it does not disclose outbound communications or require operator acknowledgment. Even though these actions are part of the workflow, they can expose workspace paths, failure details, or operational metadata to external services and trigger unintended network activity from an automated job.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The template instructs the agent to write a draft file, modify the topic queue by setting a topic's "used" flag, and append to a log file, but it does not include any warning, confirmation requirement, or guardrails around local state changes. In a cron-job context these writes are intended to be automatic, which increases the risk of silent file modification, data corruption, or unintended state advancement if the prompt is misconfigured or the generated content is wrong.

Static analysis

No suspicious patterns detected.