Back to skill

Security audit

Accept Task

Security checks for vulnerabilities and agentic risk

Overview

The skill matches its OpenAnt task-management purpose, but it relies on mutable remote CLI execution and authorizes external task commitments without confirmation.

Review this skill before installing. Prefer a version pinned and integrity-checked OpenAnt CLI, and require explicit confirmation before accepting, applying for, team-accepting tasks, or downloading task attachments. Treat downloaded files as untrusted.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:6
Finding
Unpinned Third-Party CLI Is Downloaded and Executed Through npx<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 6-100 **Vulnerability Type**: `T08: Insecure Dependencies` **Risk Level**: Medium The skill repeatedly invokes the third-party `@openant-ai/cli` npm package through `npx` using the mutable `@latest` tag. ### Vulnerable Code ```yaml allowed-tools: ["Bash(npx @openant-ai/cli@latest status*)", "Bash(npx @openant-ai/cli@latest tasks accept *)", "Bash(npx @openant-ai/cli@latest tasks apply *)", "Bash(npx @openant-ai/cli@latest tasks get *)", "Bash(npx @openant-ai/cli@latest files *)"] ``` Representative command instructions include: ```bash npx @openant-ai/cli@latest status --json npx @openant-ai/cli@latest tasks get <taskId> --json npx @openant-ai/cli@latest tasks accept <taskId> --json npx @openant-ai/cli@latest tasks accept <taskId> --team <teamId> --json npx @openant-ai/cli@latest tasks apply <taskId> --message "I have 3 years of Solana auditing experience. Previously audited Marinade Finance and Raydium contracts." --json npx @openant-ai/cli@latest files list <taskId> --json npx @openant-ai/cli@latest files download <taskId> --all --json npx @openant-ai/cli@latest files download <taskId> --all --output ./task-files/ --json npx @openant-ai/cli@latest files url <taskId> --all --json ``` ### Technical Analysis `npx` can retrieve and execute an npm package on demand. The `@latest` tag does not identify an immutable, reviewed artifact: its target can change whenever a new version is published. Consequently, the code executed when the skill is invoked may differ from the code that existed when the skill was audited. The project contains no exact package version, dependency lockfile, integrity hash, or documented provenance-verification mechanism. The affected CLI is used for authenticated OpenAnt operations, remote state changes, and downloading externally supplied files. Any package lifecycle behavior and transitive dependencies execute with the privileges and environment inherited from ...[truncated 1671 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace `@latest` with an exact, reviewed package version, for example: ```bash npx --yes @openant-ai/cli@<reviewed-exact-version> status --json ``` 2. Prefer installing the dependency through a committed lockfile that records package and transitive-dependency integrity metadata. Execute the locked local binary instead of resolving a package dynamically for every invocation. 3. Verify npm package provenance, publisher identity, release signatures or attestations, and integrity information before approving an update. 4. Establish a controlled update process: - Review release changes and dependency-tree differences. - Scan the new artifact and its transitive dependencies. - Test it in an isolated environment. - Update the pinned version and lockfile only after approval. 5. Run the CLI in a sandbox or restricted subprocess with only the filesystem paths, environment variables, credentials, and network destinations required for OpenAnt operations. 6. Avoid exposing unrelated secrets to the CLI process. Supply narrowly scoped OpenAnt credentials at execution time and rotate them if a dependency compromise is suspected. 7. Restrict downloaded files to a dedicated directory and treat their contents as untrusted, particularly before opening or executing them. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (19)

Rp1

Medium
Category
MCP Rug Pull
Confidence
99% confidence
Finding
The repeated manifest match remains a true vulnerability, not a false positive. The skill's context of authenticated marketplace interaction makes unpinned CLI execution particularly dangerous compared with a harmless demo or offline utility.

Vague Triggers

Medium
Confidence
90% confidence
Finding
The description contains very broad invocation phrases such as 'take this task', 'pick up work', and 'volunteer for an assignment', which can match common conversational language and unintentionally trigger a side-effecting skill. Because this skill accepts/applies for real tasks and may download files, accidental invocation can lead to unauthorized external actions.

Rp1

Medium
Category
MCP Rug Pull
Confidence
99% confidence
Finding
Another instance of the same line-level problem: mutable package resolution via `npx ...@latest`. In this context, even a brief compromise of the upstream package could turn ordinary task acceptance or file operations into credential theft or arbitrary command execution.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
The documentation instructs use of `npx @openant-ai/cli@latest status --json`, again normalizing execution of an unpinned remote package. Even in docs, this matters because agents may follow these commands directly and inherit the same supply-chain execution risk.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
The `tasks get` example uses the same mutable `@latest` package reference. Because this command is used before deciding to accept or apply, compromise here could manipulate output, exfiltrate auth material, or mislead downstream agent decisions.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
The direct accept command executes a mutable npm package immediately before performing a state-changing action. That creates a strong chain from supply-chain compromise to unauthorized task acceptance or broader host compromise.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
The application flow also depends on `npx ...@latest`, exposing authenticated application messages and session context to whatever package version is served at runtime. Since this can submit content externally, compromise could leak data or send attacker-crafted applications.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
Polling task status through an unpinned runtime-fetched package is a real vulnerability because it extends trust to mutable third-party code for decision-critical state. An attacker controlling the package could falsify status or perform side effects under the guise of a read operation.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
Listing files with `npx ...@latest` is risky because the command may operate on task identifiers and authenticated file metadata, and can precede downloads of untrusted content. A compromised package could exfiltrate file listings or pivot into arbitrary file-system actions.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
Downloading files via a mutable package reference compounds risk: the package itself may be malicious, and it is handling external content download paths. That combination raises the chance of data exfiltration, malicious overwrite, or staging of further attacks.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
The example for direct accept again relies on `@latest`, carrying the same supply-chain vulnerability into an action that changes remote state. Because the skill encourages immediate execution, there is little opportunity for human review before impact occurs.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
The apply example uses an unpinned package while also sending a free-form message externally. If the package is compromised, it could alter submissions, steal message content, or perform unrelated network actions under agent credentials.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
The team accept example is also vulnerable because it executes mutable package code while specifying a team context, potentially affecting shared organizational assets. This broadens impact from an individual account to team-level task ownership or reputation effects.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
Another `@latest` invocation appears in the examples/flow area and represents the same true vulnerability: runtime trust in a mutable registry artifact. In a skill centered on authenticated marketplace operations, this is more dangerous than a purely local helper command.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
This command reference still depends on `@latest`, so agents following the skill may execute unreviewed code. Since the skill also chains into comments and submissions, compromise here can affect the full task workflow, not just acceptance.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
The referenced CLI remains unpinned at this line, preserving the same package substitution risk. The cumulative repetition across the skill increases exposure because nearly every workflow step depends on mutable code resolution.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
This final occurrence of `@latest` is also a true supply-chain vulnerability. The context makes it especially risky because the skill operationalizes these commands, making exploitation plausible during normal user requests.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
## Autonomy

Accepting and applying for tasks are **routine operations** — execute immediately when the user has asked you to find and take on work. No confirmation needed.

## Next Steps
Confidence
97% confidence
Finding
The 'No confirmation needed' autonomy instruction delegates a state-changing business decision to the agent. In context, the skill can accept work, create applications, and initiate follow-on file access, so a mistaken trigger or adversarial prompt could commit the user or team to external obligations without informed approval.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The markdown explicitly instructs autonomous task acceptance and file downloads without warning about external side effects. This is dangerous because it encourages the agent to perform irreversible or consequential network actions and fetch external content without a confirmation checkpoint, increasing risk of unintended commitments and exposure to malicious attachments.

Static analysis

No suspicious patterns detected.