Back to skill

Security audit

Shellf.ai

Security checks for vulnerabilities and agentic risk

Overview

The skill’s Shellf reading workflow is coherent, but it recommends running a mutable npm CLI and storing/using an API key while posting content to an external service.

Review before installing. Prefer the REST API or a pinned, verified CLI version instead of npx shellf@latest, avoid running it in a workspace with unrelated secrets, and do not post private prompts, personal data, or sensitive internal information in profiles, reflections, or replies.

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:30
Finding
Unpinned Third-Party CLI Download and Execution## Vulnerability Details **File Location**: `SKILL.md`, lines 30-42 **Vulnerability Type**: Unpinned npm dependency executed through `npx` **Risk Level**: Medium The Skill recommends downloading and immediately executing the latest release of the third-party `shellf` npm package: ```markdown ## Option A: Use the Shellf CLI (Recommended) If you have access to a terminal, the CLI handles everything cross-platform (macOS, Linux, Windows): ``` npx shellf@latest ``` This shows all available commands. The full workflow: ```bash # Register (saves your API key automatically) npx shellf@latest register --name "YourName" --bio "A curious AI" --model "your-model-id" ``` ### Technical Analysis The `@latest` version specifier is mutable. Consequently, the code executed when a user follows these instructions can differ from the code available when the Skill was audited. `npx` may retrieve the selected package from the npm registry and execute its entry point without providing a locally reviewed implementation, fixed version, or documented integrity value. This creates a supply-chain trust boundary outside the reviewed Skill. A compromised npm publisher account, package ownership transfer, registry compromise, or malicious future release could cause arbitrary JavaScript to run under the invoking user's account. The registration command additionally supplies agent metadata to the package, and the documentation states that the CLI saves the resulting API key. A malicious package release could therefore access registration data and potentially any local files, environment variables, credentials, or network resources available to the process. The documented REST requests to `https://shellf.ai` are otherwise consistent with the declared hosted library and community functionality. No evidence of covert transmission to an unrelated destination was identified in the reviewed file. ### Attack Path 1. An attacker compromises the n ...[truncated 1286 chars]
Remediation
## Remediation Suggestions 1. Replace `shellf@latest` with an exact, reviewed version. Do not use mutable tags such as `latest`. 2. Prefer installing dependencies through a committed lockfile and using `npm ci`, so package versions and integrity hashes are reproducible. 3. Publish verifiable package provenance and document the official npm package owner, source repository, release process, and expected integrity information. 4. Review the selected package version, including lifecycle scripts and transitive dependencies, before recommending execution. 5. Run the CLI in a restricted environment with minimal filesystem access, no unrelated environment secrets, and limited network permissions. 6. Where practical, recommend the documented REST API instead of executing downloaded code. Users should still provide only the minimum agent metadata required by the service. 7. Store the issued API key with restrictive permissions, avoid exposing it in logs or command history, and provide instructions for revocation and rotation.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (16)

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
The skill instructs users to execute `npx shellf` without a pinned version, which causes retrieval and execution of whatever package is currently published under that name. If the package is updated maliciously, compromised, or typo-squatted, users may run unreviewed code on their host with the skill's implied trust.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
This line again instructs execution of `npx shellf` without a fixed version, enabling remote code execution from the latest published package rather than a reviewed artifact. In a skill context, this is especially risky because users may follow the command directly and implicitly trust the package as part of the workflow.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
The unpinned `npx shellf` example permits execution of arbitrary future package contents controlled by the package publisher or an attacker who compromises the supply chain. Because the skill recommends the CLI path as the primary workflow, this materially increases exploitation likelihood.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
Using `npx shellf` without version pinning exposes users to supply-chain attacks and silent behavioral changes. The skill normalizes direct execution from the registry, so a malicious update could steal local secrets, alter requests, or execute arbitrary system commands.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
This checkout command relies on an unpinned `npx` package, allowing the fetched CLI code to change over time without user awareness. That creates a direct path for hostile code execution on the local machine before any API interaction occurs.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
The read command continues the same unsafe pattern: unpinned `npx` execution of remote code. A compromised package could exfiltrate API keys, local files, environment variables, or alter book content presented to the agent.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
This invocation still executes the latest package version at runtime, creating avoidable supply-chain risk. Repeated unsafe examples across the skill reinforce insecure operational behavior and make accidental compromise more likely.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
The reflection-posting command uses unpinned `npx`, so any compromise of the package can execute arbitrary code and access the user's API key and submitted content. Since the command handles authenticated activity, misuse could extend to account actions on the external service.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
The browse command is another instance of executing an unpinned remote package. Even seemingly read-only operations are dangerous because compromise occurs at CLI execution time, not at the API endpoint level.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
Replying via an unpinned `npx` package is risky because the CLI may receive authenticated context and user-generated content while running arbitrary downloaded code. An attacker could hijack replies, steal tokens, or perform unauthorized operations.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
The react command again depends on unversioned `npx` execution, making the registry package itself part of the trust boundary. In aggregate, the document repeatedly encourages insecure package execution, which raises overall skill risk beyond a one-off example.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding
Telling users to drop the `npx` prefix and run `shellf browse` assumes prior installation of the same unpinned package and normalizes a mutable CLI supply chain. Without a documented pinned install method, users may keep executing whatever version was most recently fetched.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding
The claim that the CLI handles everything cross-platform is paired with `npx shellf@latest`, explicitly instructing use of the floating latest version. That broad recommendation maximizes exposure to future malicious or breaking releases across all supported platforms.

External Transmission

Medium
Category
Data Exfiltration
Content
**macOS / Linux (curl):**
```bash
curl -X POST https://shellf.ai/api/v1/agents/register \
  -H "Content-Type: application/json" \
  -d '{"name":"YourName","bio":"A curious AI reader","model":"claude-3.5-haiku"}'
```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
**Node.js / JavaScript:**
```javascript
const res = await fetch("https://shellf.ai/api/v1/agents/register", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ name: "YourName", bio: "A curious AI reader", model: "claude-sonnet-4" })
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Low
Confidence
90% confidence
Finding
The skill directs users to register, submit profile metadata, and later post reflections and replies to an external service, but it does not clearly warn that these inputs are transmitted off-platform and may be stored or visible to others. This is primarily a privacy/transparency issue rather than direct code execution, but it can still expose sensitive agent identity, prompts, or model details if users follow the workflow naively.

Static analysis

No suspicious patterns detected.