Back to skill

Security audit

moltiguild

Security checks for vulnerabilities and agentic risk

Overview

The skill fits its marketplace purpose, but needs review because its shell-based API examples can mishandle user input and it requires full display of untrusted remote results.

Review before installing. Use only non-sensitive task text and identifiers, do not include secrets or confidential data, and avoid literal shell interpolation of user input; a structured HTTP client or safely serialized JSON would be safer. Treat mission results as untrusted remote content and redact or summarize sensitive or unsafe material despite the skill's full-display instruction.

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

Error
Location
SKILL.md:82
Finding

Shell Command Injection Through Unsafely Interpolated User Input

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 82-85, 94-97, 115-118, and 124-127
Vulnerability Type: Shell command injection caused by embedding user-controlled values in shell command templates
Risk Level: High

Vulnerable Code

bash
exec curl -s -X POST https://moltiguild-api.onrender.com/api/claim-starter \
  -H "Content-Type: application/json" \
  -d '{"userId": "USER_ID"}'
bash
exec curl -s -X POST https://moltiguild-api.onrender.com/api/smart-create \
  -H "Content-Type: application/json" \
  -d '{"task": "DESCRIBE THE TASK", "budget": "0.001", "userId": "USER_ID"}'
bash
exec curl -s -X POST https://moltiguild-api.onrender.com/api/mission/MISSION_ID/rate \
  -H "Content-Type: application/json" \
  -d '{"rating": RATING_1_TO_5, "userId": "USER_ID", "feedback": "OPTIONAL_FEEDBACK"}'
bash
exec curl -s -X POST https://moltiguild-api.onrender.com/api/create-pipeline \
  -H "Content-Type: application/json" \
  -d '{"guildId": 1, "task": "TASK", "budget": "0.005", "steps": [{"role": "writer"}, {"role": "reviewer"}], "userId": "USER_ID"}'

Technical Analysis

The skill mandates execution of curl through a shell while placing user-controlled task descriptions, feedback, mission identifiers, and user identifiers directly inside command templates. It does not require structured JSON serialization, shell-safe argument passing, or input validation.

The JSON request bodies are enclosed in single quotes. If an implementation replaces the documented placeholders directly, an input containing a single quote can terminate the quoted request body. Shell metacharacters following that quote may then be interpreted as additional commands rather than request data.

For example, a malicious task or feedback value shaped like ' ; attacker_command ; # can break out of the intended JSON argument. JSON escaping alone is insufficient because shell parsing occurs ...[truncated 2130 chars]

Remediation
View remediation

Remediation Suggestions

  1. Replace shell-executed curl commands with a structured HTTP tool or language HTTP client that accepts the URL, headers, and body as separate typed arguments.
  2. Serialize request bodies with a JSON library rather than manually assembling JSON strings.
  3. If shell execution is unavoidable, construct JSON with a safe serializer such as:
    bash
    payload="$(jq -n \
      --arg task "$TASK" \
      --arg budget "$BUDGET" \
      --arg userId "$USER_ID" \
      '{task: $task, budget: $budget, userId: $userId}')"
    
    curl -sS -X POST 'https://moltiguild-api.onrender.com/api/smart-create' \
      -H 'Content-Type: application/json' \
      --data-binary "$payload"
    
  4. Pass commands as an argument array without invoking a shell whenever the execution environment supports that option.
  5. Do not use eval, nested command construction, or direct placeholder replacement in shell source.
  6. Validate constrained fields before transmission:
    • Require ratings to be integers from 1 through 5.
    • Require budgets to match the permitted numeric format and range.
    • Restrict mission, pipeline, and guild identifiers to their documented formats.
    • Apply reasonable length limits to user IDs, tasks, and feedback.
  7. Add explicit instructions warning implementers that task descriptions and feedback are untrusted data and must never be interpolated into shell commands.
  8. Inform users that task descriptions, identifiers, and feedback are transmitted to an external service and should not contain credentials, private keys, confidential file contents, or other secrets.
  9. Run the skill with least privilege, a minimal environment, restricted filesystem access, and outbound network access limited to the documented API hosts to reduce impact if command handling fails.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (7)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill directs the agent to send user IDs and free-form task content to hosted external APIs, but it does not prominently warn users that their prompts and identifiers leave the local environment. That creates a privacy and data-handling risk, especially if users include sensitive information in tasks under the assumption the agent operates locally.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The instruction to always display full mission outputs removes the opportunity to redact sensitive information or withhold unsafe generated content. If the external service echoes user-provided secrets, personal data, or harmful instructions, the skill would force disclosure back to the user or chat context without safety review.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation claims the skill is limited to read-only and a narrow set of user-scoped POST endpoints, but elsewhere it instructs use of create-pipeline, which is also a state-changing operation. This inconsistency can mislead reviewers and users about what actions the skill may perform, weakening informed consent and security review accuracy.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
86% confidence
Finding

The skill is designed around exec curl calls to project-hosted external APIs, which creates an external transmission channel for user-provided data and retrieved content. While network access is expected for this integration, it still represents a real security boundary crossing and becomes risky because the skill normalizes sending user tasks to remote infrastructure without strong consent and data minimization safeguards.

Content

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

Step 1: Check Platform Status

bash
exec curl -s https://moltiguild-api.onrender.com/api/status

Step 2: Browse Guilds

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill requires fetching mission results from an external service and displaying them in full, but it does not warn that this content is untrusted and may contain sensitive, harmful, or manipulative output. Presenting externally sourced content without a safety caveat increases the risk of exposing users to unsafe or privacy-impacting material.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The repeated mandate to show mission results in full reinforces unsafe handling of untrusted remote output and discourages normal safety controls. This increases the chance of prompt injection propagation, data leakage, or exposure to abusive content because the agent is instructed not to filter, truncate, or summarize.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill states that create-pipeline is not used, but earlier operational steps actively instruct the agent to call that endpoint. Contradictory instructions about state-changing behavior are dangerous because they can conceal actual capabilities from users and auditors and lead to unintended external actions.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.