Back to skill

Security audit

crowntowncompost-mcp

Security checks for vulnerabilities and agentic risk

Overview

Review is recommended because the skill includes consequential account changes and saves login sessions without enforcing private file permissions.

Before use, require a specific user request for every account change or message and replace example values with the intended values while preserving existing preferences. Store cookies in a private directory with owner-only permissions, avoid entering passwords into shell history, and remove session files afterward. Both bundled files were reviewed to investigate scanner coverage gaps; actual portal responses and host permissions remain unverified.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (11)

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared purpose describes accessing and retrieving portal data. The supplied code instead performs an account-changing POST to /accounts/update/. Writing profile fields and changing notification settings are substantive capabilities not disclosed by the read-oriented description; the subsequent verification request does not make those changes a supporting retrieval detail.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The description presents the skill as retrieving portal information, with login as a supporting POST operation. This code instead posts a customer service report. Although it targets the same portal, reporting a missed pickup is a distinct write capability rather than a supporting detail of data retrieval.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared purpose covers accessing portal data, with a login POST as a supporting authentication step. This snippet instead performs a separate support-form submission. Although the inquiry concerns pickup information, sending a message is an additional write action not disclosed in the description.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

The portal resources are consistent with the description, but the code performs a state-changing operation. Although the description mentions skips, it frames the skill as retrieving data after login and does not disclose the ability to create or change skips. The subsequent calendar request verifies the requested modification.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
88% confidence
Finding

The endpoint is consistent with the declared portal, but the operation changes account service state. Although the description mentions skips, it frames the capability as accessing data and fetching JSON or rendered pages; it does not declare submitting skip requests. The supplied chunk therefore adds an undeclared write capability.

Content

No source excerpt is available for this finding.

Incomplete referenced artifact analysis

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 199)May include surrounding context.

md
## Writes (all POST; see `references/endpoints.md` for full field lists)

Setup persists authentication secrets without warning about local credential exposure.

Medium
Category
Output Handling
Confidence
97% confidence
Finding

The setup creates a persistent session-cookie file without enforcing private permissions; with a common umask of 022 and traversable home directories, other local users could read it and reuse the authenticated session. Typing the literal password export can also retain it in shell history, while exporting it unnecessarily propagates it to child processes.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
96% confidence
Finding

Session persistence is legitimate here, but the cookie jar is created through ordinary shell redirection without a restrictive umask or explicit permissions. Where filesystem permissions allow another local user to read it, the stored session cookie can grant access to private portal data and account-changing operations.

Content

Scanner excerpt · SKILL.md (reported line 46)May include surrounding context.

export CROWNTOWN_PASSWORD='your-portal-password' # or: op read "op://Private/CrownTown/password" export CT=https://portal.crowntowncompost.com JAR=~/.cache/crowntown-cookies.txt mkdir -p ~/.cache && : > "$JAR"

text

## Log in (get the session cookie)

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 63)May include surrounding context.

md
# 2. POST the credentials. Do NOT follow redirects (-L) here: the 302's
#    Set-Cookie carries the sessionid, and success is "302 away from login".
printf '%s' "$CROWNTOWN_PASSWORD" | curl -s -c "$JAR" -b "$JAR" \
  -H "X-CSRFToken: $CSRF_COOKIE" -H "Origin: $CT" \
  -H "Referer: $CT/accounts/login/?next=/accounts/" \
  --data-urlencode "csrfmiddlewaretoken=$CSRF_FORM" \

The skill provides account-changing and message-sending workflows beyond its declared portal-data retrieval purpose.

Medium
Category
Excessive Agency
Confidence
96% confidence
Finding

The manifest at L004–L010 describes accessing customer data by logging in and fetching JSON endpoints and server-rendered pages. However, L211–L217 instruct POST operations for modifying account details and notification preferences, reporting missed pickups, contacting support, and requesting cancellation. These consequential writes and sends exceed the described data-access workflow.

Content

No source excerpt is available for this finding.

The skill includes authenticated account mutations and message submissions beyond its stated portal-data retrieval purpose.

Medium
Category
Excessive Agency
Confidence
97% confidence
Finding

The manifest describes retrieving Crown Town Compost data through JSON endpoints and server-rendered pages. However, the executable recipes submit missed-pickup reports (L184–L187), overwrite account identity/contact fields and disable an email preference (L196–L200), and send support messages (L212–L215). These create remote side effects rather than merely retrieving the declared account and service information.

Content

No source excerpt is available for this finding.