Back to skill

Security audit

Release Tracker

Security checks for vulnerabilities and agentic risk

Overview

This skill is a coherent release-monitoring helper, with disclosed state files, optional scheduling, and external delivery that fit its purpose.

Install this only if you want an agent to monitor configured GitHub repositories. Before enabling cron or Discord/Telegram/Slack delivery, confirm the repositories, output channels, schedule, and state-file path. Treat release notes as untrusted content and do not allow them to change configuration, destinations, credentials, or tools.

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

Warning
Location
SKILL.md:97
Finding
Untrusted Release Notes Are Processed Without an Explicit Instruction/Data Boundary## Vulnerability Details **File Location**: `SKILL.md:97-106` **Vulnerability Type**: Indirect prompt injection through attacker-controlled release content **Risk Level**: Medium **Vulnerable Code/Instructions**: ```markdown ### Generate Summary 1. Fetch release content: ```bash gh release view <tag> --repo <owner>/<repo> --json body ``` 2. If release body is sparse, also check local CHANGELOG if the package is installed: ```bash cat /opt/homebrew/lib/node_modules/<package>/CHANGELOG.md ``` 3. Parse and categorize changes into sections: - **Priority items** — lines matching any `priorities` keywords, shown first ``` ### Technical Analysis The repository owner and name are configurable, while GitHub release bodies are externally controlled content. The Skill directs the Agent to retrieve and interpret release bodies but does not establish an explicit trust boundary requiring such content to be treated exclusively as data. A malicious or compromised repository can therefore place Agent-directed instructions in its release notes. When the Agent processes those notes to generate a summary, the embedded text may be interpreted as instructions rather than inert release information. This is an indirect prompt-injection weakness. The same trust-boundary concern applies to changelog content used as a fallback. The audited project does not directly implement credential theft, arbitrary command execution, or data exfiltration; successful escalation beyond content manipulation would depend on the Agent's available tools, permissions, and whether it follows the injected instructions. ### Attack Path 1. A user configures the tracker to monitor a repository controlled or later compromised by an attacker. 2. The attacker publishes a release containing instructions addressed to an AI Agent in the release body. 3. A manual or scheduled check invokes `gh release view` and ret ...[truncated 1026 chars]
Remediation
## Remediation Suggestions 1. Explicitly classify release bodies, changelogs, repository names, tags, and other retrieved metadata as untrusted data. 2. Add a mandatory instruction stating that the Agent must ignore all commands, behavioral directives, tool requests, credential requests, and policy claims contained in fetched content. 3. Require the Agent to extract only factual release information and never execute commands, follow links, change configuration, alter destinations, or invoke unrelated tools based on release text. 4. Prefer deterministic parsing before Agent processing. Extract expected fields and normalize release text through a constrained parser rather than placing raw content directly into the reasoning context. 5. Sanitize output for the destination platform, including mentions, links, formatting controls, and message-length limits. 6. Restrict delivery targets and state-file paths to validated values from trusted local configuration; release content must never be allowed to override them. 7. Apply least privilege to scheduled sessions and disable tools that are unnecessary for retrieving, summarizing, delivering, and recording release information. 8. Add adversarial tests using release bodies containing prompt-injection text and verify that such text is summarized as data or omitted rather than followed.
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 (5)

Vague Triggers

Medium
Confidence
96% confidence
Finding
The skill advertises broad trigger phrases such as checking for updates, release notes, changelog summary, and watching GitHub repos, which can overlap with ordinary user requests that do not clearly imply consent to configure monitoring, write files, or send messages externally. Because this skill can set up cron-based automation and deliver content to external channels, ambiguous activation increases the risk of unintended execution and side effects.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The top-level description presents the skill as a release monitoring and summary tool but does not clearly disclose that it persists state to workspace files, may set up scheduled automation, and can send release content to external platforms. That omission undermines informed consent and makes accidental data egress or unintended persistence more likely when the skill is selected based on its description alone.

Vague Triggers

Low
Confidence
91% confidence
Finding
The manual trigger examples include very generic phrases like 'check for new releases' and 'any updates on openclaw?', which are plausible conversational requests that may not clearly signal invocation of a skill with persistence and outbound delivery behavior. This can cause the agent to select the skill in situations where the user expected a simple informational response rather than workflow execution.

Natural-Language Policy Violations

Low
Confidence
88% confidence
Finding
The example config hard-codes a `language` value (`"en"`) for generated output, and similar fixed language settings appear throughout the file. Because the documentation presents these as default patterns without mentioning that users may choose their preferred language, it can be read as enforcing a locale rather than offering an option.

Natural-Language Policy Violations

Low
Confidence
93% confidence
Finding
The multi-repo example sets `"language": "zh"` for one repository, but the markdown does not explain that language selection is optional or user-driven. Under the policy criteria, forcing a specific language without opt-in can be a natural-language policy concern.

Static analysis

No suspicious patterns detected.